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。

可以使用以下过程通过 AWS Systems Manager 控制台、AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell 创建 状态管理器 关联以运行 Automation 工作流程。

开始前的准备工作

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

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

  • 运行 Automation 文档的 状态管理器 关联将计入在您的 AWS 账户中并发运行的自动化的最大数。您一次最多可以运行 25 个并行 Automation,最多运行 75 个子 Automation。有关信息,请参阅 AWS Systems Manager 限制

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

    LinuxWindowsPowerShell
    Linux
    aws iam create-service-linked-role \ --aws-service-name ssm.amazonaws.com
    Windows
    aws iam create-service-linked-role ^ --aws-service-name ssm.amazonaws.com
    PowerShell
    New-IAMServiceLinkedRole ` -AWSServiceName 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 工作流程(命令行)

以下过程介绍了如何使用 AWS CLI(在 Linux 或 Windows 上)或 AWS Tools for PowerShell 创建 状态管理器 关联以运行 Automation 工作流程。

创建关联以运行 Automation 工作流程

  1. 安装并配置 AWS CLI 或 AWS Tools for PowerShell(如果尚未执行该操作)。

    有关更多信息,请参阅 安装或升级 AWS CLIInstall or Upgrade the AWS Tools for PowerShell

  2. 运行以下命令以查看文档列表。

    LinuxWindowsPowerShell
    Linux
    aws ssm list-documents
    Windows
    aws ssm list-documents
    PowerShell
    Get-SSMDocumentList

    记下要用于关联的 Automation 文档的名称。

  3. 运行以下命令以查看有关 Automation 文档的详细信息。

    LinuxWindowsPowerShell
    Linux
    aws ssm describe-document \ --name document_name

    记下要用于 --automation-target-parameter-name 选项的参数名称(例如 InstanceId)。此参数确定在其上运行 Automation 的资源的类型。

    Windows
    aws ssm describe-document ^ --name document_name

    记下要用于 --automation-target-parameter-name 选项的参数名称(例如 InstanceId)。此参数确定在其上运行 Automation 的资源的类型。

    PowerShell
    Get-SSMDocumentDescription ` -Name document_name

    记下要用于 AutomationTargetParameterName 选项的参数名称(例如 InstanceId)。此参数确定在其上运行 Automation 的资源的类型。

  4. 创建一个命令以使用 状态管理器 关联运行 Automation 工作流程。以下是一些为您提供帮助的模板命令。

    使用标签设置目标

    LinuxWindowsPowerShell
    Linux
    aws ssm create-association \ --association-name AssociationName \ --targets Key=tag:TagKey,Values=TagValue \ --name AutomationDocumentName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression"

    注意

    如果您使用 AWS CLI 创建关联,请使用 --targets 参数指定关联的目标实例。不要使用 --instance-id 参数。--instance-id 参数是一个旧参数。

    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=tag:TagKey,Values=TagValue ^ --name AutomationDocumentName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression"

    注意

    如果您使用 AWS CLI 创建关联,请使用 --targets 参数指定关联的目标实例。不要使用 --instance-id 参数。--instance-id 参数是一个旧参数。

    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "tag:TagKey" $Targets.Values = "TagValue" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "AutomationDocumentName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)" } ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression"

    注意

    如果您使用 AWS Tools for PowerShell 创建关联,请使用 Target 参数指定关联的目标实例。不要使用 InstanceId 参数。InstanceId 参数是一个旧参数。

    使用参数值设置目标

    LinuxWindowsPowerShell
    Linux
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ParameterValues,Values=value_1,value_2,value_3 \ --name AutomationDocumentName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression"
    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=ParameterValues,Values=value_1,value_2,value_3 ^ --name AutomationDocumentName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ParameterValues" $Targets.Values = "value_1","value_2","value_3" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "AutomationDocumentName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)"} ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression"

    使用 AWS Resource Groups设置目标

    LinuxWindowsPowerShell
    Linux
    aws ssm create-association \ --association-name AssociationName \ --targets Key=ResourceGroup,Values=Resource_Group_name \ --name AutomationDocumentName \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) \ --automation-target-parameter-name (parameter to target) \ --schedule "cron_or_rate_expression"
    Windows
    aws ssm create-association ^ --association-name AssociationName ^ --targets Key=ResourceGroup,Values=Resource_Group_name ^ --name AutomationDocumentName ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM,(Additional parameters, if any) ^ --automation-target-parameter-name (parameter to target) ^ --schedule "cron_or_rate_expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "Resource_Group_Name" New-SSMAssociation ` -AssociationName "AssociationName" ` -Target $Targets ` -Name "AutomationDocumentName" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM; (Additional parameters, if any)"} ` -AutomationTargetParameterName "parameter_to_target" ` -ScheduleExpression "cron_or_rate_expression"

    该命令返回新关联的详细信息,类似于以下内容。

    LinuxWindowsPowerShell
    Linux
    {
        "AssociationDescription": {
            "ScheduleExpression": "cron(0 7 ? * MON *)",
            "Name": "AWS-StartEC2Instance",
            "Parameters": {
                "AutomationAssumeRole": [
                    "arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM"
                ]
            },
            "Overview": {
                "Status": "Pending",
                "DetailedStatus": "Creating"
            },
            "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
            "DocumentVersion": "$DEFAULT",
            "AutomationTargetParameterName": "InstanceId",
            "LastUpdateAssociationDate": 1564686638.498,
            "Date": 1564686638.498,
            "AssociationVersion": "1",
            "AssociationName": "CLI",
            "Targets": [
                {
                    "Values": [
                        "DEV"
                    ],
                    "Key": "tag:ENV"
                }
            ]
        }
    }
    
    Windows
    {
        "AssociationDescription": {
            "ScheduleExpression": "cron(0 7 ? * MON *)",
            "Name": "AWS-StartEC2Instance",
            "Parameters": {
                "AutomationAssumeRole": [
                    "arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM"
                ]
            },
            "Overview": {
                "Status": "Pending",
                "DetailedStatus": "Creating"
            },
            "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
            "DocumentVersion": "$DEFAULT",
            "AutomationTargetParameterName": "InstanceId",
            "LastUpdateAssociationDate": 1564686638.498,
            "Date": 1564686638.498,
            "AssociationVersion": "1",
            "AssociationName": "CLI",
            "Targets": [
                {
                    "Values": [
                        "DEV"
                    ],
                    "Key": "tag:ENV"
                }
            ]
        }
    }
    
    PowerShell
    Name                  : AWS-StartEC2Instance
    InstanceId            : 
    Date                  : 8/1/2019 7:31:38 PM
    Status.Name           : 
    Status.Date           : 
    Status.Message        : 
    Status.AdditionalInfo : 

注意

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

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

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

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

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