Lambda プロキシ統合からバイナリメディアを返す - Amazon API Gateway

Lambda プロキシ統合からバイナリメディアを返す

AWS Lambda プロキシ統合からバイナリメディアを返すには、Lambda 関数からのレスポンスを base64 でエンコードします。また、API のバイナリメディアタイプを設定する必要があります。

注記

この統合例でウェブブラウザを使用して API を呼び出すには、API のバイナリメディアタイプを */* に設定します 。API Gateway は、クライアントからの最初の Accept ヘッダーを使用して、レスポンスがバイナリメディアを返すかどうかを判断します。ブラウザからのリクエストなど、Accept ヘッダー値の順序を制御できない場合に、バイナリメディアを返すには、API のバイナリメディアタイプを */* (すべてのコンテンツタイプ) に設定します。

以下のサンプルの Python 3 Lambda 関数は、Amazon S3 からのバイナリイメージまたはテキストをクライアントに返すことができます。関数のレスポンスには、返されるデータのタイプをクライアントに示す Content-Type ヘッダーが含まれています。この関数は、返すデータのタイプに応じて、レスポンスで isBase64Encoded プロパティを条件付きで設定します。

import base64 import boto3 import json import random s3 = boto3.client('s3') def lambda_handler(event, context): number = random.randint(0,1) if number == 1: response = s3.get_object( Bucket='bucket-name', Key='image.png', ) image = response['Body'].read() return { 'headers': { "Content-Type": "image/png" }, 'statusCode': 200, 'body': base64.b64encode(image).decode('utf-8'), 'isBase64Encoded': True } else: return { 'headers': { "Content-type": "text/html" }, 'statusCode': 200, 'body': "<h1>This is text</h1>", }

バイナリメディアタイプの詳細については、「REST API のバイナリメディアタイプの使用」を参照してください。