2016-08-29 17 views
1

私は、APIゲートウェイをS3のプロキシとして(カスタム認証のために)使用して問題に遭遇しました。既知の問題)。AWS API Gateway to S3 - PUTコンテンツエンコーディング.Zファイル

私は通常、.gzまたは.Z(Unix圧縮ユーティリティ)ファイルをアップロードしています。私が理解している限り、データはエンコードの問題のために維持されません。私はバイナリにデータをデコードする方法を理解していないようです。

オリジナル大手バイト:��9�W�

を...ファイル名とデータの残りが続く:\x1f\x8b\x08\x08\xb99\xbeW\x00\x03

API GWを通過した後。

'これを回避する'の1つの方法は、API GWへのPUTリクエストのヘッダーにContent-Encodingを 'gzip'として指定することです。これは、API GWがS3に転送する前にファイルを解凍するように強制しているようです。

Unix圧縮ユーティリティで圧縮された.Zファイルでは、同じことはできません。ここでContent-Encodingを 'compress'として指定する必要があります。

誰かがデータに何が起こっているのかについての洞察がありますか?また、API GWを使用している間にデータのエンコーディングを維持する(またはS3に入ったらデコードする)可能性のある回避策を知っている人はいますか?

明らかに私はS3 APIに直接アクセスすることができます(またはAPI APIにアクセスするための事前署名されたURLをAPI GWに返すようにしてもよい)が、私はそれをしたくない理由がいくつかあります。

私は、エンコードに関してはあまりよく分かりませんが、私の質問のいくつかに明白な答えがある場合は申し訳ありません。

答えて

2

これはまさに "エンコーディングの問題"ではありません。実際にAPIゲートウェイがdoesn't support binary data ("yet") ...ということは、問題のデータの内容によっては、バイナリデータが破損する可能性があります。 Content-Encoding: gzipとして

アップロードは、おそらくコアインフラストラクチャへのリクエストボディを通過する前に(GZIPは、すべての後に、標準的なエンコーディングであり、バイナリである)バイナリデータを扱うことができるあるフロントエンドコンポーネントで復号化をトリガします。 ..これは、特定のペイロードに応じて、一貫して正しい結果を提供しない回避策であることがほぼ確実にわかります。それが全く機能するという事実は、機能よりもバグのように思えます。

今のところ一貫して実行可能なオプションは、ペイロードをbase64でエンコードすることです。これにより、ワイヤでのサイズが33%増加します(3バイトの入力ごとにbase64エンコードで4バイトの出力が生成されます)。ソリューションの。適切なContent-Encoding: gzipのBase64 + gzipもうまくいくはずです。圧縮ファイルをbase64に変換してから、ワイヤでサイズを縮小しようとすると結果がgzipされますが、現在提供できるAPIゲートウェイと一貫しているはずです。

+0

ご回答ありがとうございます。私は現在、Content-Type 'application/x-gzip'のもののボディマッピングテンプレートで' $ util.base64Encode($ input.body) 'を使ってデータを変換する作業をしています(' application /圧縮する)。しかし、私は単純に変換してファイルに渡すことはできません。私はデフォルトの 'Method Request passthrough'テンプレートを使い、' $ util.base64Encode'を使って 'body-json'を変更しています。これで、JSONがファイルに格納されるだけです。 'body-json'フィールドには変換されたデータが含まれています。 – unclemeat

+0

Nevermind - 他の情報/ jsonを持たずに '$ util.base64Encode($ input.body)'を実行するだけでよいことが分かります。再度、感謝します。 – unclemeat

+1

私は、クライアント上でのエンコーディング、URLエンコードされたフォームとしての送信、ラムダ関数の入力パラメータからのデコードを考えていましたが、API Gatewayはあなたが行っていたことを喜んで気にせず、率直に言って、プラットフォームが8ビットのクリーンでオクテットに無関係でない限り、潜在的にはそれ以上の問題はないようです。 –

関連する問題