AWS Lambda プロキシ統合を使用して、Amazon API Gateway REST API 経由でバイナリデータを返したいと考えています。
解決策
API Gateway REST API でバイナリデータを処理するには、バックエンド Lambda 関数は、プロキシ統合用の Lambda 関数の出力形式を使用する必要があります。
注: API Gateway HTTP API は、バイナリデータを自動的に処理します。
Lambda プロキシ統合を使用して API Gateway REST API 経由でバイナリデータを返す
次の手順を実行します。
- Lambda コンソールを開きます。
- 新しい Lambda 関数を作成します。
注: Python 3 Lambda 関数の例については、「API ゲートウェイで、Lambda プロキシ統合からバイナリメディアを返す」を参照してください。
- API Gateway コンソールを開きます。
- 新しい REST API を作成します。
- 新しい API 用の GET メソッドを作成するには、次の手順を実行します。
[メソッド] パネルで、[メソッドを作成] を選択します。
[メソッドタイプ] で、[GET] を選択します。
[/ - GET - 設定] セクションの [統合タイプ] で、[Lambda 関数] を選択します。
[Lambda プロキシ統合の使用] を有効にします。
[Lambda 関数] で、お使いの Lambda 関数 を作成した AWS リージョンを選択します。次に、新しい Lambda 関数の名前を入力します。
[メソッドを作成] を選択します。
- [API] で [API 設定] を選択します。
- [バイナリメディアの種類] で [メディアタイプの管理] を選択し、[バイナリメディアタイプを追加] を選択します。
- image/png や application/pdf などのファイル形式を追加します。
- [変更を保存] を選択します。
- API を新しいステージにデプロイします。
注: バイナリデータの場合は、Lambda 関数の出力で、;isBase64Encoded プロパティを true に設定する必要があります。body プロパティには、base64 でエンコードされたバイナリメディアも含まれている必要があります。詳細については、「API Gateway における REST API のバイナリメディアタイプ」を参照してください。
Postman または cURL を使用して REST API を呼び出し、バイナリデータを返す
重要: Postman または cURL の場合は、API リクエストに Accept ヘッダーを含めてください。Accept ヘッダーの値は、image/png や application/pdf などのファイル形式と一致している必要があります。
次の curl コマンドを実行します。
curl 'https://exampleRestApiId.execute-api.exampleRegion.amazonaws.com/exampleStageName/' -H 'Accept: image/png'
注: 上記のコマンドで、exampleRestApiId を実際の API の識別子に、exampleRegionを お使いの API を設置しているリージョンに置き換えます。また、exampleStageName を実際の API のステージ名に、image/png をお使いの画像ファイルタイプに置き換えてください。
ウェブブラウザを使用して REST API を呼び出し、バイナリデータを返す
ウェブブラウザは、複数の値を含む Accept ヘッダーを自動的に送信します。デフォルトでは、最初の値は常に html/text です。API Gateway は最初の値のみを受け入れるため、API のバイナリメディアタイプに text/html を追加する必要があります。そうしないと、次のエラーメッセージが表示されます。
"エラーがあるため、イメージ "https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/" を表示できません。"
text/html をバイナリメディアタイプとして REST API に追加するには、次の手順を実行します。
- API Gateway コンソールを開きます。
- API を選択します。
- ナビゲーションペインで [API 設定] を選択します。
- [バイナリメディアの種類] で [メディアタイプの管理] を選択し、[バイナリメディアタイプを追加] を選択します。
- text/html を入力します。
- [変更を保存] を選択します。
- API をデプロイします。
詳細については、「API Gateway でのコンテンツタイプの変換」を参照してください。
関連情報
API Gateway で REST API のステージをセットアップする
API Gateway で REST API を呼び出す