🔒

CloudFrontのカスタムエラーページにもLambda@Edgeで設定したHTTPレスポンスヘッダーを反映する

2021/06/26に公開

背景

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