

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

# 了解 State Manager 的工作方式
<a name="state-manager-about"></a>

State Manager（AWS Systems Manager 中的一项工具）是一项安全并且可扩展的服务，可以自动将[混合和多云](operating-systems-and-machine-types.md#supported-machine-types)基础设施中的托管式节点保持在定义的状态。

State Manager 运行方式如下：

**1. 确定要应用于 AWS 资源的状态。**  
是否要确保您的托管式节点已配置特定应用程序，如防病毒或防恶意软件应用程序？ 是否要自动执行更新 SSM Agent 或其他 AWS 软件包（如 `AWSPVDriver`）的过程？ 是否需要确保特定端口已关闭或打开？ 要开启使用 State Manager，请确定要应用于 AWS 资源的状态。要应用的状态可决定您使用哪个 SSM 文档来创建 State Manager 关联。  
State Manager *关联*是指分配给 AWS 资源的配置。该配置定义要在资源上保持的状态。例如，关联可以指定必须在托管式节点上安装并运行防病毒软件，或必须关闭特定端口。  
关联指定了何时应用关联的配置和目标的计划。例如，防病毒软件的关联可能会每天在 AWS 账户中的所有托管式节点上运行一次。如果该软件未安装在节点上，则关联可以指示 State Manager 安装该软件。如果已安装该软件，但未运行服务，则关联可以指示 State Manager 开启服务。

**2. 确定预配置的 SSM 文档能否帮助您在 AWS 资源上创建所需的状态。**  
Systems Manager 包含几十个预先配置的 SSM 文档，可用来创建关联。预先配置的文档已准备就绪，可执行常见任务，例如安装应用程序、配置 Amazon CloudWatch 、运行 AWS Systems Manager 自动化、运行 PowerShell 和 Shell 脚本、将托管式节点加入 Active Directory 的目录服务域等。  
您可以在 [Systems Manager 控制台](https://console.aws.amazon.com/systems-manager/documents)查看所有 SSM 文档。您可以选择文档的名称以了解更多有关每个文档的详情。以下是两个示例：[https://console.aws.amazon.com/systems-manager/documents/AWS-ConfigureAWSPackage/description](https://console.aws.amazon.com/systems-manager/documents/AWS-ConfigureAWSPackage/description) 和 [https://console.aws.amazon.com/systems-manager/documents/AWS-InstallApplication/description](https://console.aws.amazon.com/systems-manager/documents/AWS-InstallApplication/description)。

**3. 创建关联。**  
您可以使用 Systems Manager 控制台、AWS Command Line Interface(AWS CLI)，AWS Tools for Windows PowerShell (Tools for Windows PowerShell) 或 Systems Manager API 创建关联。当创建关联时，需要指定以下信息：  
+ 关联的名称。
+ SSM 文档的参数（例如，要在节点上安装的应用程序或要运行的脚本的路径）。
+ 关联目标。您可以通过指定标签、选择单个节点 ID 或在 AWS Resource Groups 中选择一个组来将托管式节点设为目标。您还可以将当前 AWS 区域 和 AWS 账户 中的*所有*托管式节点设为目标。如果目标包含超过 1000 个节点，系统将使用每小时节流机制。这意味着您可能会观察到状态聚合计数存在偏差，因为聚合过程每小时运行一次，且仅在节点的执行状态发生变化时才会运行。
+ 该关联用来代表您执行操作的角色。状态管理器将在向节点分派配置时代入此角色并调用所需的 API。有关设置自定义提供的角色的信息，请参阅[为 `AssociationDispatchAssumeRole` 设置角色](#setup-assume-role)。如果未提供任何角色，则将使用 [Systems Manager 的服务相关角色](https://docs.aws.amazon.com/systems-manager/latest/userguide/using-service-linked-roles.html)。
**注意**  
建议您定义一个自定义 IAM 角色，从而完全控制状态管理器在代表您执行操作时所拥有的权限。  
状态管理器中对服务相关角色的支持将逐步停用。将来，依赖服务相关角色的关联可能需要更新后才能继续正常运行。  
有关管理自定义提供的角色使用情况的信息，请参阅[使用 `ssm:AssociationDispatchAssumeRole` 管理 AssociationDispatchAssumeRole 的使用情况](#context-key-assume-role)。
+ 关于应用状态的时间或频率的计划。您可以指定 cron 或 rate 表达式。有关使用 cron 和 rate 表达式创建计划的更多信息，请参阅 [适用于关联的 Cron 和 Rate 表达式](reference-cron-and-rate-expressions.md#reference-cron-and-rate-expressions-association)。
**注意**  
State Manager 目前不支持在 cron 表达式中为关联指定月数。
运行命令以创建关联时，Systems Manager 将指定的信息（计划、目标、SSM 文档和参数）绑定到目标资源。当系统尝试访问所有目标并*立即* 应用关联中指定的状态时，关联的状态最初会显示“待处理”。  
如果您创建计划在之前的关联仍在运行时运行的新关联，那么之前的关联将超时，系统会运行新关联。
Systems Manager 会报告在资源中创建关联之请求的状态。您可以在控制台中或（对于托管式节点）使用 [DescribeInstanceAssociationsStatus](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeInstanceAssociationsStatus.html) API 操作查看状态详细信息。如果在创建关联时选择将命令输出写入到 Amazon Simple Storage Service (Amazon S3)，则还可以在指定的 Amazon S3 存储桶中查看此输出。  
有关更多信息，请参阅 [在 Systems Manager 中使用关联。](state-manager-associations.md)。  
在关联运行期间由 SSM 文档发起的 API 操作未登录 AWS CloudTrail。

**4. 监控并更新。**  
创建关联之后，State Manager 根据关联中定义的计划重新应用配置。您可以在控制台的 [State Manager 页面](https://console.aws.amazon.com/systems-manager/state-manager)上或通过直接调用在您创建关联时由 Systems Manager 生成的关联 ID 来查看关联的状态。有关更多信息，请参阅 [查看关联历史记录](state-manager-associations-history.md)。您可以更新您的关联文档并根据需要重新应用它们。您也可以创建多个关联版本。有关更多信息，请参阅 [编辑和创建关联的新版本](state-manager-associations-edit.md)。

## 了解何时将关联应用于资源
<a name="state-manager-about-scheduling"></a>

在创建关联时，您需要指定用于定义配置的 SSM 文档、目标资源列表，以及应用配置的计划。默认情况下，State Manager 在您创建关联时运行该关联，然后根据您的计划运行该关联。State Manager 还会尝试在以下情况下运行关联：
+ **关联编辑** – State Manager 在用户编辑并将其更改保存到以下任何关联字段 `DOCUMENT_VERSION`、`PARAMETERS`、`SCHEDULE_EXPRESSION`、`OUTPUT_S3_LOCATION` 中后运行关联。
+ **文档编辑** – State Manager 在用户编辑并将更改保存到用于定义关联的配置状态的 SSM 文档中后运行关联。具体来说，关联在对文档进行以下编辑之后运行：
  + 用户指定了一个新的 `$DEFAULT` 文档版本，该关联使用 `$DEFAULT` 版本创建。
  + 用户更新文档，然后使用 `$LATEST` 版本创建了关联。
  + 用户删除创建关联时指定的文档。
+ **手动启动** – State Manager 在用户从 Systems Manager 控制台启动或以编程的方式启动时运行关联。
+ **目标更改** – State Manager 在目标节点上发生以下任何活动后运行关联：
  + 托管式节点第一次联机。
  + 托管式节点在错过了计划的关联运行后联机。
  + 托管式节点被停止超过 30 天后联机。

     
**注意**  
State Manager不跨AWS 账户监视关联中使用的文档或包。如果您在一个账户中更新文档或包，则该更新不会导致在第二个账户中运行关联。您必须在第二个账户中手动运行关联。

**防止关联在目标更改时运行**  
在某些情况下，您可能不希望关联在由托管节点组成的目标发生变化时运行，而只根据其指定的计划运行。
**注意**  
运行自动化运行手册会产生费用。如果与自动化运行手册的关联以您账户中的所有实例为目标，并且您定期启动大量实例，则运行手册将在启动时在每个实例上运行。这可能会导致自动化费用上升。

  要防止某个关联在该关联的目标发生更改时运行，请选中**仅在下一个指定的 cron 间隔内应用关联**复选框。此复选框位于**创建关联**和**编辑关联**页面的**指定计划**区域。

  此选项适用于包含自动化运行手册或 SSM 文档的关联。

## 关于使用自动化运行手册进行目标更新
<a name="runbook-target-updates"></a>

为了在检测到新的目标节点时应用使用自动化运行手册创建的关联，必须满足下面的条件：
+ 关联必须由[Quick Setup](systems-manager-quick-setup.md)配置创建。Quick Setup是 AWS Systems Manager 中的一项工具。目前不支持由其他进程创建的关联。
+ 自动化运行手册必须明确针对资源类型 `AWS::EC2::Instance` 或 `AWS::SSM::ManagedInstance`。
+ 关联必须同时指定参数和目标。

  在控制台中，当您选择一个速率控制执行时，系统会显示**参数**和**目标**字段。  
![\[控制台中显示了用于速率控制执行的参数和目标选项\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/sm_Rate_control_execution_options.png)

  当您使用 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociation.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociation.html)、[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociationBatch.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateAssociationBatch.html) 或 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateAssociation.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateAssociation.html) API 操作时，您可以使用 `AutomationTargetParameterName` 和 `Targets` 输入指定这些值。在每个 API 操作中，您还可以通过将 `ApplyOnlyAtCronInterval` 参数设置为 `true`，防止关联在目标每次更改时运行。

  有关使用控制台来控制关联何时运行的信息，包括避免自动化执行成本意外高昂的详细信息，请参阅[了解何时将关联应用于资源](#state-manager-about-scheduling)。

## 为 `AssociationDispatchAssumeRole` 设置角色
<a name="setup-assume-role"></a>

要设置状态管理器为了代表您执行操作而将代入的自定义分派代入角色，这些角色应信任 `ssm.amazonaws.com` 并具有调用 `ssm:SendCommand` 或 `ssm:StartAutomationExecution` 所需的权限（具体取决于关联使用案例）。

示例信任策略：

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

## 使用 `ssm:AssociationDispatchAssumeRole` 管理 AssociationDispatchAssumeRole 的使用情况
<a name="context-key-assume-role"></a>

对于状态管理器为了代表您执行操作而将代入的自定义分派代入角色，要管理其使用情况，请使用 `ssm:AssociationDispatchAssumeRole` 条件键。此条件用于控制是否可以在不指定自定义分派代入角色的情况下创建或更新关联。

在以下示例策略中，`"Allow"` 语句仅在指定了 `AssociationDispatchAssumeRole` 参数时才向该关联授予创建和更新 API 的权限。如果 API 请求中没有此参数，则此策略不会授予创建或更新关联的权限：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:CreateAssociation",
                "ssm:UpdateAssociation",
                "ssm:CreateAssociationBatch"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ssm:AssociationDispatchAssumeRole": "*"
                }
            }
        }
    ]
}
```