概要
画像や音声などのバイナリデータを、API Gatewayで受けてLambdaに渡すときにやるべきことのメモ。
API Gatewayでやるべきこと
1. バイナリメディアタイプ
APIの設定で、バイナリメディアタイプを定義する。画像であれば、image/jpeg、音声であればaudio/wavなど。
2. 統合リクエストのマッピングテンプレート
$input.body
マッピングテンプレートにおいて、$input.bodyには、リクエストボディに入っているバイナリデータをbase64エンコードした文字列が入っている。
以下の例では、body-jsonの中のimgDataにbase64文字列を格納している。
Lambdaでやるべきこと
APIGatewayのマッピングテンプレートで格納したbase64エンコード文字列を、デコードしてバイナリデータを得る。
以下は、上記の例で格納したものを取り出すPythonの例。
import base64 def lambda_handler(event, context): binaryData = base64.b64decode(event["body-json"]["imgData"])
リクエストでやるべきこと
Content-Typeヘッダに当該メディアタイプ、リクエストボディにバイナリデータを入れる。
以下は、画像をPOSTするPythonの例。
import requests headers = { "Content-Type": "image/jpeg" } fo = open("/path/to/imagefile", "rb") data = fo.read() fo.close() requests.post(URL, data=data, header=headers)