AWS Lambda プロキシ統合を使用して、Amazon API Gateway REST API (または HTTP API) を介してバイナリデータを返したいと考えています。設定する方法を教えてください。
解決方法
注: API Gateway HTTP API は、バイナリデータを自動的に処理します。API Gateway REST API でバイナリデータを処理するには、バックエンドの Lambda 関数が プロキシ統合用の Lambda 関数の正しい出力形式を使用する必要があります。
Lambda プロキシ統合を使用して API Gateway REST API 経由でバイナリデータを返すには
1. Lambda コンソールで新しい Lambda 関数を作成します。
注: Python 3 Lambda 関数の例については、「Lambda プロキシ統合からバイナリメディアを返す」を参照してください。
2. API Gateway コンソールで新しい REST API を作成します。
3. 次の手順を実行して、新しい API の GET メソッドを作成します。
[リソース] パネルで [アクション] を選択します。
[メソッドの作成] を選択します。その後、[GET] をクリックします。
[/ - GET - Setup] セクションで [統合タイプ] を選択し、[Lambda 関数<move_</b>_tag_here>] を選択します。 [Lambda プロキシ統合の使用] チェックボックスを選択します。
[Lambda リージョン] で Lambda 関数を作成したリージョンを選択します。
手順 1 で作成した Lambda 関数の名前を [Lambda 関数] に入力します。
[保存] を選択します。
[Lambda 関数に権限を追加する] ダイアログボックスが表示されたら [OK] を選択します。
4. 左側のナビゲーションペインの [API] セクションで [設定] を選択します。
5. [バイナリメディアタイプ] セクションで [バイナリメディアタイプの追加] を選択し、image/png または使用する別の形式 (application/pdf など) を選択します。
6. [変更の保存] を選択します。
7. API を新規ステージにデプロイします。詳細については、「API Gateway コンソールを使用したステージのセットアップ」を参照してください。
これで、API で Lambda プロキシ統合を使用して API ゲートウェイ経由でバイナリデータを返す準備ができました。API を呼び出す方法については、「Amazon API Gateway での REST API の呼び出し」を参照してください。
注: バイナリデータを扱う場合、Lambda 関数の出力の ;isBase64Encoded プロパティを true に設定する必要があります。 body プロパティには、base64 でエンコードされたバイナリメディアも含まれている必要があります。詳細については、「REST API のバイナリメディアタイプの使用」を参照してください。
Postman と cURL を使用してバイナリデータを返すために REST API を呼び出すには
重要: Postman または cURL を使用して REST API を呼び出してバイナリデータを返す場合は、API リクエストに Accept ヘッダーを含めます。Accept ヘッダー値は、使用するファイル形式に一致する必要があります。たとえば、画像/PNGかアプリケーション/PDF。
Postman を使用して REST API を呼び出す方法については、「Postman を使用して REST API を呼び出す」を参照してください。
API Gateway がペイロードをエンコードする方法については、「API Gateway でのコンテンツタイプの変換」を参照してください。
API Gateway REST API を呼び出してバイナリデータを返す cURL コマンドの例
$ curl 'https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/' -H 'Accept: image/png'
注: cURL コマンドの例を実行する前に、次の変数を置き換えてください。
{restapi_id} に API 識別子を入力します。
**{region}**に API の AWS リージョンを入力します。
**{stage_name}**に API のステージ名を入力します。
image/PNG には、使用する実際の画像ファイルのタイプを入力します。
ウェブブラウザを使用して REST API を呼び出してバイナリデータを返すには
ウェブブラウザーを使用して REST API を呼び出してバイナリデータを返す場合は、text/html をバイナリメディアタイプとして API に追加します。
注: ウェブブラウザは複数の値を含む Accept ヘッダーを自動的に送信します。デフォルトでは、最初の値は常に html/text です。API Gateway は最初の値のみを参照するので、text/html をバイナリメディアタイプとして API に追加する必要があります。そうでないと、次のエラーメッセージが表示されます。
"The image "https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/" cannot be displayed because it contains errors."
text/html をバイナリメディアタイプとして REST API に追加するには、次の操作を行います。
1. API Gateway コンソールで、API を選択します。
2. 左側のナビゲーションペインの [API] セクションで [設定] を選択します。
3. [バイナリメディアタイプ] で [バイナリメディアタイプの追加] を選択して text/html を追加します。
4. [変更を保存] を選択します。
5. API をデプロイします。
詳細については、「API Gateway でのコンテンツタイプの変換」を参照してください。