AWS Fault Injection Simulator

EC2 停止やネットワーク遅延などの障害をカオスエンジニアリングの手法で安全に注入し、システムの耐障害性を検証するサービス

概要

AWS Fault Injection Simulator (FIS) は、AWS 環境上でカオスエンジニアリングの実験を安全に実施するためのフルマネージドサービスです。EC2 インスタンスの停止、ネットワーク遅延の注入、AZ 障害のシミュレーションなど、本番環境で起こりうる障害を意図的に発生させ、システムの回復力を検証します。実験テンプレートにアクション、ターゲット、ストップ条件を定義し、制御された環境で障害を再現できます。CloudWatch アラームと連動したストップ条件により、実験が想定外の影響を及ぼした場合に自動停止する安全機構を備えています。

実験テンプレートとアクションの設計

FIS の実験テンプレートは、注入する障害の種類 (アクション)、対象リソース (ターゲット)、安全装置 (ストップ条件) を 1 つの定義にまとめたものです。アクションには EC2 インスタンスの停止・再起動、ECS タスクの強制終了、RDS フェイルオーバーの発動、ネットワーク遅延・パケットロスの注入、API スロットリングのシミュレーションなどがあります。複数のアクションを並列または順次実行でき、「まず EC2 インスタンスを 30% 停止し、5 分後にネットワーク遅延を注入する」といった複合障害シナリオを構築できます。アクションの持続時間は秒単位で指定でき、実験終了後はリソースが自動的に元の状態に復帰します。実験テンプレートは JSON/YAML で定義し、CloudFormation や Terraform でコード管理できます。テンプレートのバージョン管理により、実験の再現性を担保し、過去の実験と同一条件での再実行が可能です。実験の実行には IAM ロールが必要で、アクションごとに必要な権限 (ec2:StopInstances、ecs:StopTask 等) を最小権限で付与します。

ターゲット選択とストップ条件による安全制御

ターゲットの選択は FIS の安全性を左右する最も重要な設計ポイントです。タグベースのフィルタリングにより、特定の環境 (env:staging)、チーム (team:platform)、サービス (service:payment) に限定して障害を注入できます。さらに、選択されたリソースの中から影響を受ける割合 (例: 全体の 30%) やリソース数 (例: 最大 3 台) を指定でき、爆発半径 (blast radius) を制御します。ストップ条件は CloudWatch アラームと連動し、エラー率が閾値を超えた場合やレイテンシが許容範囲を逸脱した場合に実験を即座に中断します。ストップ条件は複数設定でき、いずれか 1 つが発動すれば実験全体が停止します。本番環境で実験を行う場合は、段階的にスコープを拡大するアプローチが推奨されます。最初は 1 台の EC2 インスタンスを対象に実験し、問題がなければ対象を 10%、30%、50% と段階的に広げます。実験の実行ログは CloudTrail に記録され、誰がいつどの実験を実行したかの監査証跡が残ります。

実験結果の分析と耐障害性改善サイクル

FIS の実験結果は、仮説の検証と改善アクションの導出に活用します。実験前に「Auto Scaling グループが EC2 インスタンスの 30% 停止から 5 分以内に復旧する」といった仮説を立て、実験後に CloudWatch メトリクス (CPU 使用率、リクエスト成功率、レイテンシ) で仮説を検証します。仮説が棄却された場合 (復旧に 15 分かかった等) は、Auto Scaling のクールダウン設定やヘルスチェック間隔の見直しなど、具体的な改善アクションに落とし込みます。FIS の実験を CI/CD パイプラインに組み込むことで、デプロイのたびに耐障害性を自動検証する仕組みを構築できます。CodePipeline のステージに FIS 実験を配置し、実験が成功した場合のみ本番デプロイに進む構成です。料金はアクション分数に基づく従量課金で、1 アクション分あたり 0.10 USD です。10 分間の実験で 3 つのアクションを並列実行した場合、30 アクション分 × 0.10 USD = 3.00 USD となります。定期的な実験を習慣化し、Game Day (障害訓練日) として月次で実施するチームが増えています。

共有するXB!