本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Systems Manager SSM 文档与 AWS FIS
AWS FIS通过 AWS Systems Manager SSM代理和 AWS FIS操作支持自定义故障类型aws:ssm:send-command。可用于创建常见故障注入操作的预配置的 Systems Manager SSM SSM 文档( AWS 文档)可作为以 AWSFIS-前缀开头的公共文档提供。
SSM代理是可以在亚马逊EC2实例、本地服务器或虚拟机 (VMs) 上安装和配置的亚马逊软件。因此能将资源托管在 Systems Manager 上。代理负责处理 Systems Manager 中的请求,然后再按照指定方式运行。您可以添加自己的SSM文档来注入自定义错误,也可以引用亚马逊拥有的公开文档之一。
要求
对于需要SSM代理在目标上运行操作的操作,必须确保以下几点:
-
已为目标安装代理。SSM在某些 Amazon 系统映像 (AMIs) 上,默认安装了代理。否则,您可以在您的实例上安装SSM代理。有关更多信息,请参阅《AWS Systems Manager 用户指南》中的手动安装EC2实例SSM代理。
-
Systems Manager 有权对您的实例执行操作。您可以使用IAM实例配置文件授予访问权限。有关更多信息,请参阅AWS Systems Manager 用户指南中的为 IAM Systems Manager 创建IAM实例配置文件和将EC2实例配置文件附加到实例。
使用 aws:ssm:send-command 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/文档
要在 AWS FIS实验中使用SSM文档,您可以使用aws:ssm:send-command操作。此操作将在您的目标实例上获取并运行指定的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文档的信息
使用 desc SSM ribe-document 命令。
预先配置 AWS FISSSM的文档
您可以将预先配置的 AWS FISSSM文档与实验模板中的aws:ssm:send-command
操作配合使用。
要求
-
仅以下操作系统支持提供的 AWS FIS预配置SSM文档:
Amazon Linux 2023、Amazon Linux 2 和 Amazon Linux
Ubuntu
RHEL7、8、9
CentOS 8, 9
-
仅EC2实例支持提供的 AWS FIS预配置SSM文档。其他类型的托管节点(如本地服务器)并不支持此类文档。
要在ECS任务实验中使用这些SSM文档,请使用相应的亚马逊的ECS行动。例如,该aws:ecs:task-cpu-stress操作使用 AWSFIS-Run-CPU-Stress 文档。
文档
操作持续时间和 AWS FISSSM文档 DurationSeconds 中的区别
有些SSM文档会限制自己的执行时间,例如,某些预先配置的 AWS FISSSM文档会使用该 DurationSeconds参数。因此,你需要在 AWS FIS动作定义中指定两个独立的持续时间:
-
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 FISSSM文档可以选择安装先决条件,这可以将总体执行持续时间延长到指定 DurationSeconds 参数之外。因此,如果将操作持续时间和值设置 DurationSeconds 为相同的值,则SSM脚本的运行时间可能会超过操作持续时间。
AWSFIS-Run-CPU-Stress
使用该stress-ng工具对实例运行 CPU stress。使用 AWSFIS-Run-CPU-SSM Stres
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-CPU-Stress
ARN
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
arn:aws:ssm:region::document/AWSFIS-Run-Disk-Fill
文档参数
-
DurationSeconds – 必需。磁盘填充测试的持续时间(单位:秒)。
-
Percent – 可选。在磁盘填充测试期间分配的磁盘百分比。默认为 95%。
-
InstallDependencies – 可选。如果值为
True
,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认为True
。依赖项分别是 atd 和 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
arn:aws:ssm:region::document/AWSFIS-Run-IO-Stress
文档参数
-
DurationSeconds – 必需。IO 压力测试的持续时间(单位:秒)。
-
Workers – 可选。混合执行读/写操作(顺序操作、随机操作和内存映射操作)、强制同步操作和缓存删除操作的工作程序数量。多个子进程对同一个文件执行不同的 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
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
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
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 和 iptables。
以下字符串示例可输入控制台。
{"Protocol":"tcp", "Port":"8080", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Latency
使用 tc 工具为网络接口增加延迟。使用 AWSFIS-运行-网络-延迟文档
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Latency
ARN
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
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Latency-Sources
ARN
arn:aws:ssm:region::document/AWSFIS-Run-Network-Latency-Sources
文档参数
-
Interface – 可选。网络接口。默认为
eth0
。 -
DelayMilliseconds – 可选。延迟(单位:毫秒)。默认为 200。
-
JitterMilliseconds – 可选。抖动(单位:毫秒)。默认值为 10。
-
Sources – 必需。来源,用逗号分隔。可能的值为:IPv4地址、IPv4CIDR区块、域名和
S3
。DYNAMODB
如果指定值为DYNAMODB
或S3
,则仅适用于当前区域中的区域端点。 -
TrafficType – 可选。流量的类型。可能的值为
ingress
和egress
。默认为ingress
。 -
DurationSeconds – 必需。网络延迟测试的持续时间(单位:秒)。
-
InstallDependencies – 可选。如果值为
True
,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认为True
。依赖项分别是 atd、dig、jq 和 tc。
以下字符串示例可输入控制台。
{"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-Los
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Packet-Loss
ARN
arn:aws:ssm:region::document/AWSFIS-Run-Network-Packet-Loss
文档参数
-
Interface – 可选。网络接口。默认为
eth0
。 -
LossPercent – 可选。丢包率。默认为 7%。
-
DurationSeconds – 必需。网络丢包测试的持续时间(单位:秒)。
-
InstallDependencies – 可选。如果值为
True
,则 Systems Manager 会在目标实例上安装必要依赖项。默认为True
。依赖项分别是 atd、dig 和 tc。
以下字符串示例可输入控制台。
{"LossPercent":"15", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}
AWSFIS-Run-Network-Packet-Loss-Sources
使用 tc 工具,为网络接口添加丢包,以处理往返于特定来源的流量。使用 AWSFIS-Run-Network-Packet-Loss-Sources
操作类型(仅限控制台)
aws:ssm:send-command/AWSFIS-Run-Network-Packet-Loss-Sources
ARN
arn:aws:ssm:region::document/AWSFIS-Run-Network-Packet-Loss-Sources
文档参数
-
Interface – 可选。网络接口。默认为
eth0
。 -
LossPercent – 可选。丢包率。默认为 7%。
-
Sources – 必需。来源,用逗号分隔。可能的值为:IPv4地址、IPv4CIDR区块、域名和
S3
。DYNAMODB
如果指定值为DYNAMODB
或S3
,则仅适用于当前区域中的区域端点。 -
TrafficType – 可选。流量的类型。可能的值为
ingress
和egress
。默认为ingress
。 -
DurationSeconds – 必需。网络丢包测试的持续时间(单位:秒)。
-
InstallDependencies – 可选。如果值为
True
,则 Systems Manager 会在目标实例上安装必要依赖项。默认为True
。依赖项分别是 atd、dig、jq 和 tc。
以下字符串示例可输入控制台。
{"LossPercent":"15", "Sources":"S3,www.example.com,72.21.198.67", "Interface":"eth0", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}
示例
有关实验模板示例,请参阅 运行预先配置的 AWS FISSSM文档。
有关示例教程,请参阅在实例上运行 CPU stress。
故障排除
请采取以下步骤进行问题排查。
对SSM文档问题进行故障排除
打开 AWS Systems Manager 控制台,网址为https://console.aws.amazon.com/systems-manager/
。 -
在导航窗格中,依次选择节点管理和运行命令。
-
在命令历史记录选项卡上,使用筛选条件查找文档运行情况。
-
选择命令 ID,打开详细信息页面。
-
选择实例 ID。查看各个步骤的输出结果和错误。