AWS の API Gateway (HTTP API) 経由で Lambda に繋いで POST データを処理するメモ


取り急ぎ忘れないようにめもめも。

  • POSTパラメータは event['body'] に入っている。
  • API Gateway の設定で isBase64Encoded が有効であると、Base64エンコードされる

APIに投げるときにJSONエンコードしたものを渡すと、Base64デコード後にJSONが取れる。
その際は、リクエストクエリのパースではなく、JSONのパース処理を行う。

import json
import base64
import urllib.parse

def lambda_handler(event, context):

    # POSTパラメータがBASE64でエンコードされているのでデコードする
    decoded_body = base64.b64decode(event['body']).decode()
    # POSTパラメータをdict型に変換
    post_params = urllib.parse.parse_qs(decoded_body)

    result = {}
    result['message'] = 'lambdaからのレスポンス'

    # POSTされたデータを参照 (配列になっているので注意)
    result['name'] = post_params['name'][0]
    result['email'] = post_params['email'][0]

    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }