NTT DATA TECH
🌊

【AWS・Route53 ARC】ALB + EC2構成でAZ障害にどう備えるか

に公開

背景:ALB + EC2構成での障害検知・切り替えに関する悩み

Amazon Web Services(AWS)上で典型的なWeb3層構成のシステム設計する中で、Application Load Balancer(ALB)の背後にAmazon Elastic Compute Cloud(EC2)インスタンスを配置する構成での障害検知・切り替えの方法を考えていました。可用性とコストのバランスからEC2インスタンスは2台稼働させることを前提とし、下記のような構成を取っていました。

  • EC2インスタンスを2台配置し、ALBでルーティングする。ターゲットグループへのヘルスチェックを使って異常インスタンスへの振り分け停止、正常インスタンスへのリクエスト片寄せを行う。
  • ALBノード、EC2インスタンスの配置においてマルチAZ構成を取る。これにより単一AZレベルの障害時にも稼働を継続させる。

この構成の問題点として、アベイラビリティゾーン(AZ)レベルで障害が発生した場合、障害発生中のAZへリクエストが継続する懸念があります。具体的にはALBノードにリクエストをルーティングするAWSのDNS(Route53)では、障害発生中のAZのALBノードを検出してルーティング対象から除外してくれる訳ではないため、異常状態のAZへのトラフィックが継続し、リクエストが失敗する可能性があります。

AZレベルでの障害時にリクエストを切り離す方法として、AWS Route53 Application Recovery Controllerのゾーンオートシフトの活用が有効です。特に2024年11月以降、ALBのクロスゾーン負荷分散との併用が可能になったため、これを活用する方法をまとめました。

ARCの活用

AWS Route53 ARC(Application Recovery Controller)の概要

ARCは、AWSが提供する高可用性アプリケーションを実現するためのサービスです。
アプリケーションの障害検知・ルーティング制御を自動化するための仕組みで、ここではALBと併用したゾーンシフト/ゾーンオートシフトを活用していきます。

ALBと併用したARCでゾーンシフト/ゾーンオートシフトが発動した場合、具体的には下記の動作が行われます。

  • 異常AZのALBノードのIPアドレスがDNSから削除される。
  • 正常AZのALBノードから異常AZのターゲットに対してルーティングが行われないようにする。

ゾーンシフトは期間を指定して上記の動作を手動実行でき、ゾーンオートシフトではAWS側でAZ障害を検知し、自動で上記の動作を行います。どちらのケースでも異常状態が解除されれば、ALBノードのIPアドレスの設定、ターゲットへのルーティング再開が自動で行われます。

「異常AZのALBノードのIPアドレスがDNSから削除される」動作はnslookupで接続先を名前解決すると動作を確認できました。下記画像は3つのAZにALBノードが配置されている状態で、1つのAZへの振り分けを除外するゾーンシフトを手動で発生させた場合の例です。返却されるALBへの宛先が1つ削減されていることが分かります。その後、ゾーンシフトの解除後に元のIPアドレスが追加されていることが確認できました。

ARCを利用する場合のALB + EC2の最小構成

2025年9月時点において、ARCを利用する場合、ALBノードは3つ以上のAZに配置することが求められます。このためEC2インスタンスを2台にした場合の最小構成は下記の通りになります。

2024年11月よりALBのクロスゾーン負荷分散が必要な状況でもARCを利用できるようになりました。[1]

注意点として、ターゲットが存在しないAZのALBノードはノードが自動削除される場合があります。AWSのサポートに確認したところ、このような「ALBは3AZに配置する設定を実施、実際にはALBノードは2AZに存在する」という状況下においてもARCの動作には支障はないようです。
nslookupでALBのエンドポイントを確認したところ、構築から3か月経った状態ではまだ削除はされておらず、3つのエンドポイントが返却されました。

動作確認

ARCの実行にはゾーンシフト、ゾーンオートシフト、練習実行の3種類があります。それぞれの違いは以下の通りです。ここでは練習実行の状況を載せます。

項目 概要 実行方法 主な用途
ゾーンシフト(Zonal Shift) 特定のAZへのトラフィックを手動で一時的に停止する機能 コンソール、CLIから手動実行 障害発生時の手動フェイルオーバー対応、テスト、運用検証など
ゾーンオートシフト(Zonal Autoshift) ARCが障害AZを自動的に除外する機能 自動 障害時の自動フェイルオーバー、高可用性確保
練習実行(Practice Run) ゾーンオートシフトの動作を検証するための機能。障害が発生していなくても、毎週約30分間1つのAZへのトラフィックを自動で停止する。ゾーンオートシフトを利用するためには必須 スケジュール実行、手動実行も可能 ゾーンオートシフトを利用するために設定

練習実行については他のAZにトラフィックを十分に振り分け可能なリソースがないと判断した場合、トラフィックシフトを開始せず、終了扱いとするようです。[2]

練習実行の設定

ゾーンオートシフトを有効化する際に練習実行も合わせて設定します。
設定項目は以下の通りです。ゾーンシフト対象のリソースやAZはゾーンシフトを設定した際のものが自動で利用されるため、実行結果を反映するためのアラームと、実行をブロックするための条件を設定することになります。

  • アプリケーションの状態をモニタリングするアラーム・結果アラーム(必須)
  • ブロックされたウィンドウ(任意)
  • ブロックされた日付(任意)
  • 練習実行をブロックするアラーム(任意)

「アプリケーションの状態をモニタリングするアラーム」は公式ドキュメントでは「結果アラーム」と記載されており、予め作成しておいたCloudWatchアラームを1つ指定する必要があります。練習実行を行う際はこの「結果アラーム」の状況が監視されており、ALARM状態になった場合は練習実行を停止し、実行結果をFAILEDで返却するようになっています。このため「結果アラーム」にはアプリケーションの正常稼働を判断できるようなアラームを設定することが望ましいです。公式ドキュメントには「重要業績評価指標(KPI)をCloudWatchアラームとして実装することを推奨」と記載されています。[3]

任意設定の項目は練習実行を実施しない条件を設定できます。「ブロックされたウィンドウ」は曜日・時間帯で指定でき、「ブロックされた日付」は特定日での設定が可能です。「ブロックされた日付」は設定様式を見るに五十日のような特定日ではなく、yyyy/mm/ddで指定する必要があります。特定日の設定上限は今のところ15日分までとなっていて、運用シーンを考慮すると少し使いづらいかもしれません。

「練習実行をブロックするアラーム」を設定しておけば、該当のアラームがALARM状態になっている場合に練習実行をスキップするようです。

練習実行の履歴確認

全てのARCの実行履歴は各ARC設定の「リソースのゾーンシフト履歴」から見ることができます。
ここから練習実行が実施された時刻、実施結果を確認することができます。

練習実行のAPI履歴はTrailに出力され、詳細な挙動を確認することができます。
イベントソースに「arc-zonal-shift.amazonaws.com」を指定して抽出することができます。

動作としては1分ごとにUpdateZonalShiftとGetManagedResourceの呼び出しを30分間継続していることが読み取れます。UpdateZonalShiftのrequestParametersは下記の通りとなっており、1分ごとにexpiresInで1分間のゾーンシフトをリクエストしているように見える。想像ですが1分ごとに「結果アラーム」やその他の異常の状態を見ながら、異常が出ていなければ練習実行を継続するような挙動になっているのではないかと推測しています。

"requestParameters": {
  "zonalShiftId": "(ゾーンシフトID)",
  "comment": "HIDDEN_DUE_TO_SECURITY_REASONS",
  "expiresIn": "1m"
}

さいごに

ARCは、従来のALB構成では実現が難しかったAZレベルでの自動フェイルオーバーを構築できる仕組みです。本記事がARCを活用した高可用性設計の理解を深める一助となれば幸いです。

脚注
  1. Amazon Web Servicesブログより「ゾーンシフトを用いたクロスゾーン負荷分散」(2024年12月24日) https://aws.amazon.com/jp/blogs/news/using-cross-zone-load-balancing-with-zonal-shift/ ↩︎

  2. AWSデベロッパーガイド「練習実行のキャパシティチェック」(2025年10月22日確認)https://docs.aws.amazon.com/ja_jp/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.capacity-check.html ↩︎

  3. AWSデベロッパーガイド「練習実行のアラーム」(2025年10月22日確認)https://docs.aws.amazon.com/ja_jp/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.alarms.html ↩︎

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています