AWS Fault Injection Simulator
通过混沌工程方法安全注入 EC2 停止、网络延迟等故障,验证系统容错能力的服务
概述
AWS Fault Injection Simulator (FIS) 是一项全托管服务,用于在 AWS 环境中安全实施混沌工程实验。可有意制造 EC2 实例停止、网络延迟注入、可用区故障模拟等生产环境中可能发生的故障,验证系统的恢复能力。在实验模板中定义操作、目标和停止条件,在受控环境中重现故障。通过与 CloudWatch 告警联动的停止条件,当实验产生意外影响时可自动停止。
实验模板与操作设计
FIS 的实验模板将注入的故障类型 (操作)、目标资源 (目标) 和安全装置 (停止条件) 整合为一个定义。操作包括 EC2 实例停止/重启、ECS 任务强制终止、RDS 故障转移触发、网络延迟/丢包注入、API 限流模拟等。可并行或顺序执行多个操作,构建如「先停止 30% 的 EC2 实例,5 分钟后注入网络延迟」的复合故障场景。操作持续时间可按秒指定,实验结束后资源自动恢复原始状态。实验模板以 JSON/YAML 定义,可通过 CloudFormation 或 Terraform 进行代码管理。模板版本管理确保实验可重现性,可在与过去相同条件下重新执行。实验执行需要 IAM 角色,按操作以最小权限授予所需权限 (ec2:StopInstances、ecs:StopTask 等)。
目标选择与停止条件的安全控制
目标选择是影响 FIS 安全性的最重要设计要点。通过基于标签的过滤,可将故障注入限定在特定环境 (env:staging)、团队 (team:platform)、服务 (service:payment)。还可指定选中资源中受影响的比例 (如全体的 30%) 或资源数 (如最多 3 台),控制爆炸半径 (blast radius)。停止条件与 CloudWatch 告警联动,当错误率超过阈值或延迟超出容许范围时立即中断实验。可设置多个停止条件,任一触发即停止整个实验。在生产环境实验时推荐逐步扩大范围的方法。先以 1 台 EC2 实例为对象实验,无问题后逐步扩大到 10%、30%、50%。实验执行日志记录在 CloudTrail 中,保留谁在何时执行了哪个实验的审计轨迹。
实验结果分析与容错改进循环
FIS 的实验结果用于验证假设和导出改进措施。实验前建立假设如「Auto Scaling 组在 30% EC2 实例停止后 5 分钟内恢复」,实验后通过 CloudWatch 指标 (CPU 使用率、请求成功率、延迟) 验证假设。假设被否定时 (如恢复耗时 15 分钟),落实为具体改进措施如调整 Auto Scaling 冷却设置或健康检查间隔。将 FIS 实验嵌入 CI/CD 管道,可构建每次部署自动验证容错能力的机制。在 CodePipeline 阶段放置 FIS 实验,仅实验成功时才进入生产部署。费用基于操作分钟数按量计费,每操作分钟 0.10 USD。10 分钟实验并行执行 3 个操作时为 30 操作分钟 × 0.10 USD = 3.00 USD。越来越多团队将定期实验习惯化,以 Game Day (故障演练日) 形式每月实施。