CloudFront+S3の構成でエラーになったときに特定のページを表示させたーいーー!
ということで、エラーページを設定していきます
ゴール
404エラーになったときに、エラーページを表示させる
ことをゴールとします。
現状は
となっています。
設定後は
を表示させます
方針
CloudFront にカスタムエラーレスポンスを設定すれば実装できます
特定のエラーコードに対して、
指定したエラーページやステータスコードを返すよう設定できます
公式ドキュメントはこちらです
実装
エラーページ
・404.html (404に対して表示させるページ)
1 2 3 4 5 6 7 8 9 10 11 12 |
<!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でアップロードしましたが、コンソールからアップロードしても大丈夫です!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
1 2 |
$ terraform plan $ terraform apply -auto-approve |
ダウンタイムはなかったと思います。。。
動作確認
https://<CloudFrontのドメイン>/<S3にないフォルダ名>/
にアクセスして、↓が表示されればOKです!
もし表示されない場合は、403が返ってきている可能性があります。
下記を参考に404が返ってくるように設定してみてください
参考記事
カスタムエラーレスポンスを生成する - Amazon CloudFront
リクエストされたコンテンツを CloudFront が配信ができない場合の、カスタムエラーレスポンスを生成します。
Terraform Registry
Help with defining custom_error_responses · Issue #40 · cloudposse/terraform-aws-cloudfront-s3-cdn
Hello Gents, I am struggling with defining custom_error_responses using your module. Can you please guide how to create custom error response with values kept i...
コメント