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

使用 CloudWatch Events 运行具有触发器的 Automation 工作流程

您可通过指定 Automation 文档作为 Amazon CloudWatch 事件的目标来启动 Automation 工作流程。您可以按计划或者在特定 AWS 系统事件发生时启动工作流程。例如,假设您创建一个名为 BootStrapInstances 的 Automation 文档,该文档在实例启动时在实例上安装软件。要指定 BootStrapInstances 文档(和对应的工作流程)作为 CloudWatch 事件目标,请先创建新的 CloudWatch Events 规则。(以下是示例规则:Service name:EC2,Event Type:EC2 实例状态更改通知,Specific state(s):正在运行,Any instance。) 然后,您使用以下过程通过 CloudWatch 控制台、AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell 将 BootStrapInstances 文档指定为事件目标。当新实例启动时,系统将运行工作流程并安装软件。

有关创建 Automation 文档的信息,请参阅使用 Automation 文档

创建 CloudWatch 事件以运行 Automation 工作流程(控制台)

使用以下过程配置 Automation 工作流程作为 CloudWatch 事件目标。

将 Automation 文档配置为 CloudWatch 事件规则的目标

  1. Sign in to the AWS Management Console and open the CloudWatch console at https://console.amazonaws.cn/cloudwatch/.

  2. 在左侧导航窗格中,选择 Events,然后选择 Create rule

  3. 选择 Event PatternSchedule。利用 Event Pattern,您可以构建将为 AWS 服务中的特定操作生成事件的规则。利用 Schedule,您可以构建将根据您指定的计划使用 cron 格式生成事件的规则。

  4. 选择要创建的规则的其余选项,然后选择 Add target

  5. Select target type 列表中,选择 SSM Automation

  6. Document (文档) 列表中,选择在调用目标时要运行的 Automation 文档。

  7. 展开 Configure document version (配置文档版本),然后选择一个版本。$DEFAULT 已显式设置为 Systems Manager 中的默认文档版本。您可以选择特定版本,也可以使用最新版本。

  8. 展开 Configure automation parameter(s),保留默认参数值 (如果可用) 或输入您自己的值。

    注意

    所需参数的参数名旁有一个星号 (*)。要创建目标,您必须为每个所需的参数指定一个值。如果没有指定,系统将创建规则,但不运行规则。

  9. 在权限部分中,选择一个选项。CloudWatch 使用此角色启动 Automation 工作流程。

  10. 选择 Configure details 并完成向导。

创建 CloudWatch 事件以运行 Automation 文档(命令行)

以下过程介绍了如何使用 AWS CLI(在 Linux 或 Windows 上)或 AWS Tools for PowerShell 创建 CloudWatch 事件规则并将 Automation 文档配置为目标。

将 Automation 文档配置为 CloudWatch 事件规则的目标

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

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

  2. 创建一个命令以指定新的 CloudWatch 事件规则。以下是一些为您提供帮助的模板命令。

    基于计划的触发器

    LinuxWindowsPowerShell
    Linux
    aws events put-rule \ --name "rule_name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws events put-rule ^ --name "rule_name" ^ --schedule-expression "cron_or_rate_expression"
    PowerShell
    Write-CWERule ` -Name "rule_name" ` -ScheduleExpression "cron_or_rate_expression"

    以下示例创建一个 CloudWatch 事件规则,将在每天上午 9:00 (UTC) 触发该规则。

    LinuxWindowsPowerShell
    Linux
    aws events put-rule \ --name "DailyAutomationRule" \ --schedule-expression "cron(0 9 * * ? *)"
    Windows
    aws events put-rule ^ --name "DailyAutomationRule" ^ --schedule-expression "cron(0 9 * * ? *)"
    PowerShell
    Write-CWERule ` -Name "DailyAutomationRule" ` -ScheduleExpression "cron(0 9 * * ? *)"

    基于事件的触发器

    LinuxWindowsPowerShell
    Linux
    aws events put-rule \ --name "rule_name" \ --event-pattern "{\"source\":[\"aws.service\"],\"detail-type\":[\"service_event_detail_type\"]}"
    Windows
    aws events put-rule ^ --name "rule_name" ^ --event-pattern "{\"source\":[\"aws.service\"],\"detail-type\":[\"service_event_detail_type\"]}"
    PowerShell
    Write-CWERule ` -Name "rule_name" ` -EventPattern '{"source":["aws.service"],"detail-type":["service_event_detail_type"]}'

    以下示例创建一个 CloudWatch 事件规则,将在区域中的任何 Amazon EC2 实例更改状态时触发该规则。

    LinuxWindowsPowerShell
    Linux
    aws events put-rule \ --name "EC2InstanceStateChanges" \ --event-pattern "{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}"
    Windows
    aws events put-rule ^ --name "EC2InstanceStateChanges" ^ --event-pattern "{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}"
    PowerShell
    Write-CWERule ` -Name "EC2InstanceStateChanges" ` -EventPattern '{"source":["aws.ec2"],"detail-type":["EC2 Instance State-change Notification"]}'

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

    LinuxWindowsPowerShell
    Linux
    {
        "RuleArn": "arn:aws:events:us-east-1:123456789012:rule/automationrule"
    }
    Windows
    {
        "RuleArn": "arn:aws:events:us-east-1:123456789012:rule/automationrule"
    }
    PowerShell
    arn:aws:events:us-east-1:123456789012:rule/EC2InstanceStateChanges
  3. 创建一个命令以将 Automation 文档指定为在步骤 2 中创建的 CloudWatch 事件规则的目标。以下是一些为您提供帮助的模板命令。

    LinuxWindowsPowerShell
    Linux
    aws events put-targets \ --rule CW_Event_Rule_Name \ --targets '{"Arn": "arn:aws:ssm:us-east-1:123456789012:automation-definition/Automation_Document_Name","Input":"{\"DocumentParameter\":[\"ParameterValue\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target_Id","RoleArn": "arn:aws:iam::123456789012:role/service-role/CWE_Role_Name_To_Run_Automation"}'
    Windows
    aws events put-targets ^ --rule CW_Event_Rule_Name ^ --targets '{"Arn": "arn:aws:ssm:us-east-1:123456789012:automation-definition/Automation_Document_Name","Input":"{\"DocumentParameter\":[\"ParameterValue\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target_Id","RoleArn": "arn:aws:iam::123456789012:role/service-role/CWE_Role_Name_To_Run_Automation"}'
    PowerShell
    $Target = New-Object Amazon.CloudWatchEvents.Model.Target $Target.Id = "Target_Id" $Target.Arn = "arn:aws:ssm:us-east-1:123456789012:automation-definition/Automation_Document_Name" $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/CWE_Role_Name_To_Run_Automation" $Target.Input = '{"DocumentParameter":["DocumentValue"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}' Write-CWETarget ` -Rule "CW_Event_Rule_Name" ` -Target $Target

    以下示例创建一个 CloudWatch 事件目标,它使用 AWS-StartEC2Instance 文档启动指定的实例 ID。

    LinuxWindowsPowerShell
    Linux
    aws events put-targets \ --rule DailyAutomationRule \ --targets '{"Arn": "arn:aws:ssm:us-east-1:123456789012:automation-definition/AWS-StartEC2Instance","Input":"{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target1","RoleArn": "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"}'
    Windows
    aws events put-targets ^ --rule DailyAutomationRule ^ --targets '{"Arn": "arn:aws:ssm:us-east-1:123456789012:automation-definition/AWS-StartEC2Instance","Input":"{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target1","RoleArn": "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"}'
    PowerShell
    $Target = New-Object Amazon.CloudWatchEvents.Model.Target $Target.Id = "Target1" $Target.Arn = "arn:aws:ssm:us-east-1:123456789012:automation-definition/AWS-StartEC2Instance" $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520" $Target.Input = '{"InstanceId":["i-02573cafcfEXAMPLE"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}' Write-CWETarget ` -Rule "DailyAutomationRule" ` -Target $Target

    系统将返回类似于以下内容的信息。

    LinuxWindowsPowerShell
    Linux
    {
        "FailedEntries": [],
        "FailedEntryCount": 0
    }
    Windows
    {
        "FailedEntries": [],
        "FailedEntryCount": 0
    }
    PowerShell

    如果命令在 PowerShell 中成功,则没有输出。