🔒
CloudFrontのカスタムエラーページにもLambda@Edgeで設定したHTTPレスポンスヘッダーを反映する
背景
CloudFront で設定したカスタムエラーページにだけ、Lambda@Edge で設定した HTTP レスポンスヘッダーの内容(HTST 等)が反映されてなく困っていました。
対応と原因
私の場合、Lambda@Edge のトリガーをビューワーレスポンスからオリジンレスポンスに変更したらカスタムエラーページに反映されました。
当初 Lambda@Edge のトリガーをビューワーレスポンスにしていましたが、公式ページには Lambda@Edge のトリガーに関して以下のように書かれています。
ビューワーレスポンス
リクエストされたファイルがビューワーに返される前に関数が実行されます。ファイルが CloudFront キャッシュ内に既に存在するかどうかに関係なく、関数が実行されることに注意してください。
以下の場合、関数は実行されません。
・オリジンが HTTP ステータスコードとして 400 以上を返した場合。
・カスタムエラーページが返された場合。
・ビューワーリクエストイベントによってトリガーされた関数からレスポンスが生成された場合。
・CloudFront で HTTP リクエストが自動的に HTTPS にリダイレクトされる場合 ([ビューワープロトコルポリシー] の値が [Redirect HTTP to HTTPS] の場合)
ビューワーレスポンスだとカスタムエラーページが返された場合は Lambda@Edge が実行されないと書かれています。そのため、カスタムエラーページだけ Lambda@Edge で設定した内容が反映されていませんでした。
Discussion