AWSエンジニアは先頃、Prime Videoでのフォールトインジェクションのテストに使用した、AWSSSMChaosRunnerと呼ばれるオープンソースのカオスエンジニアリングツールについて書いた。チームは、EC2インスタンスで任意のコマンドを実行できるAWS Systems Managerを使用して構築されたツールを使用してレイテンシー関連の問題を軽減することができた。
AWSSSMChaosRunnerは、AWS Systems Managerを使用して構築され、特定のEC2インスタンスのセットに対してリモートでコマンドを実行する。コレクションとして宣言的に指定されたコマンドのセットは、フォールトに挿入されたセットを作成する。
Prime VideoのソフトウェアエンジニアであるVarun Jewalikar氏とAWSのプリンシパルデベロッパーアドボケイト(アーキテクチャ)であるAdrian Hornsby氏は、典型的なカオスエンジニアリング実験には、リソースの枯渇と障害または低速のネットワークのシミュレーションが含まれると書いている。このようなシナリオには対策があるが、「単体テストまたは統合テストでは通常、それらを高い信頼度で検証できないため、適切にテストされることはほとんどありません」。
AWS Systems Managerは、SSM Agentと呼ばれるエージェントコンポーネントを使用して、AWSリソース全体でさまざまな運用タスクを実行できるツールである。特定のWindowsおよびLinux AMIにデフォルトでプリインストールされているエージェントは、実行可能なランブックに類似した「ドキュメント」の概念を持っている。AWSSSMChaosRunnerによって活用される機能である単純なシェルスクリプトも実行できる。SSMのSendCommand APIを使用すると、AWSタグでフィルタリングできる複数のインスタンス間でコマンドを実行できる。CloudWatchを使用して、すべてのインスタンスのログを1か所で表示できる。
EC2インスタンスで実行するユーザを作成するなどのセキュリティ面は、エージェントによって処理される。例えばカオスランナーが実行できることは、特定のポートですべての発信TCPトラフィックを無言でドロップすること、インターフェイスにネットワーク遅延を導入すること、CPUを占有することなどがある。現在サポートされているフォールトインジェクションは、インフラストラクチャまたはAWSサービスレイヤのいずれかにあることに注意することが重要だ。
AWSSSMChaosRunnerは、AWSリソースにフォールトを挿入するために作成された一連のSSMドキュメントから作成された。記事によると、標準のSSM Agent APIを使用したドキュメントを実行した後、負荷生成コンポーネントはアプリケーションに対する実際のトラフィックをシミュレートする。AWSSSMChaosRunnerはECSに対しても使用できるが、フルマネージドサービスであるLambdaに対しては使用できない。AWS Lambdaにはフォールトインジェクションを実行する他のアプローチがある。
フードの下でAWSサービスを使用するPrime Videoは、AWSSSMChaosRunnerを利用して、依存するサービスが高レイテンシの場合のパフォーマンスをテストした。Jewalikar氏とHornsby氏は、Elasticacheタイムアウト設定のバグを修正するのに役立ったと述べている。
カオスエンジニアリングの実験を実行するためのライブラリは他にもある。最も早期の1つはNetflixのChaos Monkeyだ。他はLinkedInのProject WaterbearやTwitterのPythonライブラリのような独自のフレームワークが書かれている。Gremlinのような企業は、フォールトインジェクションをサービスとして提供している。
AWSSSMChaosRunnerのソースコードはGitHubで入手できる。