🐍
【CloudFront】Terraformでカスタムエラーレスポンスを設定する
CloudFront + S3 の構成でエラーになったときに特定のページを表示させたーいーー!
ということで、エラーページを設定していきます
Terraformを使って設定していきます
・バージョン
$ terraform providers -version
Terraform v1.4.2
on linux_amd64
+ provider registry.terraform.io/hashicorp/aws v4.67.0
ゴール
404 エラーになったときに、エラーページを表示させる
ことをゴールとします。
現状は
となっています。
設定後は
を表示させます
方針
CloudFront にカスタムエラーレスポンスを設定すれば実装できます
特定のエラーコードに対して、
指定したエラーページやステータスコードを返すよう設定できます
公式ドキュメントはこちらです
実装
エラーページ
・404.html (404 に対して表示させるページ)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Error</title>
</head>
<body>
<h1>404.html</h1>
</body>
</html>
S3 へアップロード
先ほど作成したエラーページを CloudFront のオリジンである S3 にアップロードします。
AWS CLI でアップロードしましたが、コンソールからアップロードしても大丈夫です!
// htmlのあるディレクトリに移動
error$ ll
total 0
drwxrwxrwx 1 ****** ****** 4096 Aug 2 22:52 ./
drwxrwxrwx 1 ****** ****** 4096 Aug 2 22:52 ../
-rwxrwxrwx 1 ****** ****** 268 Aug 2 22:53 404.html*
// アップロード前のS3
error$ aws s3 ls s3://<アップロード先のS3バケット>/error/
// 何もないので表示されない
// htmlアップロード
error$ aws s3 cp 404.html s3://<アップロード先のS3バケット>/error/
upload: ./404.html to s3://<アップロード先のS3バケット>/error/404.html
// アップロード後の確認
error$ aws s3 ls s3://<アップロード先のS3バケット>/error/
2023-08-02 23:59:26 268 404.html
Terraform
resource "aws_cloudfront_distribution" "main" {
...
# カスタムエラーレスポンス
# 404エラー
custom_error_response {
error_caching_min_ttl = 3600
error_code = 404
response_code = 404
response_page_path = "/error/404.html"
}
}
aws_cloudfront_distribution 内の custom_error_response ブロックで定義します
プロパティ | 説明 |
---|---|
error_caching_min_ttl | エラーページのキャッシュを保持する時間 |
error_code | 設定したいエラーコード |
response_code | ブラウザへ返すレスポンスコード |
response_page_path | エラーページのパス |
※ は必須項目
plan , apply
$ terraform plan
$ terraform apply -auto-approve
ダウンタイムはなかったと思います。。。
動作確認
https://<CloudFront のドメイン>/<S3 にないフォルダ名>/
にアクセスして、↓ が表示されれば OK です!
もし表示されない場合は、403 が返ってきている可能性があります。
下記を参考に404 が返ってくるように設定してみてください
参考記事
Discussion