質問: 現在、AWS上にALBを配置し、その下に1台のEC2を配置しています。 (ALBを置いた理由は、ALB上にWAFを設定したためです) EC2はweb/APサーバーで、EC2内のサービスを利用するユーザーは外部からhttpsで接続(ALB経由)します。 EC2の稼働時間は、毎日8:00~20:00としています (Lambda・cloudwatch でスケジューリングしています) この構成で、20:00~8:00の間(EC2停止の間)に外部から接続してきたユーザーに対して、サーバー(サービス)停止中の画面を自動表示させたいのですが、その方法がわかりません。 EC2→ロードバランサー→ALB→リスナーの「ルールの表示/編集」 で、EC2から503が返ってきたときに行うアクションを入れればいいのかと思っていたのですが、 具体的にどのような値で実現するのかがよくわかりませんでした。 お分かりになられる方、申し訳ございませんがご教授のほど、よろしくお願いいたします
回答: 「サービスダウン時に 停止画面を出す」の自動化する方法ですが それぞれ、方式がことなるので、切り替わりに要する時間も結構違います。 どちらが良いかは 難しいですが Route53 の方が手軽なのでまずはこちらを検討してみると良いかと思います。 (1) Route53 DNS Failover を使う ・Route53 が ALBを監視してダウンした場合に 停止画面のサーバーに 切り替えます。 ・DNS での切り替えなので、 切り替え後 TTLの影響を受けます。 ・停止画面用のWebサーバーが必要です(S3 静的WebサイトでもOK) (2)Cloudwatch Alarm -> Lambda ・Cloudwatch でサービス停止を監視 (例:HealthyHostCount = 0になったらAlarm発動) ※Cloudwatch のモニタリング間隔は5分 ・Cloudwatch Alarm -> SNS Topics -> Lambda と連携 ・Lambda コードでは APIを使ってALBの設定を変更して 切り替える。 停止画面は、事前に、リスナールールを 2つ(通常時と、停止時用)登録して、APIで プライオリティを変更して 切り替えるのが 良いと思います。 <通常時> ・優先度1:IF すべて、THEN ターゲットグループに転送 ・優先度2:IF すべて、THEN 固定レスポンスで停止画面を返す <停止時> ・優先度1:IF すべて、THEN 固定レスポンスで停止画面を返す ・優先度2:IF すべて、THEN ターゲットグループに転送 優先度の変更は SetRulePriorities で行えます。