web-dev-qa-db-ja.com

AWSロードバランサーとメンテナンスページ

3つのEC2サーバーでAWS Load Balancerを使用していますが、サイトがメンテナンス中のときにメンテナンスページを提供しようとしています。

このページは503 HTTPコードを返す必要があります。これは、メンテナンスモードに適したコードであり、SEOで起こりうる問題を防ぐためです。

サーバーのいずれかから503コードを返すと、Load Balancerはそれを「サービス停止中」にし、すべてのサーバーが503を返すと、Webサイトは空白のページを返します(すべてのサーバーが切断されているため)。

私の質問は:

1)正常なサーバーがない場合に、ロードバランサーからの訪問者にメッセージを表示するカスタム静的ページを提供する方法はありますか?

2)または、サーバーを「異常」としてマークする理由として503を考慮しないようにロードバランサのヘルスチェックを構成する方法は?

ありがとう!

アプリサーバーに追加のルートを実装することもできます。たとえば、/ hcm(ヘルスチェックメンテナンス用)で、常に200 OKと応答します。メンテナンスの時期になったら、プログラムでELBヘルスチェックを変更して、/または/index.htmlではなく、200 OKを返す/ hcmターゲットを使用します。どちらも503 Service Unavailableを返します。メンテナンスを終了するときに、これらの変更を元に戻します。

12
jarmod

503要件を満たしていない可能性がありますが、これに適したオプションはs3およびdnsフェイルオーバーを使用することです https://aws.Amazon.com/blogs/aws/create-a-backup-website-using-route-53 -dns-failover-and-s3-website-hosting /

4
cloud ninja

私はこれを行う簡単な方法を探していました。 DBのアップグレード中に503エラーを世界中に返す必要がありますが、開発者が公開する前にテストできるように、開発者のIPをホワイトリストにいくつか登録します。

1つのスポットソリューションが見つかりました:EC2のローダーバランサーに移動し、対象とするロードバランサーを選択します。以下に、リスナーが表示されます。リスナーをクリックして、ルールを編集します。次のようなルールを作成します。

My rule set up これで、全員がかなりのメンテナンスページを503エラーコードで返し、最初のルールの2つのIPアドレスのみがサイトを閲覧できるようになります。順序は重要です。2つのIP例外が一番上にあり、リストの下位にあります。最後の項目はデフォルトで常にそこにあります。

アプリケーションロードバランサーのリスナールール: https://docs.aws.Amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html

2
Atno

ロードバランサーは、背後に正常なサーバーがなくなったときに503を提供するため、特別なことを行うべきではありません。

ヘルスチェックで200以外を返すと、ELBは設定された数のヘルスチェックに失敗した後、マシンをロードバランサーから外します。

つまり、要約すると、メンテナンス時にアプリから503を提供できる可能性がありますが、ヘルスチェックのために常に200を返す必要があります。ページのコンテンツを気にしない場合は、単にロードバランサーからマシンを削除(またはヘルスチェックに失敗)するだけで、LBが適切な処理を行います。

1
Mircea