API GatewayからAWS Lambdaを呼び出す。
AWS Lambdaは、サーバレスでロジックを記述できる関数型のフレームワークです。また API Gateway はAWSのサービスをRESTで呼び出す事が出来るフレームワークです。これらを用いて、API GatewayからLambdaを呼び出すことで、サーバレスなAPI環境が構築できそうです。
具体的には
https://xxxx.execute-api.ap-northeast-1.amazonaws.com/dev?q_param=value1
などとクエリパラメタ付きのリクエストを送ると、
{ "my_param1": "value1" }
なんてJSONを echoするAPIを構築してみます。
Lambdaサービスのトップにアクセスし、関数の作成 >> 一から作成を選択します
関数名を helloworld に、ロールは新しく作成し、(lambdaRole) 関数の作成をクリック
helloworldという関数が作成され、関数を記述する画面が表示されます。今回はPythonを選択しました。
右上のハンドラというテキストボックスに、lambda_function.lambda_handler とありますが、これはソースコードの lambda_function.pyのlambda_handlerメソッドを呼び出すことを意味しています。で、具体的なコードは 単純なオブジェクトを一つ返すように記述しました。
さて右上の「テスト」ボタンをクリックしてみると、「テストイベントの設定」というパラメタに渡ってくるオブジェクトを指定する画面が表示されます。
図のように、JSONオブジェクトを指定しますが、ここでは末尾に"param1": "value1" というパラメタを指定しています。これはコード中:
return { "my_param1": event['param1'] }
のevent['param1'] に渡ってくるようになっています。
curl https://xxxx.execute-api.ap-northeast-1.amazonaws.com/dev -d 'q_param=value1' -G
$ curl https://lf7by7vxpk.execute-api.ap-northeast-1.amazonaws.com/dev -d 'q_param=value1' -G | jq {
"my_param1": "value1"
}
MacBookPro?:~ masatomix$