ここでのシンプルでクールなソリューションは、ELBをCloudFrontの背後に配置することです。
オリジンサーバー(この場合はELB)が5XXエラー(または、必要に応じて4XX)をスローした場合、CloudFrontはカスタムエラーページを返すことができます。これは、CloudFrontが、バケット、およびバケットへのキャッシュ動作ルーティング(例)の作成/errors/static/*
。
これは、重要な理由でRoute 53フェイルオーバーよりもうまく機能します...致命的な欠陥である場合...ブラウザは、DNSルックアップを予想よりもはるかに長くキャッシュすることについてひどいです。DNS TTLは関係ありません。
基本的に、ブラウザはDNSエントリを取得すると、それを使用しようとし続けます。通常、すべてのブラウザウィンドウが閉じられるまで。
したがって、既にサイトにいた訪問者のサイトがダウンした場合、代替サイトが表示される可能性は低くなります。
さらに悪いことに、訪問者がダウンしているときに初めてサイトにアクセスした場合、すべてのブラウザウィンドウを閉じるまで、メンテナンスページに「固定」され続けます。
フェイルオーバーDNSを使用する場合、フェイルオーバーターゲットがまだアプリケーションである場合にのみ、これは本当に良いことです。
不要な場合は、CloudFrontのキャッシュをオフにできます。
CloudFrontのエラーキャッシングTTLをゼロ以外の値に設定して、サイトがダウンしていて回復を試みているときにサイトのハンマー処理を中止することもできます。エラーをスローする特定のページでは、エラーページが引き続き表示され、エラーキャッシュTTLの期限が切れるまで、サーバーがそのページへのリクエストで悩まされることはありません。