Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

为 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

例如,如果您将 Amazon SNS 配置为在命令状态更改为失败时发送通知,则 SNS 将发送包含命令执行的详细信息的电子邮件通知。

注意

如果您愿意,您可以使用 Amazon CloudWatch Events 将目标配置为在命令更改状态时调用 AWS Lambda 函数。有关更多信息,请参阅 为 Run Command 配置 CloudWatch Events

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

为 Systems Manager 配置 Amazon SNS 通知

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

  • 正在进行

  • 成功

  • 已失败

  • 超时

  • 已取消

注意

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

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

字段 类型 说明

EventTime

字符串

触发事件的时间。由于 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

字符串

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

DocumentName

字符串

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

RequestedDateTime

字符串

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

CommandId

字符串

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

实例 ID

字符串

命令的目标实例。

状态

字符串

此调用的命令状态。

配置账户权限

在发送为通知配置的命令时,可指定服务角色 Amazon 资源名称 (ARN)。例如:--service-role-arn=arn:aws-cn:iam::123456789012:myrole。此服务角色供 Systems Manager 用来触发 SNS 通知。

要从 Amazon SNS 服务接收通知,您必须将 iam:PassRole 策略附加到现有 AWS Identity and Access Management (IAM) 用户账户,或创建一个新的 IAM 账户并向其附加此策略。如果您创建新账户,则还必须附加 AmazonSSMFullAccess 策略,以便账户能够与 Systems Manager API 进行通信。

使用以下过程可将 IAM 策略附加到您的用户账户。如果您需要创建新的用户账户,请参阅 IAM User Guide 中的在您的 AWS 账户中创建 IAM 用户

将 iam:PassRole 策略附加到您的用户账户

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

  2. 在导航窗格中,选择用户,然后选择相应用户 (在用户名下)。

  3. 在页面的顶部,将您的 User ARN 复制到剪贴板。

  4. 权限下,验证 AmazonSSMFullAccess 策略是否已列出,或者是否存在可向您授予 Systems Manager API 访问权限的相当策略。

  5. 选择添加内联策略

  6. Set Permissions 页面上,选择 Policy Generator,然后选择 Select

  7. 验证 Effect 是否已设置为 Allow

  8. AWS 服务 中,选择 AWS Identity and Access Management

  9. Actions 中,选择 PassRole

  10. Amazon Resource Name (ARN) 字段中,粘贴您的 ARN。

  11. 选择 Add Statement,然后选择 Next

  12. Review Policy 页面上,选择 Apply Policy

为通知创建 IAM 角色

在上一个过程中,您已将 IAM 策略添加到用户账户,以便能发送用于返回通知的命令。在下面的过程中,您将创建一个角色,以使 Systems Manager 服务能够在发送通知时代表您执行操作。

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

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

  3. Step 1: Set Role Name 中,为通知输入用于将此角色标识为 Run Command 角色的名称。

  4. Step 2: Select Role Type 中,选择 Amazon EC2。系统会跳过 Step 3: Establish Trust,因为这是一个托管策略。

  5. Step 4: Attach Policy 中,选择 AmazonSNSFullAccess

  6. 选择 Next Step,然后选择 Create Role。系统将让您返回到 Roles 页。

  7. 找到刚刚创建的角色,然后双击它。

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

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

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

    注意

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

  10. 选择 Update Trust Policy

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

配置 Amazon SNS

要使用 Amazon SNS 发送电子邮件通知,必须先创建一个主题,然后用您的电子邮件地址订阅该主题。

创建一个 Amazon SNS 主题

Amazon SNS 主题是一个逻辑接入点,即 Run Command 用来发送通知的通信通道。您可通过为主题指定名称来创建主题。

有关更多信息,请参阅 Amazon Simple Notification Service Developer Guide 中的创建主题

注意

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

订阅 Amazon SNS 主题

要接收 Run Command 发送到该主题的通知,必须让一个终端节点订阅该主题。在此过程中,为 Endpoint 指定要用来从 Run Command 接收通知的电子邮件地址。

有关更多信息,请参阅 Amazon Simple Notification Service Developer Guide 中的订阅主题

确认 Amazon SNS 订阅

Amazon SNS 向在上一步骤中指定的电子邮件地址发送确认电子邮件。

确保打开来自 AWS 通知的电子邮件,选择链接以确认订阅,然后继续执行下一步骤。

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

发送可返回状态通知的命令

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

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

  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

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

  3. 选择 Run a command

  4. 对于 Command document,选择 Systems Manager 文档。

  5. 对于 Target instances,选择您要在其中运行命令的实例。如果您在此列表中未看到实例,则可能未针对 Run Command 正确地配置实例。有关更多信息,请参阅 Systems Manager 先决条件

  6. 在 Systems Manager 文档的必填字段中输入信息。在 SNS Notifications 部分中,选择 Enable SNS notifications

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

  8. SNS Topic 字段中,键入或粘贴之前创建的 Amazon SNS ARN。

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

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

  11. 选择 Run

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

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

  1. 打开 AWS CLI。

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

    Copy
    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

    例如

    Copy
    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 参考