ぽぴなび

知って感動した技術情報・生活情報や買ってよかったものの雑記です。

【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=tarotanakaの部分。

www.iga-soft.com

クエリパラメータ

https://www.exmaple.com/users/tanaka?firstname=tarofirstname=taroの部分。

dev.classmethod.jp

他 注意点

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