

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 使用 Amazon SNS 通知监控 Systems Manager 状态更改
<a name="monitoring-sns-notifications"></a>

您可以配置 Amazon Simple Notification Service（Amazon SNS），令其发送与使用 Run Command 或 Maintenance Windows（都是 AWS Systems Manager 中的工具）发送的命令的状态有关的通知。Amazon SNS 协调并管理向订阅 Amazon SNS 主题的客户端或端点发送和传输通知。您可以在命令更改为新状态或特定状态（例如 *Failed (已失败)* 或 *Timed Out (已超时)*）时收到通知。如果您将一条命令发送给多个节点，则对于发送给特定节点的命令的每个副本，您都可以收到通知。每个副本称为一个*调用*。

Amazon SNS 能够以 HTTP 或 HTTPS POST 以及电子邮件（SMTP，纯文本或 JSON 格式）的形式传输通知，或将通知作为消息发布到 Amazon Simple Queue Service (Amazon SQS) 队列。有关更多信息，请参阅 *Amazon Simple Notification Service Developer Guide* 中的[什么是 Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/)。有关由 Run Command 和 Maintenance Windows 提供的 Amazon SNS 通知中包括的 JSON 数据的结构示例，请参阅 [适用于 AWS Systems Manager 的 Amazon SNS 通知示例](monitoring-sns-examples.md)。

**重要**  
请注意以下重要信息。  
不支持 Amazon Simple Notification Service FIFO 主题。
聊天应用程序中的 Amazon Q 开发者版不支持使用 Amazon SNS 监控 Systems Manager。若想使用聊天应用程序中的 Amazon Q 开发者版来监控 Systems Manager，则必须将其与 Amazon EventBridge 一起使用。有关使用 EventBridge 监控 Systems Manager 的信息，请参阅[使用 Amazon EventBridge 监控 Systems Manager 事件](monitoring-eventbridge-events.md)。有关聊天应用程序中的 Amazon EventBridge 和 Amazon Q 开发者版的信息，请参阅《聊天应用程序中的 Amazon Q 开发者版管理员指南》**中的[教程：创建向聊天应用程序中的 Amazon Q 开发者版发送通知的 EventBridge 规则](https://docs.aws.amazon.com/chatbot/latest/adminguide/create-eventbridge-rule.html)。

## 为 AWS Systems Manager 配置 Amazon SNS 通知
<a name="monitoring-sns-configure"></a>

注册到维护时段的 Run Command 和 Maintenance Windows 任务可为进入以下状态的命令任务发送 Amazon SNS 通知：
+ 正在进行
+ 成功
+ 已失败
+ 已超时
+ 已取消

有关导致命令进入以下状态之一的条件的信息，请参阅 [了解命令状态](monitor-commands.md)。

**注意**  
使用 Run Command 发送的命令还会报告 Canceling (正在取消) 和 Pending (待处理) 状态。Amazon SNS 通知不会捕获这些状态。

### 命令摘要 Amazon SNS 通知
<a name="monitoring-sns-configure-summary"></a>

如果您在维护时段中为 Amazon SNS 通知配置 Run Command 或 Run Command 任务，Amazon SNS 将发送摘要消息，其中包含以下信息。


****  

| 字段 | Type | 说明 | 
| --- | --- | --- | 
|  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  |  字符串  |  将请求发送到此特定节点的日期和时间。  | 
|  instanceIds  |  StringList  |  通过命令设为目标的节点。  如果 Run Command 任务直接将实例 ID 设为目标，则实例 ID 仅包含在摘要消息中。如果使用基于标签的目标设定发出 Run Command 任务，则实例 ID 不会包含在摘要消息中。   | 
|  status  |  字符串  |  命令的命令状态。  | 

### 基于调用的 Amazon SNS 通知
<a name="monitoring-sns-configure-invocation"></a>

如果您将一条命令发送给多个节点，则 Amazon SNS 可以发送有关该命令的每个副本或调用的消息。此类消息包含以下信息。


****  

| 字段 | Type | 说明 | 
| --- | --- | --- | 
|  eventTime  |  字符串  |  启动事件的时间。由于 Amazon SNS 不保证消息传输顺序，因此时间戳很重要。示例：2016-04-26T13:15:30Z   | 
|  documentName  |  字符串  |  用于运行此命令的 Systems Manager 文档（SSM 文档）的名称。  | 
|  requestedDateTime  |  字符串  |  将请求发送到此特定节点的日期和时间。  | 
|  commandId  |  字符串  |  在发送命令后由 Run Command 生成的 ID。  | 
|  instanceId  |  字符串  |  由命令设为目标的实例。  | 
|  status  |  字符串  |  此调用的命令状态。  | 

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

**注意**  
如果您没有为维护时段配置 Amazon SNS 通知，则可跳过本主题后面的“任务 5”。

**Topics**
+ [

### 命令摘要 Amazon SNS 通知
](#monitoring-sns-configure-summary)
+ [

### 基于调用的 Amazon SNS 通知
](#monitoring-sns-configure-invocation)
+ [

### 任务 1：创建并订阅 Amazon SNS 主题
](#monitoring-configure-sns)
+ [

### 任务 2：为 Amazon SNS 通知创建 IAM policy
](#monitoring-iam-policy)
+ [

### 任务 3：为 Amazon SNS 通知创建 IAM 角色
](#monitoring-iam-notifications)
+ [

### 任务 4：配置用户访问权限
](#monitoring-sns-passpolicy)
+ [

### 任务 5：将 iam:PassRole 策略附加到您的维护时段角色
](#monitoring-sns-passpolicy-mw)

### 任务 1：创建并订阅 Amazon SNS 主题
<a name="monitoring-configure-sns"></a>

Amazon SNS *主题*是一个通信渠道，注册到维护时段的 Run Command 和 Run Command 任务使用该渠道发送与命令的状态有关的通知。Amazon SNS 支持多种通信协议，包括 HTTP/S、电子邮件和其他 AWS 服务，如 Amazon Simple Queue Service（Amazon SQS）。要入门，我们建议您先从电子邮件协议开始。有关如何创建主题的信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[创建 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。

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

创建主题后，通过指定**终端节点**来订阅该主题。如果您选择了电子邮件协议，则终端节点即为您希望接收通知的电子邮件地址。有关如何订阅主题的更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[订阅 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

Amazon SNS 将从 *AWS Notifications* 向您指定的电子邮件地址发送确认电子邮件。打开这封电子邮件，然后选择 **Confirm subscription (确认订阅)** 链接。

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

### 任务 2：为 Amazon SNS 通知创建 IAM policy
<a name="monitoring-iam-policy"></a>

使用以下过程创建自定义 AWS Identity and Access Management (IAM) policy，该策略提供了启动 Amazon SNS 通知的权限。

**为 Amazon SNS 通知创建自定义 IAM policy**

1. 访问：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)，打开 IAM 控制台。

1. 在导航窗格中选择 **Policies**，然后选择 **Create Policy**。（如果显示 **Get Started (入门)** 按钮，请选择此按钮，然后选择 **Create Policy (创建策略)**。）

1. 选择 **JSON** 选项卡。

1. 根据 Amazon SNS 主题是否使用 AWS KMS 加密，将默认内容替换为以下内容之一：

------
#### [ SNS topic not encrypted ]

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:sns-topic-name"
           }
       ]
   }
   ```

------

   *region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   **account-id** 表示您的 AWS 账户的 12 位标识符，格式为 `123456789012`。

   *sns-topic-name* 表示要用于发布通知的 Amazon SNS 主题的名称。

------
#### [ SNS topic encrypted ]

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:sns-topic-name"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/kms-key-id"
           }
       ]
   }
   ```

------

   *region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   **account-id** 表示您的 AWS 账户的 12 位标识符，格式为 `123456789012`。

   *sns-topic-name* 表示要用于发布通知的 Amazon SNS 主题的名称。

   *kms-key-id* 表示 AWS KMS 中用于加密和解密主题的对称加密 KMS 密钥的 ID，格式为 `1234abcd-12ab-34cd-56ef-12345EXAMPLE`。

**注意**  
使用 AWS KMS 加密需要支付相应的费用。有关更多信息，请参阅《AWS Key Management Service Developer Guide**》中的 [Managing Amazon SNS encryption keys and costs](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)。

------

1. 选择**下一步：标签**。

1. （可选）添加一个或多个标签键值对，以组织、跟踪或控制此策略的访问权限。

1. 选择**下一步：审核**。

1. 在 **Review policy (审核策略)** 页面上，对于 **Name (名称)**，输入内联策略的名称。例如：**my-sns-publish-permissions**。

1. （可选）对于 **Description (描述)**，输入策略的描述。

1. 选择 **Create policy (创建策略)**。

### 任务 3：为 Amazon SNS 通知创建 IAM 角色
<a name="monitoring-iam-notifications"></a>

使用以下过程为 Amazon SNS 通知创建 IAM 角色。Systems Manager 使用此服务角色启动 Amazon SNS 通知。在后续的所有过程中，此角色都称为 Amazon SNS IAM 角色。

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

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 选择 **AWS 服务** 角色类型，然后选择 Systems Manager。

1. 选择 Systems Manager 应用场景。然后选择**下一步**。

1. 在 **Attach permissions policies (附加权限策略)** 页面上，选中您在“任务 2”中创建的自定义策略名称左侧的方框。例如：**my-sns-publish-permissions**。

1. （可选）设置[权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。这是一项高级特征，可用于服务角色，但不可用于服务相关角色。

   展开 **Permissions boundary**（权限边界）部分，然后选择 **Use a permissions boundary to control the maximum role permissions**（使用权限边界控制最大角色权限）。IAM 包括您的账户中的 AWS 托管策略和客户托管策略的列表。选择要用于权限边界的策略，或选择**创建策略**以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息，请参阅 *IAM 用户指南* 中的[创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。在您创建策略后，关闭该选项卡并返回到您的原始选项卡，以选择要用于权限边界的策略。

1. 选择 **Next**（下一步）。

1. 如果可能，输入有助于识别该角色的作用的角色名称或角色名称后缀。角色名称在您的 AWS 账户 内必须是唯一的。名称不区分大小写。例如，您无法同时创建名为 **PRODROLE** 和 **prodrole** 的角色。由于多个单位可能引用该角色，角色创建完毕后无法编辑角色名称。

1. （可选）对于 **Description**（描述），输入新角色的描述。

1. 在 **Step 1: Select trusted entities**（步骤 1：选择可信实体）或 **Step 2: Select permissions**（步骤 2：选择权限）部分中的 **Edit**（编辑），以编辑角色的用户案例和权限。

1. （可选）通过以键值对的形式附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息，请参阅 *《IAM 用户指南》* 中的[标记 IAM 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

1. 检查角色，然后选择 **Create role**。

1. 选择此角色的名称，然后复制或记下 **Role ARN**（角色 ARN）的值。在发送配置为返回 Amazon SNS 通知的命令时，将使用此角色的 Amazon Resource Name（ARN）。

1. 使 **Summary (摘要)** 页面保持打开状态。

### 任务 4：配置用户访问权限
<a name="monitoring-sns-passpolicy"></a>

如果为 IAM 实体（用户、角色或组）分配了管理员权限，则该用户或角色将有权访问 Run Command 和 Maintenance Windows（都是 AWS Systems Manager 中的工具）。

对于没有管理员权限的实体，管理员必须向 IAM 实体授予以下权限：
+ `AmazonSSMFullAccess` 托管策略，或提供类似权限的策略。
+ 已在 [任务 3：为 Amazon SNS 通知创建 IAM 角色](#monitoring-iam-notifications) 中为角色创建的 `iam:PassRole` 权限。例如：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/sns-role-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ssm.amazonaws.com"
                }
            }
        }
    ]
}
```

------

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

**配置用户访问权限并将 `iam:PassRole` 策略附加到用户账户**

1. 在 IAM 导航窗格中，选择 **Users (用户)**，然后选择您要配置的用户账户。

1. 在 **Permissions (权限)** 选项卡上的策略列表中，验证并确保其中列出了 **AmazonSSMFullAccess** 策略，或者存在授予账户访问 Systems Manager 权限的类似策略。

1. 选择 **Add inline policy (添加内联策略)**。

1. 在 **Create policy (创建策略)** 页面上，选择 **Visual editor (可视化编辑器)** 选项卡。

1. 选择 **Choose a service (选择服务)**，然后选择 **IAM**。

1. 对于 **Actions**（操作），在 **Filter actions**（筛选操作）文本框中，输入 **PassRole**，然后选中 **PassRole** 旁的复选框。

1. 对于 **Resources**（资源），验证已选择 **Specific**（特定），然后选择 **Add ARN**（添加 ARN）。

1. 在 **Specify ARN for role**（为角色指定 ARN）字段中，粘贴在“任务 3”结束时复制的 Amazon SNS IAM 角色 ARN。系统会自动填充 **Account (账户)** 和 **Role name with path (具有路径的角色名称)** 字段。

1. 选择 **Add (添加)**。

1. 选择**查看策略**。

1. 在 **Review Policy**（检查策略）页面上输入一个名称，然后选择 **Create Policy**（创建策略）。

### 任务 5：将 iam:PassRole 策略附加到您的维护时段角色
<a name="monitoring-sns-passpolicy-mw"></a>

当您向某一维护时段注册 Run Command 任务时，将指定服务角色 Amazon Resource Name (ARN)。Systems Manager 将使用此服务角色来运行注册到该维护时段的任务。要为已注册的 Run Command 任务配置 Amazon SNS 通知，请将 `iam:PassRole` 策略附加到指定的维护时段服务角色。如果您不打算为 Amazon SNS 通知配置已注册的任务，则可以跳过此任务。

`iam:PassRole` 策略允许 Maintenance Windows 服务角色将在“任务 3”中创建的 Amazon SNS IAM 角色传递到 Amazon SNS 服务。以下过程显示了如何将 `iam:PassRole` 策略附加到 Maintenance Windows 服务角色。

**注意**  
使用您的维护时段的自定义服务角色发送与已注册的 Run Command 任务有关的通知。有关信息，请参阅[设置 Maintenance Windows](setting-up-maintenance-windows.md)。  
如果您需要为维护时段任务创建自定义服务角色，请参阅[设置 Maintenance Windows](setting-up-maintenance-windows.md)。

**将 `iam:PassRole` 策略附加到 Maintenance Windows 角色**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **Roles (角色)**，然后选择在“任务 3”中创建的 Amazon SNS IAM 角色。

1. 复制或记下 **Role ARN (角色 ARN)**，然后返回到 IAM 控制台的 **Roles (角色)** 部分。

1. 从 **Role name**（角色名称）列表中选择您创建的自定义 Maintenance Windows 服务角色。

1. 在 **Permissions**（权限）选项卡中，验证是否列出了 `AmazonSSMMaintenanceWindowRole` 策略，或者存在可向 Systems Manager API 授予维护时段权限的类似策略。如果没有，则依次选择**添加权限、附加策略**，以附加此策略。

1. 选择 **Add permissions, Create inline policy**（添加权限、创建内联策略）。

1. 选择 **Visual editor (可视化编辑器)** 选项卡。

1. 对于 **Service (服务)**，请选择 **IAM**。

1. 对于 **Actions**（操作），在 **Filter actions**（筛选操作）文本框中，输入 **PassRole**，然后选中 **PassRole** 旁的复选框。

1. 对于 **Resources (资源)**，请选择 **Specific (特定)**，然后选择 **Add ARN (添加 ARN)**。

1. 在 **Specify ARN for role (为角色指定 ARN)** 框中，粘贴在“任务 3”中创建的 Amazon SNS IAM 角色的 ARN，然后选择 **Add (添加)**。

1. 选择**查看策略**。

1. 在**审核策略**页面上，为 `PassRole` 策略指定名称，然后选择**创建策略**。

# 适用于 AWS Systems Manager 的 Amazon SNS 通知示例
<a name="monitoring-sns-examples"></a>

您可以配置 Amazon Simple Notification Service（Amazon SNS），令其发送与使用 Run Command 或 Maintenance Windows（都是 AWS Systems Manager 中的工具）发送的命令的状态有关的通知。

**注意**  
本指南不解决如何为 Run Command 或 Maintenance Windows 配置通知的问题。有关将 Run Command 或 Maintenance Windows 配置为发送与命令的状态有关的 Amazon SNS 通知的信息，请参阅 [为 AWS Systems Manager 配置 Amazon SNS 通知](monitoring-sns-notifications.md#monitoring-sns-configure)。

以下示例显示了为 Run Command 或 Maintenance Windows 配置后，Amazon SNS 通知返回的 JSON 输出的结构。

**使用实例 ID 目标设定的命令摘要消息的 JSON 输出示例**

```
{
    "commandId": "a8c7e76f-15f1-4c33-9052-0123456789ab",
    "documentName": "AWS-RunPowerShellScript",
    "instanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef0"
    ],
    "requestedDateTime": "2019-04-25T17:57:09.17Z",
    "expiresAfter": "2019-04-25T19:07:09.17Z",
    "outputS3BucketName": "amzn-s3-demo-bucket",
    "outputS3KeyPrefix": "runcommand",
    "status": "InProgress",
    "eventTime": "2019-04-25T17:57:09.236Z"
}
```

**使用基于标签的目标设定的命令摘要消息的 JSON 输出示例**

```
{
    "commandId": "9e92c686-ddc7-4827-b040-0123456789ab",
    "documentName": "AWS-RunPowerShellScript",
    "instanceIds": [],
    "requestedDateTime": "2019-04-25T18:01:03.888Z",
    "expiresAfter": "2019-04-25T19:11:03.888Z",
    "outputS3BucketName": "",
    "outputS3KeyPrefix": "",
    "status": "InProgress",
    "eventTime": "2019-04-25T18:01:05.825Z"
}
```

**调用消息的 JSON 输出示例**

```
{
    "commandId": "ceb96b84-16aa-4540-91e3-925a9a278b8c",
    "documentName": "AWS-RunPowerShellScript",
    "instanceId": "i-1234567890abcdef0",
    "requestedDateTime": "2019-04-25T18:06:05.032Z",
    "status": "InProgress",
    "eventTime": "2019-04-25T18:06:05.099Z"
}
```

# 使用 Run Command 发送返回状态通知的命令
<a name="monitoring-sns-rc-send"></a>

以下过程显示了如何使用 AWS Command Line Interface（AWS CLI）或 AWS Systems Manager 控制台通过配置为返回状态通知的 Run Command（AWS Systems Manager 中的一项工具）来发送命令。

## 发送返回通知的 Run Command（控制台）
<a name="monitoring-sns-rc-send-console"></a>

可以使用以下过程，通过配置为使用 Systems Manager 控制台返回状态通知的 Run Command 来发送命令。

**发送返回通知的命令（控制台）**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Run Command**。

1. 选择 **Run command（运行命令）**。

1. 在**命令文档**列表中，请选择 Systems Manager 文档。

1. 在 **Command parameters (命令参数)** 部分中，为必需的参数指定值。

1. 在 **Targets**（目标）部分中，通过指定标签、手动选择实例或边缘设备或指定资源组，选择要在其上运行此操作的托管式节点。
**提示**  
如果未列出您希望看到的托管式节点，请参阅 [排除托管式节点可用性的问题](fleet-manager-troubleshooting-managed-nodes.md) 以获取故障排除技巧。

1. 对于 **Other parameters（其他参数）**：
   + 对于 **Comment（注释）**，请输入有关此命令的信息。
   + 对于 **Timeout (seconds) (超时 (秒))**，请指定在整个命令执行失败之前系统等待的秒数。

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 AWS Resource Groups 来选择目标，但不确定有多少个托管式节点已被设为目标，则可通过指定百分比来限制可同时运行该文档的目标的数量。
   + 对于 **Error threshold**（错误阈值），请指定当命令在一定数量或百分比的节点上失败后，何时在其他托管式节点上停止运行该命令。例如，如果您指定三个错误，Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理该命令的托管式节点也可能发送错误。

1. （可选）对于 **输出选项**，要将命令输出保存到文件，请选中 **将命令输出写入 S3 存储桶** 框。在输入框中输入存储桶和前缀（文件夹）名称。
**注意**  
授予将数据写入 S3 存储桶的能力的 S3 权限，是分配给实例的实例配置文件（适用于 EC2 实例）或 IAM 服务角色（混合激活的计算机）的权限，而不是执行此任务的 IAM 用户的权限。有关更多信息，请参阅[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)或[为混合环境创建 IAM 服务角色](hybrid-multicloud-service-role.md)。此外，如果指定的 S3 存储桶位于不同的 AWS 账户 中，请确保与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

1. 在 **SNS Notifications (SNS 通知)** 部分中，选择 **Enable SNS notifications (启用 SNS 通知)**。

1. 对于 **IAM role**（IAM 角色），选择您在[使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)的“任务 3”中创建的 Amazon SNS IAM 角色 ARN。

1. 对于 **SNS topic (SNS 主题)**，请输入要使用的 Amazon SNS 主题 ARN。

1. 对于 **Event notifications (事件通知)**，请选择要针对其接收通知的事件。

1. 对于 **Change notifications**（更改通知），选择 **Command status changes**（命令状态更改）以仅接收命令摘要的通知，或者 **Command status on each instance changes**（每个实例的命令状态更改）以接收发送到多个节点的命令的每个副本。

1. 选择**运行**。

1. 检查您的电子邮件以查找来自 Amazon SNS 的邮件，然后打开该电子邮件。Amazon SNS 可能需要几分钟来发送该电子邮件。

## 发送返回通知的 Run Command (CLI)
<a name="monitoring-sns-rc-send-cli"></a>

可以使用以下过程，通过配置为使用 AWS CLI 返回状态通知的 Run Command 来发送命令。

**发送返回通知的命令 (CLI)**

1. 打开 AWS CLI。

1. 在以下命令中指定参数，以基于托管式节点 ID 设定目标。

   ```
   aws ssm send-command --instance-ids "ID-1, ID-2" --document-name "Name" --parameters '{"commands":["input"]}' --service-role "SNSRoleARN" --notification-config '{"NotificationArn":"SNSTopicName","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

   以下为示例。

   ```
   aws ssm send-command --instance-ids "i-02573cafcfEXAMPLE, i-0471e04240EXAMPLE" --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["Get-Process"]}' --service-role "arn:aws:iam::111122223333:role/SNS_Role" --notification-config '{"NotificationArn":"arn:aws:sns:us-east-1:111122223333:SNSTopic","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

**替代命令**  
在以下命令中指定参数，以使用标签设定托管实例目标。

   ```
   aws ssm send-command --targets "Key=tag:TagName,Values=TagKey" --document-name "Name" --parameters '{"commands":["input"]}' --service-role "SNSRoleARN" --notification-config '{"NotificationArn":"SNSTopicName","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

   以下为示例。

   ```
   aws ssm send-command --targets "Key=tag:Environment,Values=Dev" --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["Get-Process"]}' --service-role "arn:aws:iam::111122223333:role/SNS_Role" --notification-config '{"NotificationArn":"arn:aws:sns:us-east-1:111122223333:SNSTopic","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

1. 按 **Enter** 键。

1. 检查您的电子邮件以查找来自 Amazon SNS 的邮件，然后打开该电子邮件。Amazon SNS 可能需要几分钟来发送该电子邮件。

有关更多信息，请参阅**《AWS CLI 命令参考》中的 [https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html)。

# 使用维护时段发送返回状态通知的命令
<a name="monitoring-sns-mw-register"></a>

以下过程显示了如何使用 AWS Systems Manager 控制台或 AWS Command Line Interface（AWS CLI）将 Run Command 任务注册到维护时段。Run Command 是 AWS Systems Manager 中的一项工具。这些过程还介绍了如何将 Run Command 任务配置为返回状态通知。

**开始前的准备工作**  
如果您尚未创建维护时段或注册目标，请参阅 [使用控制台创建和管理维护时段](sysman-maintenance-working.md)，了解有关如何创建维护时段和注册目标的步骤。

要接收来自 Amazon Simple Notification Service (Amazon SNS) 服务的通知，请将 `iam:PassRole` 策略附加到在已注册的任务中指定的 Maintenance Windows 服务角色。如果您尚未向 Maintenance Windows 服务角色添加 `iam:PassRole` 权限，请参阅 [任务 5：将 iam:PassRole 策略附加到您的维护时段角色](monitoring-sns-notifications.md#monitoring-sns-passpolicy-mw)。

## 将返回通知的 Run Command 任务注册到维护时段（控制台）
<a name="monitoring-sns-mw-register-console"></a>

可以使用以下过程，借助 Systems Manager 控制台将配置为返回状态通知的 Run Command 任务注册到您的维护时段。

**将返回通知的 Run Command 任务注册到维护时段（控制台）**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Maintenance Windows**。

1. 选择您要为其注册配置为发送 Amazon Simple Notification Service (Amazon SNS) 通知的 Run Command 任务的维护时段。

1. 选择 **Actions (操作)**，然后选择 **Register Run command task (注册运行命令任务)**。

1. （可选）在 **Name (名称)** 字段中，输入任务的名称。

1. （可选）在 **Description (描述)** 字段中，输入描述。

1. 对于 **Command document**（命令文档），选择一个命令文档。

1. 对于 **Task priority (任务优先级)**，指定此任务的优先级。零 (`0`) 表示最高优先级。维护时段内的任务按优先级顺序计划。具有相同优先级的任务则并行计划。

1. 在 **Targets (目标)** 部分中，选择已注册的目标组或选择未注册的目标。

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 AWS Resource Groups 来选择目标，但不确定有多少个托管式节点已被设为目标，则可通过指定百分比来限制可同时运行该文档的目标的数量。
   + 对于 **Error threshold**（错误阈值），请指定当命令在一定数量或百分比的节点上失败后，何时在其他托管式节点上停止运行该命令。例如，如果您指定三个错误，Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理该命令的托管式节点也可能发送错误。

1. 在 **IAM service role (IAM 服务角色)** 区域中，选择对 SNS 角色具有 `iam:PassRole` 权限的 Maintenance Windows 服务角色。
**注意**  
将 `iam:PassRole` 权限添加到 Maintenance Windows 角色，以允许 Systems Manager 将 SNS 角色传递给 Amazon SNS。如果您尚未添加 `iam:PassRole` 权限，请参阅主题[使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)中的“任务 5”。

1. （可选）对于 **Output options (输出选项)**，要将命令输出保存到文件，请选中 **Enable writing output to S3 (启用将输出写入 S3)** 方框。在方框中输入存储桶和前缀（文件夹）名称。
**注意**  
授予将数据写入 S3 存储桶的能力的 S3 权限，是分配给托管式节点的实例配置文件的权限，而不是执行此任务的 IAM 用户的权限。有关更多信息，请参阅[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)或[为混合环境创建 IAM 服务角色](hybrid-multicloud-service-role.md)。此外，如果指定的 S3 存储桶位于不同的 AWS 账户 中，请确认与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

1. 在 **SNS notifications (SNS 通知)** 部分中，执行以下操作：
   + 选择 **Enable SNS Notifications (启用 SNS 通知)**。
   + 对于 **IAM role (IAM 角色)**，请选择您在[使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)的“任务 3”中创建的 Amazon SNS IAM 角色 Amazon Resource Name (ARN)，以启动 Amazon SNS。
   + 对于 **SNS topic (SNS 主题)**，请输入要使用的 Amazon SNS 主题 ARN。
   + 对于 **Event type (事件类型)**，请选择要针对其接收通知的事件。
   + 对于 **Notification type**（通知类型），请选择针对发送给多个节点（调用）或命令摘要的命令的每个副本接收通知。

1. 在 **Parameters (参数)** 部分中，根据您选择的命令文档输入所需的参数。

1. 选择**注册运行命令任务**。

1. 在下次运行维护时段后，检查您的电子邮件以查找来自 Amazon SNS 的邮件，然后打开该电子邮件。Amazon SNS 可能需要几分钟来发送该电子邮件。

## 将返回通知的 Run Command 任务注册到维护时段 (CLI)
<a name="monitoring-sns-mw-register-cli"></a>

可以使用以下过程，借助 AWS CLI 将配置为返回状态通知的 Run Command 任务注册到维护时段。

**将返回通知的 Run Command 任务注册到维护时段 (CLI)**
**注意**  
为了更好地管理您的任务选项，此过程使用命令选项 `--cli-input-json`，其选项值存储在 JSON 文件中。

1. 在您的本地计算机上，创建一个名为 `RunCommandTask.json` 的文件。

1. 将以下内容粘贴到该文件中。

   ```
   {
       "Name": "Name",
       "Description": "Description",
       "WindowId": "mw-0c50858d01EXAMPLE",
       "ServiceRoleArn": "arn:aws:iam::account-id:role/MaintenanceWindowIAMRole",
       "MaxConcurrency": "1",
       "MaxErrors": "1",
       "Priority": 3,
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskType": "RUN_COMMAND",
       "TaskArn": "CommandDocumentName",
       "TaskInvocationParameters": {
           "RunCommand": {
               "Comment": "Comment",
               "TimeoutSeconds": 3600,
               "NotificationConfig": {
                   "NotificationArn": "arn:aws:sns:region:account-id:SNSTopicName",
                   "NotificationEvents": [
                       "All"
                   ],
                   "NotificationType": "Command"
               },
               "ServiceRoleArn": "arn:aws:iam::account-id:role/SNSIAMRole"
           }
       }
   }
   ```

1. 将示例值替换为有关您自己的资源的信息。

   如果您想使用本示例中略去的选项，您也可以恢复它们。例如，您可以将命令输出保存到 S3 存储桶。

   有关更多信息，请参阅《AWS CLI 命令参考》**中的 [https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html)。

1. 保存该文件。

1. 在您的本地计算机上保存该文件的目录中，运行以下命令。

   ```
   aws ssm register-task-with-maintenance-window --cli-input-json file://RunCommandTask.json
   ```
**重要**  
务必在文件名前包含 `file://`。此命令中需要该项。

   如果成功，该命令将返回类似以下内容的信息。

   ```
   {
       "WindowTaskId": "j2l8d5b5c-mw66-tk4d-r3g9-1d4d1EXAMPLE"
   }
   ```

1. 在下次执行维护时段后，检查您的电子邮件以查找来自 Amazon SNS 的邮件，然后打开该电子邮件。Amazon SNS 可能需要几分钟来发送该电子邮件。

有关从命令行为维护时段注册任务的更多信息，请参阅[将任务注册到维护时段](mw-cli-tutorial-tasks.md)。