質問: ### 前提・実現したいこと route53→cloudfront→ec2のような構成で メンテナンスページを表示させたく(フェイルオーバー) 調べていたのですが 解決に至らずこちらに参りました。 ### ページに表示されているもの サーバ(Nginx)を停止、cloudfrontをDisabledに設定して アクセスすると数時間cloudfrontのキャッシュが返され そのあとは「このサイトにアクセスできません Example.comのサーバのDNSアドレスが見つかりませんでした。」 と表示されています。 ### 設定した項目 【Route53】 name:www.example.com Type:A-IPv4 address Alias: Yes Alias Target:xxxxxxx.cloudfront.net. Routing Policy:Failover Failover Record Type: Primary Evaluate Target Health:No Associate with Health Check:Yes Health Check to Associate: health_check_lissen name:example.com Type:A-IPv4 address Alias: Yes Alias Target:s3-website-ap-northeast-1.amazonaws.com. Routing Policy:Failover Failover Record Type: Secondary Evaluate Target Health:No Associate with Health Check:No 【health check(route53)】 Name:health_check_lissen IP address:EC2に紐づいているElastic IP Host name:example.com Port *: 80 Path: mente.html (s3に置いているメンテ用html) ### 試したこと Route53でフェイルオーバーできれば そのほうがいいと考えていましたが CloudFront DistributionsのError Pagesも設定してみました。 HTTP Error Code:403 Error Caching Minimum TTL:300 Customize Error Response:Yes Response Page Path:/example.com/mente.html (S3においてあるディレクトリ/ファイル) HTTP Response Code:503 cloudfrontは有効にし、サーバを落とした状態でサイトにアクセスすると 以下のエラーが表示され、コンソールには403エラーと出ています。 ``` ERROR The request could not be satisfied. Bad request. Generated by cloudfront (CloudFront) ``` ### 疑問点 ・設定の間違い部分、確認が必要そうな部分などご教授いただけましたら幸いです。 ・今回route53以下のcloudfront、その先のec2などが落ちた場合も mente.htmlに飛ばしたいと考えていたのですがそのような構成は実現可能でしょうか。 ・その他おすすめの方法などありましたらアドバイスいただけたら嬉しいです。
回答: 単に記載ミスなのだと思いますが、Route 53 の設定で、Primary は「name:www.example.com」、Secondry は「name:example.com」と違っているので、合わせる必要があると思います。 また、質問文のヘルスチェックの設定ですと、Route 53 から定期的に **http://EC2に紐づいているElastic IP/mente.html** にアクセスし、応答コードが 200 など条件を満たす場合に **Healthy** となります。 > > Path: mente.html (s3に置いているメンテ用html) > > > S3 の Sorry ページではなく、EC2 に存在するページを設定ください。 ヘルスチェックの結果、Healthy の場合、example.com の A レコードへの問い合わせに対し、CroundFront の A レコードを返します。 Unhealthy の場合、S3 の "example.com" バケット(example.com.s3-website-ap-northeast-1.amazonaws.com)の A レコードを返します。 クライアントは **http://(example.com.s3-website-ap-northeast-1.amazonaws.com の A レコード)/** にアクセスしますので、"example.com" バケットの website hosting の設定で、インデックスドキュメントに mente.html を設定しておきます。 > > 今回route53以下のcloudfront、その先のec2などが落ちた場合もmente.htmlに飛ばしたいと考えていたのですがそのような構成は実現可能でしょうか。 > > > ヘルスチェックの "Want to monitor" が "Endpoint" の場合、IPアドレスしか設定できないので、CroudFront 経由のチェックはできなさそうです。 "Want to monitor" には "State of CloudWatch alarm" を選ぶことができるので、もし、CloudWatch で CroudFront の障害を検知できるのであれば、組み合わせでできるかもしれません。