AWS API Gatewayからのevent['body']がbase64 encodeされて渡される

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

表題の通り。

method="POST"で送信した値がHTTP APIとしたAPI GatewayからLambdaにeventを渡す際、bodyの中身がbase64 encodeされた文字列として渡される。

色々調べてみたんだけど、理由は謎。書籍やネット上の記事ではテキストとして扱ってるので、何か理由がありそうなんだけど...

API Gateway でのコンテンツタイプの変換 - Amazon API Gateway

ちなみに同様の事象に遭っている人もいる。


event['body']をbase64 decodeする

base64 decodeはbyte typeにdecodeされるので、byte -> strに変換してあげると扱いやすい。

from urllib.parse import parse_qs
body = base64.b64decode( event['body'] )
param = parse_qs(body.decode('utf-8'))


その他、eventの変更点

僕の環境では、クライアントのリモートIPアドレスが

event['requestContext']['identity']['sourceIp']

ではなく、

event['requestContext']['http']['sourceIp']

で取れました(^_^;)