【AWS】APIGatewayとlambdaをプロキシ統合で連携する
APIGatewayからlambdaを統合するときに、プロキシ統合でバックエンドに渡す方法があります。
確か去年あたりに新しくできた方法で、これのおかげでかなり楽にマッピングができるようになりました。
今回、業務でAPIGatewayを使用したのでその事を書いていきます。
プロキシ統合とは
従来、APIGatewayからlambdaを呼び出すにはパラメータのマッピング設定を行わないといけませんでした。
GETで来た場合のマッピングテンプレートを設定して、それをどのパラメータに渡すかを定義して実行していました。
ですがこのやり方だと毎回やらないといけないですし、なによりその管理が面倒です。
RESTAPIとして利用する場合、CRUDの処理ができればいいので、パラメータの形式はほぼ一定だと思います。
プロキシ統合を行うと、その辺りを全部やってくれる形になります。
lambda側のパラメータ
lambdaでパラメータを受け取るときは、全てeventに入ってくるので、これを参照すれば大丈夫です。
ドキュメントにも書かれていますが、下記のような形式になります。
{ "resource": "Resource path", "path": "Path parameter", "httpMethod": "Incoming request's method name" "headers": {String containing incoming request headers} "multiValueHeaders": {List of strings containing incoming request headers} "queryStringParameters": {query string parameters } "multiValueQueryStringParameters": {List of query string parameters} "pathParameters": {path parameters} "stageVariables": {Applicable stage variables} "requestContext": {Request context, including authorizer-returned key-value pairs} "body": "A JSON string of the request payload." "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encoded" }
このうち、GETのパラメータはqueryStringParametersに入ってくるので、ここを参照すればOKです。
Pythonの場合
event.get('queryStringParameters').get('key')
POSTの場合はbodyなので、パースなりなんなりすれば大丈夫かと。
param = event.get('body') param['key']
こんな感じで簡単にlambda内で使用できます。その他のパラメータもrequestContextなどに入ってきていて、特にstage名で処理を分ける場合は使えると思います。私はdevとprdのステージによって処理を分ける感じで使いました。