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

使用 状态管理器 通过触发器运行 Automation 工作流程

您可以通过创建与 Automation 文档的 状态管理器 关联来启动 Automation 工作流程。通过创建与 Automation 文档的 状态管理器 关联,您可以定位不同类型的 AWS 资源。例如,您可以创建强制 AWS 资源进入预期状态的关联,包括:

  • 将 Systems Manager 角色附加到 Amazon EC2 实例以使其成为托管实例

  • 对安全组强制实施所需的入口和出口规则。

  • 创建或删除 Amazon DynamoDB (DynamoDB) 备份。

  • 创建或删除 Amazon Elastic Block Store (Amazon EBS) 快照。

  • 禁用 Amazon Simple Storage Service (Amazon S3) 存储桶上的读取和写入权限。

  • 启动、重新启动或停止托管实例和 Amazon Relational Database Service (Amazon RDS) 实例。

  • 补丁 Windows 和 Linux AMI。

开始前的准备工作

请注意以下重要详细信息,然后再使用 状态管理器 运行 Automation 工作流程。

  • 您必须先验证是否已为 Systems Manager Automation 配置了权限,然后才能创建运行 Automation 文档的关联。有关更多信息,请参阅 Automation 入门

  • 运行 Automation 文档的 状态管理器 关联将计入在您的 AWS 账户中并发运行的自动化的最大数。一次最多可以运行 25 个并发自动化。

  • Systems Manager 自动创建服务相关角色,以使 状态管理器 有权调用 Systems Manager Automation API 操作。如果您需要,可以通过从 AWS CLI 运行以下命令自行创建服务相关角色。

    aws iam create-service-linked-role --aws-service-name ssm.amazonaws.com

    有关服务相关角色的更多信息,请参阅Systems Manager 的服务相关角色权限

创建运行 Automation 工作流程的关联(控制台)

以下过程介绍了如何使用 Systems Manager 控制台创建运行 Automation 工作流程的 状态管理器 关联。

创建运行 Systems Manager Automation 工作流程(控制台)的 状态管理器 关联

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

  2. 在导航窗格中,选择 状态管理器,然后选择 Create association (创建关联)

  3. Name (名称) 字段中指定名称。您可以自由选择,但我们建议您这样做。

  4. Document (文档) 列表中,选择文档。使用搜索栏来筛选 Document type : Equal : Automation 文档。要查看更多 Automation 文档,请使用搜索栏右侧的数字。

    注意

    可以通过选择文档名称来查看有关文档的信息。

  5. 选择 Simple execution (简单执行) 来通过指定一个或多个目标的资源 ID 在这些目标上运行自动化。选择 Rate control (速率控制) 可以通过指定设置目标选项(如标签或 AWS Resource Groups)来跨一组 AWS 资源运行自动化。您还可以通过指定并发和错误阈值来控制跨各个资源的自动化的执行。

    如果您选择 Rate control (速率控制)Targets (目标) 部分将显示。

  6. Targets (目标) 部分,选择一种设置资源目标的方法。

    1. (必需)在 Parameter (参数) 列表中,选择一个参数。Parameter (参数) 列表中的项目由此过程开始时选择的 Automation 文档中的参数确定。通过选择参数,可以定义在其上运行 Automation 工作流程的资源的类型。

    2. (必需)在 Targets (目标) 列表中,选择一种设置资源目标的方法。

      • 资源组:从 Resource Group (资源组) 列表中选择组的名称。有关在 Automation 文档中设置 AWS Resource Groups 目标的更多信息,请参阅 设置目标 AWS Resource Groups

      • 标签:在提供的字段中输入标签键和标签值(可选)。选择 Add。有关在 Automation 文档中设置标签目标的更多信息,请参阅 设置目标标签

      • 参数值:在 Input parameters (输入参数) 部分输入值。如果指定多个值,Systems Manager 将在指定的每个值上运行子 Automation 工作流程。

        例如,假设 Automation 文档包含 InstanceID 参数。如果在运行此 Automation 时将 InstanceID 参数值设置为目标,则 Systems Manager 会为指定的每个实例 ID 值运行一个子 Automation。当 Automation 完成每个指定实例的运行或执行失败时,父 Automation 完成。您最多可以将 50 个参数值设置为目标。有关在 Automation 文档中设置参数值目标的更多信息,请参阅 设置目标参数值

  7. Input parameters (输入参数) 部分,指定所需的输入参数。

    如果选择使用标签或资源组将资源设置为目标,则不需要选择 Input parameters (输入参数) 部分中的某些选项。例如,如果选择 AWS-RestartEC2Instance 文档,并且选择使用标签将实例设置为目标,则无需在 Input parameters (输入参数) 部分中指定或选择实例 ID。Automation 执行过程通过使用您指定的标签来定位要重新启动的实例。

    重要

    您必须在 AutomationAssumeRole 字段中指定角色 ARN。状态管理器 使用代入角色来调用 Automation 文档中指定的 AWS 服务并代表您运行 Automation 关联。有关更多信息,请参阅 通过使用 IAM 服务角色运行 Automation 工作流程

  8. 如果您希望定期运行关联,在 Specify schedule (指定计划) 部分,选择 On Schedule (按计划)。如果您选择此选项,则使用提供的选项使用 Cron 或 Rate 表达式创建计划。有关 状态管理器 的 Cron 和 Rate 表达式的更多信息,请参阅 适用于关联的 Cron 和 Rate 表达式

    注意

    Rate 表达式是运行 Automation 文档的 状态管理器 关联的首选计划机制。如果您达到了并发运行自动化的最大数,Rate 表达式会为运行关联提供更多灵活性。使用速率计划,Systems Manager 可以在收到并发自动化已达到最大数并已受限制通知后立即重试 Automation。

    如果您希望运行关联一次,请选择 No schedule (无计划)

  9. (可选)在 Rate Control (速率控制) 部分,选择 Concurrency (并发)Error threshold (错误阈值) 选项来控制跨各个 AWS 资源的 Automation 执行。

    1. Concurrency (并发) 部分中,选择一个选项:

      • 选择 targets (目标) 输入可同时运行 Automation 工作流程的目标的绝对数量。

      • 选择 percentage (百分比) 输入可同时运行 Automation 工作流程的目标集的百分比。

    2. Error threshold (错误阈值) 部分中,选择一个选项:

      • 选择 errors (错误) 输入 Automation 停止将工作流程发送到其他资源之前允许的错误的绝对数量。

      • 选择 percentage (百分比) 输入 Automation 停止将工作流程发送到其他资源之前允许的错误的百分比。

    有关使用 Automation 的目标和速率控制的更多信息,请参阅 运行使用目标和速率控制的 Automation 工作流程

  10. 选择创建关联

    重要

    在创建关联时,将针对指定目标立即运行关联。然后,关联基于您选择的 Cron 或 Rate 表达式运行。如果您选择了 No schedule (无计划),则关联不会再次运行。

创建运行 Automation 工作流程的关联 (CLI)

使用以下格式创建一个 AWS CLI 命令,该命令创建运行 Automation 工作流程的 状态管理器 关联。

注意

如果您使用 AWS CLI 创建关联,请使用 --Targets 参数定位关联的实例。请勿使用 --InstanceID 参数。--InstanceID 参数是一个旧参数。

aws ssm create-association --association-name AssociationName --targets Key=tag:TagKey,Values=TagValue --name DocumentName --parameters (if any) --automation-target-parameter-name (parameter to target) --schedule "cron_or_rate_expression"

以下示例在标有 "Environment,Linux" 的 Amazon EC2 实例上创建关联。该关联使用 AWS-StartEC2Instance 文档和指定的 Automation 代入角色,在每个星期一早上 7:00 启动目标实例。该关联在任意给定时间最多在 10 个实例上同时运行。此外,当错误计数超过 5 时,将在特定执行间隔内停止在更多实例上运行该关联。对于合规性报告,为该关联分配中等严重级别。

aws ssm create-association --association-name Start_EC2_Instances --targets Key=tag:Environment,Values=Linux --name AWS-StartEC2Instance --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AmazonSSMAutomationRole --automation-target-parameter-name InstanceId --schedule "cron(0 7 ? * MON *)" --max-errors "5" --max-concurrency "10" --compliance-severity "MEDIUM"

注意

如果使用标签在一个或多个目标实例上创建关联,然后从某一实例中删除标签,则该实例将不再运行该关联。该实例不再与 状态管理器 文档关联。

创建运行 Automation 工作流程的关联 (PowerShell)

使用以下格式来创建一个 AWS Tools for PowerShell 命令,该命令将创建一个运行 Automation 工作流程的 状态管理器 关联。

注意

如果您使用 AWS Tools for Windows PowerShell 创建关联,请使用 -Target 参数定位关联的实例。请勿使用 -InstanceID 参数。-InstanceID 参数是一个旧参数。

New-SSMAssociation -AssociationName AssociationName -Target Targets -Name DocumentName -Parameters (if any) -AutomationTargetParameterName (parameter to target) -ScheduleExpression "cron_or_rate_expression"

以下示例在标有 "Environment,Linux" 的 Amazon EC2 实例上创建关联。该关联使用 AWS-StartEC2Instance 文档和指定的 Automation 代入角色,在每个星期一早上 7:00 启动目标实例。该关联在任意给定时间最多在 10 个实例上同时运行。此外,当错误计数超过 5 时,将在特定执行间隔内停止在更多实例上运行该关联。对于合规性报告,为该关联分配中等严重级别。

$Target = New-Object Amazon.SimpleSystemsManagement.Model.Target $Target.Key = "tag:Environment" $Target.Values = "Linux" New-SSMAssociation -AssociationName "Start_EC2_Instances" -Target $Target -Name "AWS-StartEC2Instance" -Parameters @{"AutomationAssumeRole"="arn:aws:iam::123456789012:role/AmazonSSMAutomationRole"} -AutomationTargetParameterName "InstanceId" -ScheduleExpression "cron(0 2 ? * SUN *)" -ComplianceSeverity MEDIUM -MaxConcurrency 10 -MaxError 5

注意

如果使用标签在一个或多个目标实例上创建关联,然后从某一实例中删除标签,则该实例将不再运行该关联。该实例不再与 状态管理器 文档关联。

状态管理器 Automation 执行问题排查

Systems Manager Automation 要求每个账户、每个区域最多 25 个并发执行和 75 个排队执行。如果运行 Automation 文档的 状态管理器 关联显示 Failed (已失败) 状态和详细状态 AutomationExecutionLimitExceeded,则表明您的执行已达到了限制。因此,Systems Manager 将限制执行。要解决此问题,请执行以下操作:

  • 为关联使用不同的 Rate 或 Cron 表达式。例如,如果关联计划为每 30 分钟运行一次,则更改表达式,使其每小时或每两小时运行一次。

  • 删除状态为 Pending (待处理) 的现有 Automation 执行。通过删除这些执行,将清除当前队列。