FISのネットワーク接続中断アクションでリージョン間フェイルオーバーを試してみた
2022年アップデート振り返りという事でFISのネットワーク接続中断アクションを触ってみました
AWS Fault Injection Simulator (FIS) とは
AWS環境に擬似攻撃、擬似障害を起こす事ができるサービス
いわゆるカオスエンジアリングをAWSで起こすことができます
ネットワーク接続中断アクション
2022年10月にFISのアップデートでネットワーク接続中断アクションが追加されました
これによりネットワーク障害を擬似的に発生させる事ができるようになりました
今回は↑を利用してリージョン間フェイルオーバーを試してみました
構成図
東京リージョンと大阪リージョンに同じ構成をホットスタンバイで用意
Route53のフェイルオーバールーティングで
プライマリを東京リージョン、セカンダリで大阪リージョン を向くようにする
東京リージョンのEC2が配置されているサブネットに対してFISのネットワーク接続中断アクションを実行。Route53のフェイルオーバールーティングでセカンダリの大阪リージョンにDNSの向先が変われば検証成功となります
また分かりやすいように
東京側では「ap-northeast-1」大阪側では「ap-northeast-3」と表示させています
FISを実行する手順
① 実験テンプレートの作成
発生させたいアクションやターゲットを設定する
② 実験の開始
作成した実験テンプレートに沿った実験が開始される
① 実験テンプレートの作成
ターゲット設定
どこをターゲットにするのか設定する
リソースタイプ | リソースID |
---|---|
どのリソースをターゲットにするか | 対象のリソースをIDで指定 |
アクション設定
発生させたい障害や異常を選択する。今回はネットワーク接続中断アクションを実行するため「aws:network:disrupt-connectivity」を選択
その他にも、APIエラーやEC2,RDSに対するアクションもサポートされている
スコープ設定
どこのトラフィック間で異常を発生させるかを選択する
今回はRoute53のフェイルオーバールーティングを発生させたいので「ALL」を選択
ALL | Availability-zone | S3,DynamoDB |
---|---|---|
全てのトラフィック | AZ間のトラフィック | サービス間のトラフィック |
IAMロール設定
FIS実行用にIAMロールを作成する必要がある
実施するアクションによって必要な権限が変わる。必要な権限はドキュメントに記載されている
停止条件
事前に設定したAmazon CloudWatchアラームにより、
サービスが異常状態になった場合などに自動的に実験を停止できる
実験中に想定外の問題が発生した際に、ユーザーへの影響を最低限に抑える事が可能
これで実験テンプレートが完成です
② 実験の開始
実験テンプレートが作成できたので、早速実験を開始していきます
実験テンプレートを選択して[実験を開始]を選択すると開始されます
実験開始から数分待つと…
まず対象のサイトにアクセス出来なくなった事を確認
更にRoute53のヘルスチェックが東京リージョン側で失敗している事を確認
更にDNSの反映待ちでもう少し待ってみると、同じURLにアクセスして画面の表示が切り替わった為、無事にDNSの向先が大阪リージョンに変わった事を確認しました
(余談) EC2のステータスチェックは失敗しなかった
EC2のシステムステータスチェックの失敗の原因にネットワーク接続の喪失が含まれます
・システムステータスチェックの失敗の原因となる問題の例を次に示します。
・ネットワーク接続の喪失
・システム電源の喪失
・物理ホストのソフトウェアの問題
・ネットワーク到達可能性に影響する、物理ホスト上のハードウェアの問題
なので東京リージョン側のEC2のステータスチェックが失敗するか見ていましたが、
実験開始してからも変化はありませんでした
FISのネットワーク接続中断アクションを利用してもAWSのシステム側の通信には影響を与えないのかなと考えています。そのため完全なAZ障害というものはFISでは再現できなさそう…
触ってみた感想
今回初めてFISを使いましたが、こういった模擬障害を発生させるとなると複雑な設定やエージェントが必要そうなイメージがあったので、複雑な設定は要らず動かせたというのが印象的でした。
また、今回の検証では簡素なDR構成でしたが、本番稼働する環境でも同様にDRのテストを実施できそうと感じました
登壇資料
Discussion