工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

画像や音声などのバイナリデータを、API Gatewayで受けてLambdaに渡す

概要

画像や音声などのバイナリデータを、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)