2017-09-17 31 views
0

AWS CloudfrontによってAWS S3から提供されるSPAがあります。 >/index.htmlこれは、クライアント側でのルーティングを処理することができるために必要とされる200Lambda @ Edgeを使用した単一ページアプリケーション

HTTPコード付き -

404: Not Found:私は、次のエラーページの動作を設定しています。

今、Cloudfrontのviewer-responseイベントによってトリガーされ、HSTSやX-Frameのようなカスタムヘッダーを設定するLambda @ Edge関数があります。この関数は呼び出されており、実際の/index.html以外のすべてのリソースで意図したとおりに動作します。 Cloudfrontのエラーページの設定でHTMLの実際のGETリクエストが処理されているため、Cloudfrontの前述のエラーページの動作によって処理されていると考えられます。

これを解決するための具体的なアプローチは何でしょうか?

リダイレクトがラムダ機能をトリガーしない理由はわかりません。ラムダ@エッジのエラーページ構成と同じロジックを実装する方法はありますか?

答えて

1

CloudFrontは、原点がHTTPステータスコード400以上を返す場合、原点応答とビューア応答イベントのラムダ関数を実行しません。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html

これが意味することは無応答で未処理エラー結果が発射をトリガーするということです。

しかし、オリジナルのエラー応答ドキュメントで元のエラーが処理された場合、エラードキュメントが正常にレンダリングされた場合はオリジンレスポンスを含め、フォールバックリクエストでオリジントリガが発生し、解決策を見つけることができます。

/index.html(代用エラーページ)を取得すると、オリジンレスポンストリガーを呼び出すときにオリジンレスポンストリガーではなくOrigin Responseトリガーとして実装すると、コードが実行されますが、ビューアレスポンストリガーはまだ起動しません。この動作は完全に文書化されているようには見えませんが、エラー文書と一致するパスのキャッシュ動作がトリガーで構成されている場合、テストでは、正常なエラー文書フェッチでOrigin RequestおよびResponseトリガーが個別に起動されます。

実際、の前に応答を変更することができるため、オリジン応答トリガーがアプリケーションにとって理にかなっているように見えます。追加されたヘッダーはキャッシュとともにキャッシュされます応答 - トリガーが実際に発射する必要がある回数を全体的に減らす必要があります。

Deployedに戻ってから、/*のキャッシュ無効化を実行します(ヘッダーを追加しないでキャッシュされたページを表示しないようにする)。無効化が完了したら、ビューア応答トリガを削除します。

脇に:エラー時に発射応答トリガーをサポートする機能要求を提出しましたが、これが追加を検討しているかどうかわかりません。

+0

これはまさに私が探していたものです。私はトリガーとビューアーレスポンスとオリジンレスポンスの両方を一度に追加しようとしました。悲しいことに、キャッシュを無効にすることを忘れてしまったので、実際にOrigin Responseイベントを実際にトリガーしていませんでした。 – appelblim

関連する問題