【AWS】API Gateway → Lambda でLambdaにパス・クエリパラメータを渡す
やりたいこと
https://www.exmaple.com/users/tanaka?firstname=taro
,https://www.exmaple.com/users/suzuki?firstname=taro
みたいなURLからtanaka
(or suzuki
)とfirstname=taro
を取り出したい。
方法
パスパラメータ
https://www.exmaple.com/users/tanaka?firstname=taro
のtanaka
の部分。
クエリパラメータ
https://www.exmaple.com/users/tanaka?firstname=taro
のfirstname=taro
の部分。
他 注意点
Lambdaのeventが空になってしまう
Lambdaプロキシ統合
にチェックを入れないと空になってしまう。
node.js - Event Object is empty in AWS Lambda nodejs function - Stack Overflow
Lambdaプロキシ統合をONにしたけどInternal Server Errorになってしまう
Lambdaプロキシ統合をONにした場合は、Lambdaのレスポンスを以下の形式にしないとエラーになってしまう。
# Pythonの場合 { "isBase64Encoded" : "boolean", # <= True or False "statusCode": "number", # <= 200, 400, 500, ... "headers": { }, "body": "JSON string" # <= json.dumps(body)等でparse }
Handle Lambda errors in API Gateway - Amazon API Gateway
パスパラメータ・クエリパラメータをLambdaで受け取る
Lambdaプロキシ統合をONにした場合は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" }
API Gateway で Lambda プロキシ統合を設定する - Amazon API Gateway
https://www.exmaple.com/users/tanaka?firstname=taro
の場合は
# "lastname"、"firstname"の部分は上記の設定による event["pathParameters"]["lastname"] # => tanaka event["queryStringParameters"]["firstname"] # => taro