API Gateway を介して Lambda から gzip された応答を取得できないようです。Lambda で応答を gzip し、API Gateway で「Content-Encoding」ヘッダーを設定しています。
どの部分が問題なのかわかりません。
Lambda から API Gateway への最終的な戻り値は次のとおりです。
zlib.gzip(myJsonString, function (err, buffer) {
if ( err ) { return handleError(err, context) }
return context.succeed(buffer.toString('binary'));
});
バッファを渡したり、base64でエンコードしたりしてみました。
Chrome から GET リクエストを作成する: ゲートウェイから Content-Encoding ヘッダーを削除すると、バイナリ/base64/バッファ配列がブラウザで文字列応答として取得されます。
ヘッダーを設定すると、GET リクエストは応答なしで完全に失敗しますが、AWS コンソールでのテストでは、引用符で囲まれたペイロードが返されます。
ここで何が起こっているのかはわかりませんが、Amazon が実際に人々にこれを使ってもらいたいのであれば、応答を圧縮できるようにする必要があります。API Gateway のチェックボックスにするだけで、Lambda から JSON 文字列を返すだけで、自動的に圧縮できるようです。