AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

为 Run Command 配置 Amazon SNS 通知

针对使用 Systems Manager Run Command 发送的命令,您可以将 Amazon Simple Notification Service (Amazon SNS) 配置为发送有关这些命令的状态的通知。Amazon SNS 协调并管理传输,或将通知发送到订阅客户端或终端节点。您可以在命令更改为新状态或特定状态 (例如“失败”或“超时”) 时接收通知。如果您将一条命令发送给多个实例,则可接收发送给特定实例的命令的每个副本的通知。每个副本称为一个调用

Amazon SNS 能够以 HTTP 或 HTTPS POST 以及电子邮件 (SMTP、纯文本或 JSON 格式) 的方式传输通知,或者将通知作为消息发布到 Amazon Simple Queue Service (Amazon SQS) 队列。有关更多信息,请参阅 Amazon Simple Notification Service Developer Guide 中的什么是 Amazon SNS

为 Systems Manager 配置 Amazon SNS 通知

对于进入以下状态的命令,Run Command 支持发送相应的 Amazon SNS 通知。有关导致命令进入以下状态之一的条件的信息,请参阅了解命令状态

  • 正在进行

  • 成功

  • 已失败

  • 超时

  • 已取消

注意

使用 Run Command 发送的命令还报告“正在取消”和“待处理”状态。Amazon SNS 通知不会捕获这些状态。

如果您为 Amazon SNS 通知配置 Run Command,Amazon SNS 将发送包含以下信息的摘要消息:

字段 类型 描述

EventTime

字符串

触发事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。示例:2016-04-26T13:15:30Z

DocumentName

字符串

用于执行此命令的 SSM 文档的名称。

CommandId

字符串

Run Command 在发送命令后生成的 ID。

ExpiresAfter

日期

如果达到此时间但命令尚未开始执行,则它将不会执行。

OutputS3BucketName 字符串 将命令执行响应存储到的 Amazon Simple Storage Service (Amazon S3) 存储桶。
OutputS3KeyPrefix 字符串 将命令执行响应存储到的存储桶中的 Amazon S3 目录路径。

RequestedDateTime

字符串

请求发送到此特定实例的日期和时间。

实例 ID

字符串

命令的目标实例。

状态

字符串

命令的命令状态。

如果您将一条命令发送给多个实例,则 Amazon SNS 可发送有关命令的每个副本或调用的消息,其中包含以下信息:

字段 类型 描述

EventTime

字符串

触发事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。示例:2016-04-26T13:15:30Z

DocumentName

字符串

用于执行此命令的 Systems Manager 文档的名称。

RequestedDateTime

字符串

请求发送到此特定实例的日期和时间。

CommandId

字符串

Run Command 在发送命令后生成的 ID。

实例 ID

字符串

命令的目标实例。

状态

字符串

此调用的命令状态。

要设置命令更改状态时的 Amazon SNS 通知,您必须完成以下任务。

任务 1:为 Amazon SNS 通知创建 IAM 角色

使用以下过程为 Amazon SNS 通知创建 IAM 角色。此服务角色供 Systems Manager 用来触发 Amazon SNS 通知。

为 Amazon SNS 通知创建 IAM 服务角色

  1. Open the IAM console at https://console.amazonaws.cn/iam/.

  2. 在导航窗格中,选择 Roles,然后选择 Create Role

  3. Select type of trusted entity 页面上的 AWS Service 下,选择 EC2

  4. 选择您的使用案例部分,选择 EC2,然后选择下一步:权限

  5. 附加的权限策略页面中,搜索 AmazonSNSFullAccess 策略,选择它,然后选择下一步:审核

  6. Review 页面上,在 Role name 框中键入名称,然后键入描述。

  7. 选择 Create role。系统将让您返回到 Roles 页。

  8. 角色页面中,选择刚刚创建的角色以打开摘要页面。

  9. 选择 Trust Relationships 选项卡,然后选择 Edit Trust Relationship

  10. 将 "ssm.amazonaws.com" 添加到现有策略,如以下代码段所示:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com", "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    注意

    您必须在现有条目后添加逗号。"Service": "ec2.amazonaws.com",否则 JSON 将不会验证。

  11. 选择 Update Trust Policy

  12. 复制或记下 Role ARN。在发送配置为返回通知的命令时将指定此 ARN。

  13. 使摘要页面保持打开状态。

任务 2:将 iam:PassRole 策略附加到您的 Amazon SNS 角色

要从 Amazon SNS 服务接收通知,您必须将 iam: PassRole 策略附加到任务 1 中创建的服务角色。

将 iam:PassRole 策略附加到您的 Amazon SNS 角色

  1. 在刚刚创建的角色的摘要页面中,选择权限选项卡。

  2. 选择添加内联策略

  3. 创建策略页面上,选择可视化编辑器选项卡。

  4. 选择服务,然后选择 IAM

  5. 选择选择操作

  6. 筛选操作文本框中,键入 PassRole,然后选择 PassRole 选项。

  7. 选择资源。确保已选择 Specific,然后选择添加 ARN

  8. Specify ARN for role 字段中,粘贴您在任务 1 结束时复制的 Amazon SNS 角色 ARN。系统会自动填充 AccountRole name with path 字段。

  9. 选择 Add

  10. 选择查看策略

  11. 查看策略页面上键入一个名称,然后选择创建策略

任务 3:创建并订阅 Amazon SNS

Amazon SNS 主题是一种通信渠道,Run Command 使用它发送有关命令状态的通知。Amazon SNS 支持不同的通信协议,包括 HTTP/S、电子邮件和其他 AWS 服务,如 Amazon SQS。出于快速入门的目的,我们建议您先使用电子邮件协议。有关如何创建主题的信息,请参阅 Amazon Simple Notification Service Developer Guide 中的创建主题

注意

创建主题后,复制或记下 Topic ARN。在发送配置为返回状态通知的命令时将指定此 ARN。

创建主题后,可指定终端节点订阅该主题。如果您选择电子邮件协议,终端节点即为您希望接收通知的电子邮件地址。有关如何订阅主题的更多信息,请参阅 Amazon Simple Notification Service Developer Guide 中的订阅主题

Amazon SNS 从 AWS 通知向您指定的电子邮件地址发送确认电子邮件。打开这封电子邮件,然后选择确认订阅链接。

您将从 AWS 收到确认消息。Amazon SNS 现已配置为接收通知并将通知以电子邮件形式发送到您指定的电子邮件地址。

任务 4:发送可返回状态通知的命令

此部分介绍如何使用控制台或 AWS Command Line Interface (AWS CLI) 发送配置为返回状态通知的命令。

从控制台发送可返回通知的命令

  1. https://console.amazonaws.cn/systems-manager/ 上打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择 Run Command

    -或者-

    如果 AWS Systems Manager 主页首先打开,请选择菜单图标 ( ) 以打开导航窗格,然后选择 Run Command

  3. 选择运行命令

  4. 命令文档列表中,选择一个 Systems Manager 文档。

  5. Targets 部分中,通过手动指定标签或选择实例来标识您要运行此操作的实例。

  6. 命令参数部分中,为必需的参数指定值。

  7. Other parameters 中:

    • Comment 框中,键入有关此命令的信息。

    • Timeout (seconds) 中,指定整个命令执行失败之前系统要等待的秒数。

  8. (可选) 在 Rate control 中:

    • Concurrency 中,指定要同时对其运行此命令的实例的数量或百分比。

      注意

      如果通过选择 Amazon EC2 标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比来限制可同时运行此文档的实例的数量。

    • Error threshold 中,指定此命令在一定数量或百分比的实例上失败后何时停止在其他实例上运行它。例如,如果您指定 3 个错误,Systems Manager 将在收到第 4 个错误时停止发送命令。仍在处理命令的实例也可能发送错误。

  9. Output options 部分中,如果您要将命令输出保存到文件,请选择 Write command output to an Amazon S3 bucket。在框中键入存储桶和前缀 (文件夹) 名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限是分配给实例的实例配置文件的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅 配置对 Systems Manager 的访问权限

  10. SNS Notifications 部分中,选择 Enable SNS notifications

  11. IAM 角色字段中,键入或粘贴之前创建的 IAM 角色 ARN。

  12. SNS 主题字段中,键入或粘贴之前创建的 Amazon SNS ARN。

  13. Notify me on 字段中,选择要接收其通知的事件。

  14. Notify me for 字段中,选择接收发送给多个实例 (调用) 或命令摘要的命令的每个副本的通知。

  15. 选择 Run

  16. 检查来自 Amazon SNS 的电子邮件消息并打开电子邮件。Amazon SNS 发送电子邮件需要花费几分钟的时间。

从 AWS CLI 发送为通知配置的命令

  1. 打开 AWS CLI。

  2. 指定以下命令中的参数。

    aws ssm send-command --instance-ids "ID-1, ID-2" --document-name "name" --parameters commands=date --service-role ServiceRole ARN --notification-config NotificationArn=SNS ARN

    例如

    aws ssm send-command --instance-ids "i-12345678, i-34567890" --document-name "AWS-RunPowerShellScript" --parameters commands=date --service-role arn:aws-cn:iam:: 123456789012:myrole --notification-config NotificationArn=arn:aws-cn:sns:cn-north-1:123456789012:test
  3. 按 Enter。

  4. 检查来自 Amazon SNS 的电子邮件消息并打开电子邮件。Amazon SNS 发送电子邮件需要花费几分钟的时间。

有关从命令行配置 Run Command 的更多信息,请参阅 Amazon EC2 Systems Manager API ReferenceSystems Manager AWS CLI 参考