2017-03-13 16 views
3

私は、AWS API Gateway(APIG)とLambda機能を備えたサーバレスWebサイトを構築しています。私はプロキシーインテグレーションを使用する必要があります。なぜなら、ラムダ関数はHTTP要求ヘッダーを受け取る必要があるからです。同時に、いくつかのバイナリデータを提供する必要があります。私の場合、favicon.icoファイル。他の人は、動的に作成されたPDFまたはExcelファイルを提供したいかもしれません。 APIGはこの目的のためにバイナリをサポートしています。 base64でデータをエンコードし、そのMIMEコンテンツタイプがクライアントに提供される前にデコードできるように設定します。ただし、これはプロキシ統合では機能しません。プロキシの統合は、統合応答の部分をスキップするだけです。AWS API Gatewayからプロキシ統合でバイナリデータを提供するにはどうすればよいですか?

私はfavicon.icoのリクエストをS3エンドポイントにリダイレクトしようとしましたが、ブラウザは奇妙な動作を示していました。 icoファイルは異なるドメインからリダイレクトされたドメインであり、同じドメインではないためです。

base64でエンコードし、クライアントブラウザでデコードすることはオプションではありません。これは標準ではないため、すべてのブラウザで機能しない可能性があります。

AWSがこれに新しい機能を追加するまで、私は何もできないと思います。誰もがこの問題に目をつけていますか?任意のアイデアや提案?

答えて

0

ここに自分の質問に答える。 AWSに関する質問については、AWSフォーラムにアクセスしてください。 mamy AWSユーザーはここではありません。

答え:プロキシとの統合によるバイナリサポートは仕事を行い、受信応答と送信応答の両方で機能します。

これに関連した3つの要因がある:

  1. APIGのバイナリサポート設定のMIMEタイプ(Iコンソールでこれを設定する)
  2. 「isBase64Encoded」値着信および発信JSON
  3. 両方では出JSONで
  4. 「コンテンツタイプ」値

上記の答えはイエス、あなたがファイルを受け入れることができ、はい、再び、プロキシの統合でファイルを吐き出すことができます。

ボディのユーザーの投稿と、設定したMIMEタイプが一致する場合、APIGはbody64部分全体をbase64でエンコードし、これを "isBase64Encoded"値で示します。同じことが発信応答でも起こります。バイナリデータで応答する場合は、base64でエンコードし、発信JSONでその値をtrueに設定します。

着信要求の場合は、設定するMIMEタイプに依存します。発信の場合は、JSONとMIMEタイプの両方の条件、指標が一致している必要があります。

簡潔にするため、MIMEタイプを*/*に設定しました。ユーザーがボディに何かを提出するたびに、APIGでエンコードしてからデコードします。私はバイナリで応答するたびに、私はちょうどインジケータを設定し、base64でエンコードします。私はtest/html(圧縮されていない)のような他の型ではこれをしません。

+0

私のエンドポイントの1つでPDFを返そうとしていて、それをbase64としてエンコードし、 "isBase64Encoded"をtrueに設定しました。しかし、私が戻ってくるPDFは、正しくデコードされないようです。ファイルをテキストエディタで開き、手動でデコードして保存すると、PDFを表示できます。それがなぜ起こっているのか? – JPL

+0

JPLでは、バイナリサポートのMIME設定を確認してください。 – gini09

+0

私の最後のコメント以来、私はすべての型のバイナリサポートを追加しました*/*、これは動作しますが、JSONのような非バイナリ型を混乱させます。 application/pdfやapplication/*を入力しても、API Gatewayはそれを認識せず、正しく処理しません。フォーマットが間違っているかどうか、または他の設定があるかどうかはわかりません。 – JPL

関連する問題