💫

FISのネットワーク接続中断アクションでリージョン間フェイルオーバーを試してみた

2022/12/01に公開

2022年アップデート振り返りという事でFISのネットワーク接続中断アクションを触ってみました

AWS Fault Injection Simulator (FIS) とは

AWS環境に擬似攻撃、擬似障害を起こす事ができるサービス
いわゆるカオスエンジアリングをAWSで起こすことができます

https://aws.amazon.com/jp/fis/

ネットワーク接続中断アクション

2022年10月にFISのアップデートでネットワーク接続中断アクションが追加されました
これによりネットワーク障害を擬似的に発生させる事ができるようになりました

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/aws-fault-injection-simulator-network-connectivity-disruption/

今回は↑を利用してリージョン間フェイルオーバーを試してみました

構成図

東京リージョンと大阪リージョンに同じ構成をホットスタンバイで用意

Route53のフェイルオーバールーティングで
プライマリを東京リージョン、セカンダリで大阪リージョン を向くようにする

東京リージョンのEC2が配置されているサブネットに対してFISのネットワーク接続中断アクションを実行。Route53のフェイルオーバールーティングでセカンダリの大阪リージョンにDNSの向先が変われば検証成功となります

また分かりやすいように
東京側では「ap-northeast-1」大阪側では「ap-northeast-3」と表示させています

FISを実行する手順

① 実験テンプレートの作成
発生させたいアクションやターゲットを設定する

② 実験の開始
作成した実験テンプレートに沿った実験が開始される

① 実験テンプレートの作成

ターゲット設定

どこをターゲットにするのか設定する

リソースタイプ リソースID
どのリソースをターゲットにするか 対象のリソースをIDで指定

アクション設定

発生させたい障害や異常を選択する。今回はネットワーク接続中断アクションを実行するため「aws:network:disrupt-connectivity」を選択

その他にも、APIエラーやEC2,RDSに対するアクションもサポートされている
https://docs.aws.amazon.com/ja_jp/fis/latest/userguide/fis-actions-reference.html

スコープ設定

どこのトラフィック間で異常を発生させるかを選択する
今回はRoute53のフェイルオーバールーティングを発生させたいので「ALL」を選択

ALL Availability-zone S3,DynamoDB
全てのトラフィック AZ間のトラフィック サービス間のトラフィック

IAMロール設定

FIS実行用にIAMロールを作成する必要がある
実施するアクションによって必要な権限が変わる。必要な権限はドキュメントに記載されている
https://docs.aws.amazon.com/fis/latest/userguide/action-sequence.html

停止条件

事前に設定したAmazon CloudWatchアラームにより、
サービスが異常状態になった場合などに自動的に実験を停止できる

実験中に想定外の問題が発生した際に、ユーザーへの影響を最低限に抑える事が可能

これで実験テンプレートが完成です

② 実験の開始

実験テンプレートが作成できたので、早速実験を開始していきます
実験テンプレートを選択して[実験を開始]を選択すると開始されます

実験開始から数分待つと…

まず対象のサイトにアクセス出来なくなった事を確認

更にRoute53のヘルスチェックが東京リージョン側で失敗している事を確認

更にDNSの反映待ちでもう少し待ってみると、同じURLにアクセスして画面の表示が切り替わった為、無事にDNSの向先が大阪リージョンに変わった事を確認しました

(余談) EC2のステータスチェックは失敗しなかった

EC2のシステムステータスチェックの失敗の原因にネットワーク接続の喪失が含まれます

・システムステータスチェックの失敗の原因となる問題の例を次に示します。
・ネットワーク接続の喪失
・システム電源の喪失
・物理ホストのソフトウェアの問題
・ネットワーク到達可能性に影響する、物理ホスト上のハードウェアの問題

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html

なので東京リージョン側のEC2のステータスチェックが失敗するか見ていましたが、
実験開始してからも変化はありませんでした

FISのネットワーク接続中断アクションを利用してもAWSのシステム側の通信には影響を与えないのかなと考えています。そのため完全なAZ障害というものはFISでは再現できなさそう…

触ってみた感想

今回初めてFISを使いましたが、こういった模擬障害を発生させるとなると複雑な設定やエージェントが必要そうなイメージがあったので、複雑な設定は要らず動かせたというのが印象的でした。
また、今回の検証では簡素なDR構成でしたが、本番稼働する環境でも同様にDRのテストを実施できそうと感じました

登壇資料

https://speakerdeck.com/yama1998/aws-fault-injection-simulator-fis-nonetutowakujie-sok-zhong-duan-akusiyonde-riziyonjian-hueiruobawoshi-sitemita

Discussion