Chaos Monkey
本番環境でランダムにインスタンスを停止し、システムの耐障害性を検証するツール
Chaos Monkey とは
Chaos Monkey は、Netflix が 2011 年にオープンソース化したカオスエンジニアリングツールで、本番環境でランダムにインスタンスを停止し、システムが単一障害点なく設計されているかを検証する。Netflix が 2008 年にデータセンターからAWS に移行した際、クラウド環境の不確実性に対応するために開発された。
「障害は避けられない。だから常に備える」という思想のもと、営業時間中に本番環境で実行される。障害が日常的に発生する環境を作ることで、エンジニアが耐障害性を前提とした設計を行うようになる。
Netflix の Simian Army
Chaos Monkey の成功を受けて、Netflix はさまざまな障害シナリオに対応するツール群「Simian Army」を開発した。
| ツール | 障害の種類 | 目的 |
|---|---|---|
| Chaos Monkey | インスタンスの停止 | 単一インスタンス障害への耐性 |
| Chaos Gorilla | AZ 全体の障害 | AZ 障害への耐性 |
| Chaos Kong | リージョン全体の障害 | リージョン障害への耐性 |
| Latency Monkey | ネットワーク遅延の注入 | 遅延への耐性 |
| Conformity Monkey | ベストプラクティス違反の検出 | 設定の標準化 |
| Janitor Monkey | 未使用リソースの検出・削除 | コスト最適化 |
Chaos Kong は Netflix が実際にリージョン間フェイルオーバーを検証するために使用しており、US-East-1 の障害時に US-West-2 に自動切り替えできることを定期的に確認している。
AWS Fault Injection Service (FIS)
AWS のマネージドカオスエンジニアリングサービスで、Simian Army の機能を AWS ネイティブに提供する。EC2 インスタンスの停止、AZ 障害のシミュレーション、ネットワーク遅延の注入などを、IAM で制御された安全な環境で実行できる。
サーバーレス環境での適用
Lambda はインスタンスの概念がないため、Chaos Monkey のアプローチは直接適用できない。サーバーレスでは以下のような代替手法を用いる。
| 実験 | 方法 |
|---|---|
| Lambda スロットリング | Reserved Concurrency を制限 |
| DynamoDB スロットリング | プロビジョンドモードで WCU を制限 |
| 外部 API 障害 | Lambda Layer でレイテンシ/エラーを注入 |
| AZ 障害 | VPC Lambda のサブネットを制限 |
カオスエンジニアリングの原則や実験の進め方については「カオスエンジニアリング」を参照。
Chaos Monkey が変えた文化
Chaos Monkey の最大の貢献は技術的なものではなく、文化的なものだ。「障害は起きるもの」という前提をチーム全体に浸透させ、耐障害性を設計の初期段階から考慮する文化を作った。この思想は Netflix を超えて、Amazon、Google、Microsoft など多くの企業に広がっている。
Chaos Monkey の背景や設計思想は関連書籍に詳しい。