Fault Injection Serviceとは?AWSのカオスエンジニアリングを解説

公開日:2024年9月6日最終更新日:

AWSでカオスエンジニアリング(耐障害性テスト)を実施できるツールとしてAWS Fault Injection Serviceがあります。リリース当初はAWS Fault Injection Simulatorと呼ばれていましたが、現在は変更されました。セキュリティについて考慮している人は多く見られますが、障害について考慮できている人は一部でしょう。AWSには障害をテストできるサービスがあるため、今回はこれを活用するためにAWS Fault Injection Serviceについて解説します。

AWS Fault Injection Serviceとは

AWS Fault Injection Serviceは、AWSでフォールドインジェクション実験を実行できるサービスです。カオスエンジニアリングで使用される実験手法で、フォールド(障害)を意図的に発生させることで、どのような挙動が起きるかを確認することを指します。障害は事前に対処方法を把握することが難しいですが、意図的に発生させて実験しておくことによって、その挙動や解決方法などを事前に把握することが可能です。障害に強い仕組みを作ることはもちろん、システムの回復に向けた手順を明確にしたり、可用性を高めたりするために利用されます。

また、AWS Fault Injection Serviceのようなサービスを利用することで、設計段階では明らかになっていなかった問題に気づくことが可能です。多くの場合、十分に考慮した設計と自負していても、実際に実験してみると、何かしらの問題を抱えています。自分自身ではそのような問題に気づけない可能性が高いため、AWS Fault Injection Serviceを利用して、障害を発生させてみることが推奨されているのです。

AWS Fault Injection Serviceでテストできるリソース

サービスが公開されてから、アップデートが繰り返され、現在は以下のリソースについて実験ができるようになっています。

    • Amazon CloudWatch
    • Amazon DynamoDB
    • Amazon EBS
    • Amazon EC2
    • Amazon ECS
    • Amazon EKS
    • Amazon ElastiCache
    • Amazon RDS
    • Amazon S3
    • AWS Systems Manager
    • Amazon VPC

リリース当初は、一部のリソースに対してのみ実験できる状態でしたが、現在は幅広いリソースに対しての実験が可能です。これからもアップデートによって対象となるリソースが増えると予想されるため、もしこれらに含まれていない状態でも定期的なアップデートを待つと良いでしょう。

AWS Fault Injection Serviceで実験する方法

実際に実験を進める際は、実験テンプレートの作成と実験の実行という流れが必要です。これに加えて、権限などの準備を進めなければなりません。

権限の付与

最初にIAMユーザーに対して、権限を付与しなければなりません。AWSの公式ドキュメントを参考に設定します。

ただ、これはAWS Fault Injection Serviceのアップデートによって後ほど設定できるようになっているため、個別に権限を管理する運用でない限りは後からの作業でも差し支えありません。

実験テンプレートの作成

AWS Fault Injection Serviceのコンソール上で実験テンプレートを作成できます。実験テンプレートとはどのような障害が起きるのか定義したり、そのときにどのような行動をとるのか設定するものです。具体的に対象となるリソースを指定するなどもします。

実験テンプレートのコンソール画面から、実験テンプレートを作成ボタンをクリックします。

テンプレートを作成する際に利用するアカウントを指定するポップアップが表示されるため選択しましょう。今回は、テンプレートを作成しているアカウント内で完結するシナリオを作成するため、ひとつのアカウント(左側)を選択します。紹介はしませんが、複数のアカウントをまたいだテンプレートの作成も可能です。

アカウントの選択が完了すれば、実験テンプレートの説明と名前を入力しましょう。コンソールから識別する際に利用するため、各々が認識できる内容であれば差し支えありません。

続いてどのような障害を発生させるのかアクションを定義します。名前を付けて、アクションタイプから実行する内容を選びましょう。様々なリソースに対して障害を発生させられるため、実験したいものを選択します。なお、アクションは連続して設定することが可能です。例えば、最初にEC2のCPU負荷を高め、その次にEC2を停止させるなどのテンプレートを作成できます。今回はシンプルに、EC2を停止させる場合のアクションを追加します。

アクションを追加した後は、具体的なターゲットを指定しなければなりません。今回の場合は、EC2を停止させるアクションであるため、それに該当するリソースを選択します。コンソールからリソースを検索できるため、実験したい対象を選択しましょう。

なお、EC2の場合を例にとると、ひとつのインスタンスだけではなく、タグが付与されているものに対して同じ実験をすることも可能です。

サービスアクセスでは、実験を実施するためのアクセス許可を持ったロールを設定しなければなりません。事前に作成していれば選択肢が準備されますが、今回は初回の作業として新しく作成するものとします。

停止条件は、実験を終了させるための条件をオプションで設定できるものです。例えば、CloudWatchAlarmに「CPU負荷が90%を超えたならば、アラートメールを送付する」というものが存在したとします。この場合、これを設定することによって、CPU負荷が高まった段階でメールの発報と実験の終了ができるのです。オプションの選択肢であり、必ずしも設定する必要はありませんが、途中で停止させたい場合は選択します。

実験の結果を把握しやすくするためにも、ログは出力しておいた方が良いでしょう。標準では出力しない設定となっているため「Amazon S3 バケットへの送信」「CloudWatch Logs への送信」のどちらかにチェックを入れます。両方にログを出力する仕様でも差し支えありません。どちらが良いとは一概にいえないため、皆さんが運用している環境に応じて選択してください。

なお、バージョンは基本的に「バージョン2」をおすすめします。2024年8月もアップデートが実施され、ログの内容が強化されているからです。情報量が多い方がトラブルが発生した際に解決しやすくなります。

全ての設定が完了したならば、ページ下部の実験テンプレートの作成をクリックします。

なお、今回は基本的なテンプレートを何もない状態から作成する手順を紹介しました。ただ、AWSのコンソール上には「シナリオライブラリ」と呼ばれるものが準備されていて、CPU負荷が高まった場合やディスクに問題が生じた際などの実験テンプレートを簡単に作成できる状態です。今回は基本的な作り方ですが、場合によっては、こちらを利用した方がスムーズに作成できるでしょう。

実験の実施

テンプレートの作成が完了すれば、AWS Fault Injection Serviceのコンソールに実験テンプレートが表示されます。チェックを入れて「実験を開始」をクリックしましょう。

すぐに実験がスタートし、画面には現在の状況が表示されます。ひとつのテンプレートに複数のアクションを設定していれば、各々の状況も確認できるため、ログだけではなく、実行の過程も観察していると良いでしょう。

実験が完了したアクションについては「Complete」と表示されます。

実行ログの確認

実験テンプレートを実行した後は、設定したAmazon S3 バケットやCloudWatch Logsにログが出ていることを確認しましょう。ログの内容を確認することによって、どのような実験が実施されたかが簡単に把握できます。実験が成功したときはもちろん、実験が失敗したときは理由が表示されるため、それらについても必要に応じて活用してください。

ただ、現在はアップデートによって、コンソールの「ログイベント」タブから詳細を確認できるようになりました。

こちらから実行ログを確認すると、S3 バケットに出力される内容と同様のものが出力されています。

問題なく実行が完了していればCompleteのログが表示されます。

なお、ここでのログは「実験全体が成功したかどうか」を評価するものです。つまり、実験の過程でどのような問題が起きたかの確認はできません。生じた問題については、EC2個別のログやアプリケーションのログを参照することが求められます。例えば、サーバが停止した際に、アプリケーションに問題がなかったかどうかは、アプリケーションが出力するものを確認する必要があるのです。

まとめ

AWSでカオスエンジニアリングができるAWS Fault Injection Serviceについて解説しました。障害の発生は、ユーザに大きな影響を与えると予想されるため、事前にテストして把握することを心がけましょう。

実験できるリソースの種類は増え、その内容も年々、拡充されています。これからも多くの実験ができると予想されるため、積極的な活用をおすすめします。

クラウドの運用代行や導入、開発は23年の実績をもつジードにご相談ください

  • クラウドの運用代行

    クラウドの監視・保守・運用の代行 お客様が運営するクラウドの監視・保守・運用業務を、ジードが代行いたします。

    サービスの詳細はこちら

  • クラウドの設計・構築

    クラウドの設計・構築 お客様のご要望に沿って、適切なクラウド選定から設計・構築までを行います。

    サービスの詳細はこちら

  • クラウド上でのシステム開発

    クラウドの設計・構築 Azure上で、AI + 機械学習、分析、ブロックチェーン、IoTを開発します。

    サービスの詳細はこちら

お問い合わせ・お見積もりのご依頼はお気軽に

Scroll to top