本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Systems Manager SSM 文档与 AWS FIS
AWS FIS 通过 AWS Systems Manager SSM 代理和 AWS FIS 操作支持自定义故障类型。aws: ssm: 发送命令 Pre-configured可用于创建常见故障注入操作的 Systems Manager SSM 文档(SSM 文档)以以 AWSFIS-前缀开头的公共 AWS 文档形式提供。
SSM 代理是一种 Amazon 软件,可以在 Amazon EC2 实例、本地服务器或虚拟机 (VM) 上安装和配置。因此能将资源托管在 Systems Manager 上。代理负责处理 Systems Manager 中的请求,然后再按照指定方式运行。您可以添加自己的 SSM 文档以注入自定义错误,也可以引用其中一个公开 Amazon-owned 文档。
要求
对于需要使用 SSM 代理才能在目标上执行的操作,请确保满足以下条件:
-
已为目标安装代理。SSM 代理已经默认安装在亚马逊机器映像 (AMI) 上。否则,您可以为实例安装 SSM 代理。有关更多信息,请参阅 AWS Systems Manager 用户指南中的手动安装适用于 EC2 实例的 SSM 代理。
-
Systems Manager 有权对您的实例执行操作。您可以通过 IAM 实例配置文件授予访问权限。有关更多信息,请参阅 AWS Systems Manager 用户指南中的创建适用于 Systems Manager 的 IAM 实例配置文件以及将 IAM 实例配置文件附加到 EC2 实例。
使用 aws: ssm: 发送命令 action
SSM 文档定义 Systems Manager 对您的托管实例执行的操作。Systems Manager 包含大量预配置文档,您也可以自行创建文档。有关自行创建 SSM 文档的更多信息,请参阅 AWS Systems Manager 用户指南中的创建 Systems Manager 文档。有关 SSM 常规文档的更多信息,请参阅 AWS Systems Manager 用户指南中的 AWS Systems Manager 文档。
AWS FIS 提供预先配置的 SSM 文档。您可以在 AWS Systems Manager 控制台的 “文档” 下查看预先配置的 SSM 文档:。 https://console.aws.amazon.com/systems-manager/documents
要在 AWS FIS 实验中使用 SSM 文档,可以使用操作。aws: ssm: 发送命令此操作会在您目标实例上获取指定 SSM 文档并运行。
在实验模板中执行 aws:ssm:send-command 操作时,必须为此操作指定其他参数,包括以下参数:
-
documentArn – 必需。SSM 文档的 Amazon 资源名称 (ARN) 。
-
documentParameters:此操作设有条件。SSM 文档接受的必要参数和可选参数。对象格式为 JSON 格式,密钥为字符串,值为字符串值或字符串数组。
-
documentVersion:可选。要运行的 SSM 文档版本。
您可以通过 Systems Manager 控制台或命令行查看 SSM 文档信息(包括文档参数)。
使用控制台查看有关 SSM 文档的信息
-
在处打开 AWS Systems Manager 控制台https://console.aws.amazon.com/systems-manager/
。 -
在导航窗格中,选择文档。
-
选择文档,然后选择详细信息选项卡。
运行命令行,查看有关 SSM 文档的信息
使用 SSM 描述的文档命令。
了解有关操作状态的更多信息
SSM 操作状态由 SSM 命令状态决定。
Pre-configured AWS FIS SSM 文档
您可以将预先配置 AWS 的 FIS SSM 文档与实验模板中的aws:ssm:send-command操作结合使用。
要求
-
AWS FIS 提供的预配置的 SSM 文档仅在以下操作系统上受支持:
Amazon Linux 2023
Ubuntu
RHEL 8、9
CentOS 9
-
AWS FIS 提供的预配置的 SSM 文档仅在 EC2 实例上受支持。其他类型的托管节点(如本地服务器)并不支持此类文档。
要在 ECS 任务实验中使用这些 SSM 文档,请使用相应的 Amazon ECS 操作。例如,对 aws:ecs:task-cpu-stress 操作使用 AWSFIS-Run-CPU-Stress 文档。
文档
动作持续时间和 DurationSeconds 动作时间之间的区别 AWS FIS SSM 文档
某些 SSM 文档限制了自己的执行时间,例如,一些预先配置的 AWS FIS SSM 文档使用该 DurationSeconds参数。因此,您需要在 FIS 操作定义中指定两个独立 AWS 的持续时间:
-
Action duration:对于具有单个操作的实验,操作持续时间等于实验持续时间。对于多个动作,实验持续时间取决于单个动作持续时间及其运行顺序。 AWS FIS 会监视每项操作,直到其操作持续时间结束。
-
文档参数 DurationSeconds:SSM 文档将执行的持续时间,以秒为单位指定。
您可以为两种持续时间选择不同的值:
-
Action duration exceeds DurationSeconds:SSM 文档执行在操作完成之前完成。 AWS FIS 会等到操作持续时间结束后再开始后续操作。
-
Action duration is shorter than DurationSeconds:操作完成后,SSM 文档继续执行。如果 SSM 文档仍在执行中且操作持续时间已过,则操作状态将设置为 “已完成”。 AWS FIS 仅在操作持续时间结束之前监控执行情况。
请注意,某些 SSM 文档设置有可变持续时间。例如, AWS FIS SSM 文档可以选择安装先决条件,这可以将总体执行持续时间延长到指定 DurationSeconds 参数以外。因此,如果将操作持续时间和设置 DurationSeconds 为相同的值,则 SSM 脚本的运行时间可能会超过操作持续时间。
AWSFIS-Run-CPU-Stress
使用 stress-ng 工具在实例上运行 CPU 压力测试。使用 AWSFIS-Run-CPU-Stress
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-CPU-Stress
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-CPU-Stress
文档参数
-
DurationSeconds – 必需。CPU 压力测试的持续时间(单位:秒)。
-
CPU:可选。要使用的 CPU 压力源数量。默认为 0,使用所有 CPU 压力源。
-
LoadPercent:可选。目标 CPU 负载百分比,从 0(空载)到 100(满载)不等。默认值为 100。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖项为 stress-ng。
以下字符串示例可输入控制台。
{"DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Disk-Fill
在实例根卷上分配磁盘空间,模拟磁盘已满的故障。使用 AWSFIS-Run-Disk-Fill
如果注入此故障的实验停止(手动或通过停止条件停止), AWS FIS 会尝试通过取消正在运行的 SSM 文档来进行回滚。但如果因为故障或因为故障及应用程序活动导致磁盘空间已满,则 Systems Manager 可能无法完成取消操作。此时,如果要停止实验,请确保仍有磁盘空间。
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Disk-Fill
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Disk-Fill
文档参数
-
DurationSeconds – 必需。磁盘填充测试的持续时间(单位:秒)。
-
Percent:可选。在磁盘填充测试期间分配的磁盘百分比。默认为 95%。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖关系是atd、kmod和fallocate。
以下字符串示例可输入控制台。
{"DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-IO-Stress
使用 stress-ng 工具在实例上运行 IO 压力测试。使用 AWSFIS-Run-IO-Stress
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-IO-Stress
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-IO-Stress
文档参数
-
DurationSeconds – 必需。IO 压力测试的持续时间(单位:秒)。
-
Workers:可选。执行顺序、随机和内存映射混合 read/write 操作、强制同步和缓存删除操作的工作器数量。多个子进程对同一个文件执行不同的 I/O 操作。默认为 1。
-
Percent:可选。在 IO 压力测试期间,文件系统上使用的空闲空间百分比。默认为 80%。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖项为 stress-ng。
以下字符串示例可输入控制台。
{"Workers":"1", "Percent":"80", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Kill-Process
运行 killall 命令,停止实例中的指定进程。使用 AWSFIS-Run-Kill-Process
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Kill-Process
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Kill-Process
文档参数
-
ProcessName – 必需。要停止的进程名称。
-
Signal:可选。要与命令一起发送的信号。这些值可能是
SIGTERM(接收者可以忽略的值)和SIGKILL(接收者不能忽略的值)。默认值为SIGTERM。 -
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖项为 killall。
以下字符串示例可输入控制台。
{"ProcessName":"myapplication", "Signal":"SIGTERM"}
AWSFIS-Run-Memory-Stress
使用 stress-ng 工具在实例上运行内存压力测试。使用 AWSFIS-Run-Memory-Stress
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Memory-Stress
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Memory-Stress
文档参数
-
DurationSeconds – 必需。内存压力测试的持续时间(单位:秒)。
-
Workers:可选。虚拟内存压力源的数量。默认为 1。
-
Percent – 必需。在内存压力测试期间要使用的虚拟内存百分比。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖项为 stress-ng。
以下字符串示例可输入控制台。
{"Percent":"80", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Blackhole-Port
使用 iptables 工具丢弃协议和端口的入站或出站流量。使用 AWSFIS-Run-Network-Blackhole-Port
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Blackhole-Port
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Network-Blackhole-Port
文档参数
-
Protocol – 必需。协议。可能的值为
tcp和udp。 -
Port – 必需。端口号。
-
TrafficType:可选。流量的类型。可能的值为
ingress和egress。默认为ingress。 -
DurationSeconds – 必需。网络黑洞测试的持续时间(单位:秒)。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖项分别是 atd、dig、lsof 和 iptables。
以下字符串示例可输入控制台。
{"Protocol":"tcp", "Port":"8080", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Latency
使用 tc 工具为网络接口增加延迟。使用 AWSFIS-Run-Network-Latency
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Latency
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Network-Latency
文档参数
-
Interface:可选。网络接口。默认值为
eth0。 -
DelayMilliseconds:可选。延迟(单位:毫秒)。默认为 200。
-
DurationSeconds – 必需。网络延迟测试的持续时间(单位:秒)。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖项分别是 atd、dig 和 tc。
以下字符串示例可输入控制台。
{"DelayMilliseconds":"200", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Latency-Sources
使用 tc 工具,为往返于特定来源的流量添加网络接口的延迟和抖动。使用 AWSFIS-Run-Network-Latency-Sources
使用FlowsPercent参数为一定百分比的连接添加延迟。
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Latency-Sources
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Network-Latency-Sources
文档参数
-
Interface:可选。网络接口,用逗号分隔。支持 ALL 和 DEFAULT 值。默认为
DEFAULT,它将以操作系统的主网络接口为目标。 -
DelayMilliseconds:可选。延迟(单位:毫秒)。默认为 200。
-
JitterMilliseconds:可选。抖动(单位:毫秒)。默认值为 10。
-
FlowsPercent:可选。将受操作影响的网络流量的百分比。默认 为 100%。
-
Sources – 必需。源代码以逗号分隔,不含空格。可能的值为:IPv4 地址、IPv4 CIDR 区块、域名、可用区名称(us-east-1a)、可用区 ID(use1-az1)、全部、和。
DYNAMODBS3如果指定值为DYNAMODB或S3,则仅适用于当前区域中的区域端点。本文档不会影响 IPv6 流量。 -
TrafficType:可选。流量的类型。可能的值为
ingress和egress。默认为ingress。 -
DurationSeconds – 必需。网络延迟测试的持续时间(单位:秒)。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认值为True。依赖关系是atddig、jq、lsof、和tc。
使用本文档时,实验角色需要以下权限:
ec2:DescribeInstancesec2:DescribeSubnets
以下字符串示例可输入控制台。
{"DelayMilliseconds":"200", "JitterMilliseconds":"15", "Sources":"S3,www.example.com,72.21.198.67", "Interface":"eth0", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Packet-Loss
使用 tc 工具,为网络接口添加丢包。使用 AWSFIS-Run-Network-Packet-Loss
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Packet-Loss
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Network-Packet-Loss
文档参数
-
Interface:可选。网络接口。默认值为
eth0。 -
LossPercent:可选。丢包率。默认为 7%。
-
DurationSeconds – 必需。网络丢包测试的持续时间(单位:秒)。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项。默认值为True。依赖项分别是 atd、lsof、dig 和 tc。
以下字符串示例可输入控制台。
{"LossPercent":"15", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Packet-Loss-Sources
使用 tc 工具,为网络接口添加丢包,以处理往返于特定来源的流量。使用 AWSFIS-Run-Network-Packet-Loss-Sources
使用FlowsPercent参数对一定百分比的连接注入数据包丢失率。
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Packet-Loss-Sources
进行筛选
arn:aws:ssm:region::document/AWSFIS-Run-Network-Packet-Loss-Sources
文档参数
-
Interface:可选。网络接口,用逗号分隔。支持 ALL 和 DEFAULT 值。默认为
DEFAULT,它将以操作系统的主网络接口为目标。 -
LossPercent:可选。丢包率。默认为 7%。
-
FlowsPercent:可选。将受操作影响的网络流量的百分比。默认 为 100%。
-
Sources – 必需。源代码以逗号分隔,不含空格。可能的值为:IPv4 地址、IPv4 CIDR 区块、域名、可用区名称(us-east-1a)、可用区 ID(use1-az1)、全部、和。
DYNAMODBS3如果指定值为DYNAMODB或S3,则仅适用于当前区域中的区域端点。本文档不会影响 IPv6 流量。 -
TrafficType:可选。流量的类型。可能的值为
ingress和egress。默认为ingress。 -
DurationSeconds – 必需。网络丢包测试的持续时间(单位:秒)。
-
InstallDependencies:可选。如果值为
True,则 Systems Manager 会在目标实例上安装必要依赖项。默认值为True。依赖关系是atddig、jq、lsof、和tc。
使用本文档时,实验角色需要以下权限:
ec2:DescribeInstancesec2:DescribeSubnets
以下字符串示例可输入控制台。
{"LossPercent":"15", "Sources":"S3,www.example.com,72.21.198.67", "Interface":"eth0", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}
示例
有关实验模板示例,请参阅 运行预先配置的 AWS FIS SSM 文档。
有关示例教程,请参阅 在实例上运行 CPU 压力测试。
限制
-
以下文档无法并行运行:
AWSFIS-Run-Network-Blackhole-Port
AWSFIS-Run-Network-Latency
AWSFIS-Run-Network-Latency-Sources
AWSFIS-Run-Network-Packet-Loss
AWSFIS-Run-Network-Packet-Loss-Sources
回滚脚本
AWS FIS SSM 文档会自动创建回滚脚本作为一种安全机制,用于在故障注入实验后恢复系统状态。这些脚本可确保移除注入的错误,即使操作失败或意外终止。
创建回滚脚本
故障注入实验开始时会自动创建回滚脚本。
创作详情
-
位置 -脚本在
/var/lib/amazon/ssm/目录中创建。 -
命名模式 —
其中FAULT_NAME-FAULT_IDENTIFIER-Rollback.shFAULT_IDENTIFIER是随机生成的 32 个字符的字符串 -
计时 — 在每次故障注入实验开始时,在故障注入开始之前创建。
-
内容 -包含所有必需的环境变量和命令,以扭转特定故障。
例如,网络延迟实验可能会在/var/lib/amazon/ssm/NetworkLatency-abc123-Rollback.sh创建回滚脚本。
回滚日志
回滚脚本实现双重日志记录以捕获所有回滚活动,以进行故障排除和审计。
日志文件位置
当回滚脚本执行时,它会在两个位置创建日志:
-
临时文件 —
/tmp/aws-fis-rollback-TIMESTAMP-PID.log -
系统日志 — 使用设施发送到 syslog
local0.info
日志文件命名
临时日志文件使用以下命名规范:
/tmp/aws-fis-rollback-YYYY-MM-DDTHH:MM:SSZ-PID.log
其中YYYY-MM-DDTHH:MM:SSZ是 UTC 时间戳,PID是回滚脚本的进程 ID。
系统日志配置
回滚日志使用以下配置发送到 syslog:
标签 —
aws-fis-rollback优先级:
local0.info格式 —
[YYYY-MM-DDTHH:MM:SSZ]log_message
查看回滚日志
使用以下命令查看 systemd 日志中的所有回滚日志:
sudo journalctl -t aws-fis-rollback
问题排查
请采取以下步骤进行问题排查。
排查 SSM 文档问题
在处打开 AWS Systems Manager 控制台https://console.aws.amazon.com/systems-manager/
。 -
在导航窗格中,依次选择节点管理和运行命令。
-
在命令历史记录选项卡上,使用筛选条件查找文档运行情况。
-
选择命令 ID,打开详细信息页面。
-
选择实例 ID。查看各个步骤的输出结果和错误。