Amazon Web Services ブログ
AWS Fault Injection Service を使用して、マルチリージョンおよびマルチ AZ アプリケーションの耐障害性を実証する
AWS Fault Injection Service (FIS) は、大規模にカオスエンジニアリングを実践するために役立ちます。本日 (2023 年 11 月 30 日) 、FIS の新しいシナリオを発表します。これにより、例えば AWS のアベイラビリティゾーンが全て停電したり、ある AWS リージョンから別のリージョンへの接続が途絶えた場合でも、アプリケーションが予定通りに機能するかを確認できます。
このシナリオを使った実験により、問題発生時にアプリケーションが単一リージョンでもマルチリージョンでも期待通りに機能するという自信を得られます。これにより、直接的および間接的な依存関係を深く理解し、復旧時間をテストするのに役立ちます。アプリケーションを試験して、期待通りに動作することを確認した後、実験結果をコンプライアンスの目的で使用できます。FIS と AWS Resilience Hub を組み合わせることで、アプリケーションの全体的な耐障害性状況を十分に理解するのに役立ちます。
シナリオ紹介
2021 年に AWS アプリケーションで制御された実験を行うため FIS を発表しました。その発表の際の投稿で、実験テンプレートの作成と使用方法を紹介しました。実験は、特定種類の AWS リソース群に影響を与えるよう設計された、強力かつ基本的な操作を用いて構築されます。例えば、以下のアクションは EC2 インスタンスと Auto Scaling Groups に作用します。
最近、これらのアクションをビルディングブロックとして、AWS FIS Scenario Library を立ち上げました。ライブラリの各シナリオは、アプリケーションの回復力をテストするために使用できるイベントや条件を定義しています。
各シナリオは、実験テンプレートの作成に使用されます。シナリオをそのまま使用することも、任意のテンプレートを必要に応じてカスタマイズまたは拡張することもできます。
シナリオは、同じ AWS アカウントまたは他の AWS アカウントのリソースを対象にすることができます。
新しいシナリオ
これらの情報を踏まえた上で、新しいシナリオを見ていきましょう。
AZ の可用性 : 電源の中断 – このシナリオでは、単一のアベイラビリティゾーンにある特定のリソース群に対して一時的に “電源を抜く” 操作を行います。対象となるリソースには、EC2 インスタンス (EKS および ECS クラスタのものを含む) 、EBS ボリューム、Auto Scaling Groups 、VPC サブネット、Amazon ElastiCache for Redis クラスタ、Amazon Relational Database Service (RDS) クラスタなどが含まれます。ほとんどの場合、複数のアベイラビリティゾーンにリソースを持つアプリケーションで実行しますが、このシナリオを単一のアベイラビリティゾーンで動作するアプリケーションに適用することもできます。この場合、アプリケーションが一時的に停止することが想定されます。単一のアベイラビリティゾーンをターゲットとし、指定した IAM ロールまたは Auto Scaling Groups が実験中に新しいインスタンスを起動したり、停止したインスタンスを起動できないようにすることもできます。
新しいターゲットとアクションエクスペリエンスでは、シナリオ内のアクションと、それらが影響する AWS リソースのタイプなど、すべてを一目で簡単に確認できます:
シナリオには、実験テンプレートをカスタマイズするためのパラメータが含まれています:
詳細パラメータ – ターゲティングタグでは、実験の対象となるリソースを見つけるために使用されるタグのキーと値をコントロールできます:
クロスリージョン : 接続 – このシナリオは、テストリージョンにあるアプリケーションがターゲットリージョンのリソースにアクセスするのを防ぎます。これには、VPC に接続された EC2 インスタンス、ECS タスク、EKS Pod 、Lambda 関数からのトラフィックが含まれます。また、Transit Gateway や VPC ピアリング接続を通過するトラフィックや、リージョンをまたぐ S3 や DynamoDB のレプリケーションも含まれます。このシナリオは、初期設定で以下のようになっています:
disruptionDuration パラメータを変更しない限りこのシナリオは 3 時間実行され、指定された方法でターゲットリージョンからテストリージョンを分離します。分離されたリージョン内で実験の影響を受ける AWS リソースを特定するために使うタグを管理するための詳細パラメータがあります。この設定を通じて、どのリソースが実験によって影響を受けるかを具体的に決めることができます:
また、このシナリオで使用される Disrupt と Pause アクションは、それぞれ単体でも役立つかもしれません:
例えば、aws:s3:bucket-pause-replication アクションは、リージョン内でレプリケーションを一時停止するために使用できます。
知っておくべきこと
新しいシナリオについて知っておくべきことがいくつかあります:
リージョン – 新しいシナリオは、FIS が利用可能なすべての商用 AWS リージョンで、追加費用なしで利用可能です。
価格 – 実行した実験によって消費されたアクション分の時間に対して料金を支払います。詳細は AWS Fault Injection Service Pricing Page を参照してください。
サービス名 – このサービスは以前 AWS Fault Injection Simulator と呼ばれていました。
— Jeff;