Amazon Web Services ブログ
AWS Fault Injection Simulator – 管理された実験を使用して復旧力の改善につなげる
AWS では、信頼性の高いシステムを構築するために必要とされるコンポーネントを各種提供しています。それらには、複数のリージョン (それぞれに複数のアベイラビリティーゾーンがあります)、Amazon CloudWatch (メトリック、モニタリング、アラーム)、Auto Scaling、Load Balancing、複数の形式のクロスリージョンレプリケーションを含む、多くの種類があります。これらのコンポーネントを、Well-Architected フレームワークに記載されているガイダンスに則って配置することで、個別のコンポーネントに障害が発生した場合でも、システムの連続稼働を期待できます。
しかし、適切な種類のテストを実行してみないことには、これらに確信を持つことはできません。カオスエンジニアリング (障害の達人こと Jesse Robbins が Amazon.com の初期の頃に行った先駆的な検証を基に、その後、Netflix のカオスモンキーによって強化された) の比較的新しい分野では、中断の原因となるイベントを作成しアプリケーションにストレスを加え、システムの応答を観察し、改善を行うということに専念します。カオスエンジニアリングは、改善の余地がある領域を指摘するだけでなく、追加のモニタリングやアラームを適用すべき盲点を発見し、目に付きにくい実装上の問題を明らかにします。さらに、ユーザーが運用スキルを向上させる機会を生み出すので、リカバリ時間の向上につなげられます。このトピックの詳細については、当社従業員の Adrian Hornsby による「Chaos Engineering – Part 1 (カオスエンジニアリング – パート 1)」を参照してください。
AWS Fault Injection Simulator (FIS) のご紹介
今回、当社は AWS Fault Injection Simulator (FIS) を発表いたしました。この新しいサービスは、AWS ワークロードに対し管理された形の障害を注入する実験を実施して、その場合の反応を確認するのに役立ちます。お客様は、さまざまな種類の障害にシステムがどのように反応するかを検証でき、障害モードをより良く把握することができます。運用前の環境での実験から開始して、その後 CI/CD ワークフローの一部として実行できるようにステップアップし、最終的には実稼働環境の中に移行できます。
AWS Fault Injection Simulator (FIS) による実験では、特定の AWS リソースのセットがターゲットになり、それらに対して一連のアクションが実行されます。このサービスの現在のサポート対象は、Amazon Elastic Compute Cloud (EC2)、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、およびAmazon Relational Database Service (RDS) となっています。また 2021 年のロードマップ上では、その他のリソースやアクションへの対応も予定されています。ターゲットとなるリソースは、タイプ、タグ、ARN、または特定の属性へのクエリを使用して選択できます。また、1 つ以上の (CloudWatch アラームで定義する) 停止条件が成立した場合に、実験を停止させる機能もあります。これにより、重要なビジネスまたは運用メトリクスに対し予期しない影響が生じた場合に、その実験を迅速に終了できます。
AWS Fault Injection Simulator (FIS) の使用
それでは、実験テンプレートを作成し実験を実行してみましょう。 この実験では、4 つの EC2 インスタンスを使用し、それらすべての Mode を Test に指定しています。
次の FIS コンソールを開き、[実験テンプレートの作成] をクリックして使用を開始します。
説明を入力し、IAM ロールを選択します。FIS が実行する実験で (指定されたリソースに対してアクションを実行するために) 必要となるアクセス許可が、このロールにより付与されます。
次に、実験の構成要素となる各アクションを定義します。[アクションの追加] をクリックし次に進みます。
次に、最初のアクションを定義します。ここで行いたいのは、EC2 インスタンスのいくつか (Mode が Test に指定されたものなど) を 5 分間停止させたとき、システムの動作が継続することを確認することです。必要な項目を選択した後で [保存] をクリックします。
次に、実験のターゲットとなるリソース (この場合は EC2 インスタンス) を選択します。[ターゲットの追加] をクリックし、ターゲットに名前を付けた上で、このターゲットには、Mode タグの値が Test に指定されている (現在のリージョン内の) すべての EC2 インスタンスが含まれること定義します。また、ランダムなインスタンスの選択、またはタグまたはリソースフィルタに一致するインスタンスの全体に対する割合での選択も可能です。ここでも、必要な選択を行なった後で [保存] をクリックします。
実験の停止条件 (CloudWatch アラーム) は複数のものを選択できます。アラームがトリガーされると、実験は停止します。これは、ローカルな障害が本格的な停止に連鎖しないようにする、安全性のためのメカニズムです。
さらに、実験にタグを付けた上で、[実験テンプレートの作成] をクリックします。
これで、実験のベースとしてテンプレートを使用する準備が整いました。
実験を実行するには、テンプレートを選択した上で、[アクション] メニューにある [実験を開始] をクリックします。
次でも、[実験を開始] をクリックします (ここではタグも追加しています)。
AWS リソースに影響を与える可能性があるため、実験を実行する旨を確認します。
これで実験の実行が開始され、アクションを表示できるようになります。
想定どおりに、ターゲットインスタンスが停止します。
実験の結果、これらのインスタンスが停止した場合にも、システムの動作は継続されることが確認できました。
これに加え、実験を作成、実行、レビューするために、FIS API と FIS CLI を使用する方法もあります。例えば、同じターゲットに対して異なる実験を実行したり、異なるターゲットに対して同じ実験を実行したりできます。
今すぐ利用可能です
管理された実験を実行するための AWS Fault Injection Simulator (FIS) は、今すぐにご利用が可能です。現在、アジアパシフィック (大阪) と中国の 2 つのリージョンを除き、すべての商用 AWS リージョンで使用していただけます。対象外となっている 3 つの商業リージョンも、ロードマップ上でサポートが予定されています。
料金はアクションの実行時間 (分単位) に基づきます。2 つ以上のアクションを並行して実行した場合でも追加料金は発生しません。
2021 年を通して、さらなるサービスとアクションへのサポートを追加する予定ですので、ご期待ください。
– Jeff