将 Systems Manager SSM 文档与 AWS FIS - AWS 故障注入服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 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代理在目标上运行操作的操作,必须确保以下几点:

使用 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控制台中从一系列预先配置的文档中进行选择。有关更多信息,请参阅 预先配置 AWS FISSSM的文档

要在 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文档的信息
  1. 打开 AWS Systems Manager 控制台,网址为https://console.aws.amazon.com/systems-manager/

  2. 在导航窗格中,选择文档

  3. 选择文档,然后选择详细信息选项卡。

使用命令行查看有关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 s 文档。

操作类型(仅限控制台)

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 文档SSM。

如果注入此故障的实验已停止,无论是手动还是由于停止条件而停止,则 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。依赖项分别是 atdfallocate

以下字符串示例可输入控制台。

{"DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-IO-Stress

使用 stress-ng 工具在实例上运行 IO 压力测试。使用 AWSFIS-run-io-stress 文档SSM。

操作类型(仅限控制台)

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 文档SSM。

操作类型(仅限控制台)

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 文档SSM。

操作类型(仅限控制台)

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 文档SSM。

操作类型(仅限控制台)

aws:ssm:send-command/AWSFIS-Run-Network-Blackhole-Port

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Network-Blackhole-Port

文档参数
  • Protocol – 必需。协议。可能的值为 tcpudp

  • Port – 必需。端口号。

  • TrafficType – 可选。流量的类型。可能的值为 ingressegress。默认为 ingress

  • DurationSeconds – 必需。网络黑洞测试的持续时间(单位:秒)。

  • InstallDependencies – 可选。如果值为 True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认为 True。依赖项分别是 atddigiptables

以下字符串示例可输入控制台。

{"Protocol":"tcp", "Port":"8080", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Latency

使用 tc 工具为网络接口增加延迟。使用 AWSFIS-运行-网络-延迟文档SSM。

操作类型(仅限控制台)

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。依赖项分别是 atddigtc

以下字符串示例可输入控制台。

{"DelayMilliseconds":"200", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Latency-Sources

使用 tc 工具,为往返于特定来源的流量添加网络接口的延迟和抖动。使用 AWSFIS-Run-Network-Latency-Sources SSM 文档。

操作类型(仅限控制台)

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区块、域名和S3DYNAMODB如果指定值为 DYNAMODBS3,则仅适用于当前区域中的区域端点。

  • TrafficType – 可选。流量的类型。可能的值为 ingressegress。默认为 ingress

  • DurationSeconds – 必需。网络延迟测试的持续时间(单位:秒)。

  • InstallDependencies – 可选。如果值为 True,则 Systems Manager 会在目标实例上安装必要依赖项(如未安装)。默认为 True。依赖项分别是 atddigjqtc

以下字符串示例可输入控制台。

{"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 SSM s 文档。

操作类型(仅限控制台)

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。依赖项分别是 atddigtc

以下字符串示例可输入控制台。

{"LossPercent":"15", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Packet-Loss-Sources

使用 tc 工具,为网络接口添加丢包,以处理往返于特定来源的流量。使用 AWSFIS-Run-Network-Packet-Loss-Sources SSM 文档。

操作类型(仅限控制台)

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区块、域名和S3DYNAMODB如果指定值为 DYNAMODBS3,则仅适用于当前区域中的区域端点。

  • TrafficType – 可选。流量的类型。可能的值为 ingressegress。默认为 ingress

  • DurationSeconds – 必需。网络丢包测试的持续时间(单位:秒)。

  • InstallDependencies – 可选。如果值为 True,则 Systems Manager 会在目标实例上安装必要依赖项。默认为 True。依赖项分别是 atddigjqtc

以下字符串示例可输入控制台。

{"LossPercent":"15", "Sources":"S3,www.example.com,72.21.198.67", "Interface":"eth0", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}

示例

有关实验模板示例,请参阅 运行预先配置的 AWS FISSSM文档

有关示例教程,请参阅在实例上运行 CPU stress

故障排除

请采取以下步骤进行问题排查。

对SSM文档问题进行故障排除
  1. 打开 AWS Systems Manager 控制台,网址为https://console.aws.amazon.com/systems-manager/

  2. 在导航窗格中,依次选择节点管理运行命令

  3. 命令历史记录选项卡上,使用筛选条件查找文档运行情况。

  4. 选择命令 ID,打开详细信息页面。

  5. 选择实例 ID。查看各个步骤的输出结果和错误。