c4.17 カオスエンジニアリングを実践する
Werner Vogels の言葉のとおり「すべては常に故障する」。故障を意図的に注入し(まずテストで、次に慎重に本番で)、アーキテクチャが乱れた状況に耐えることを検証し、サイバーレジリエンスを強化します。これは可用性要件の厳しいチーム向けの高度なプラクティスです。
実装ガイダンス
故障を注入してレジリエンスを検証する
クラウドで高可用性は実現できますが、レジリエントなアーキテクチャを構築するのはお客様の責任です。カオスエンジニアリングは、故障(AZ の障害、依存関係の障害)を意図的にシミュレートし、実際のインシデント時にギャップを発見するのではなく、アーキテクチャが意図どおり(適切に劣化する、フェイルオーバーする)に振る舞うことを確認します。レジリエンスの取り組みは Well-Architected の信頼性の柱を土台にします。
ツール
AWS Fault Injection Service(FIS)は、制御された実験(インスタンスの停止、レイテンシーの注入、AZ 障害のシミュレートなど)を実行するマネージドのカオスエンジニアリングサービスです。オープンソースの選択肢には Netflix の Chaos Monkey があります。
安全に行う
これは高度な推奨事項です。故障を意図的に導入することは、誰にでも向くものではありません。
- 本番で実験する前に、テスト環境で練習します。
- 可用性要件が厳しい、あるいは環境が故障に耐えることを証明する必要があり、テストを実行できる熟練したチームがある場合に採用します。
- このテストのミスが実際の障害を引き起こしうることを理解します。小さな影響範囲から始め、停止条件を定義し、徐々に拡大します。
How to validate
- 故障を注入してレジリエンスを検証していますか(たとえば AWS Fault Injection Service で)?
- 本番の前にテスト環境で練習し、停止条件を定義し、影響範囲を限定していますか?
- 実験は熟練したチームが実行し、結果がアーキテクチャの改善に反映されていますか?
Threats addressed
- レジリエントだと想定されつつ一度もテストされていないアーキテクチャは、実際の障害時に予期せず失敗する可能性があります。カオスエンジニアリングは、まず制御された形でその弱点を明らかにします。
Cloud Security Maturity Model