Chaos Monkey

本番環境でランダムにインスタンスを停止し、システムの耐障害性を検証するツール

SRE耐障害性

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 の背景や設計思想は関連書籍に詳しい。

関連用語