私はここにhttps://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2ラムダ関数は、私は、「Hello World」のHTMLファイルCloudFrontのが正常に静的S3の前に座っていて、私が設定したいCloudFrontの
に指示に従っしようとしていますに無効な要求や応答を返しラムダエッジを使用している追加のヘッダーが、エラーが発生します。本当にイライラしていることは、間違っていることをデバッグするためにエラーのログを見つけることができないということです。ここにブラウザが示すものがあります。ここで
ERROR
The request could not be satisfied.
The Lambda function returned an invalid request or response to CloudFront.
Generated by cloudfront (CloudFront)
Request ID: 2Cqex7euzH0Iigps58i9tMVxdqAaLznL2ZjwqR1sW1AZHz6x2EwfMA==
は私の簡単なラムダのためのコードです:
exports.handler = (event, context, callback) => {
console.log(event)
callback(null, 'Hello from Lambda');
};
トリガタイプがviewer-response
で、(それが重要ならばCache Behavior: *
と、)私のCloudFrontの分布に取り付けられています。ラムダはAWSLambdaBasicExecutionRole
に対応する役割を持ち、Cloudwatchへの書き込みアクセス権を与えます。
トリガーを有効にするとすぐに、Web要求に対する応答が「Hello world」HTMLから上記のエラーに変わります。そのため、ラムダがトリガーされていることがわかります。しかし、ラムダダッシュボードでは、呼び出しやエラーは表示されません。 Cloudwatchにログは表示されません。 CloudFrontダッシュボードにはエラー(5xx
)が表示されますが、ラムダからは何も表示されません。
ラムダコンソールで機能をテストし、展開された機能をクリックし、テストイベントを「CloudFront Modify Response Header」として設定し、Testを打つと、それは成功です。 Cloudwatchはテストのログとコンソール出力を表示します!しかし、ライブ呼び出しのログにはまだ何もありません。
私の唯一の理論は、CloudFrontがラムダを実際に呼び出すことができないというパーミッションに何か問題があります(ラムダダッシュボードに何もない理由を説明しています)。最後に、CloudFrontのログ(S3)は502エラーとLambdaValidationError
のWeb要求を表示しますが、それが役立つかどうかはわかりません。
私の答えがあなたの問題を解決できない場合、あなたのコードを[MCVE](https://stackoverflow.com/help/mcve)に凝縮して質問に編集してください。 –
あなたの答えは私の問題を解決しました、@ sqlbot。私の残っている心配は、私が自分の機能に変更を加えると、毎回それらをあなたが走らせることができないということです!私の例の問題は文字列を返すことでしたが、CFとLambdaによって生成されたエラー/ログからその文字列を知る方法はありますか? – lordbyron
まあ、あなたが知っている...あなたは私がいつでも、よく資金を確保したペイパルのアカウントを持っている限り、それらを実行することができます。 :)しかし、すべての深刻なことに、あなたは正しいです - あなたは知る方法がありません。なぜなら、ノードエラーがないのにCloudFrontがラムダ応答を拒否した場合、ログが移動する場所がないからです。ブラウザにエラーを返すことをお勧めします。しかし、ドキュメントとサンプルの間には、処理できなかったものはありませんでした。すべての "青写真"をチェックアウトしてください。彼らは、CloudFrontが好きなようにフォーマットされた有効な応答を生成します。 –