使用 EventBridge 运行具有触发器的自动化 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 EventBridge 运行具有触发器的自动化

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

有关创建运行手册的更多信息,请参阅 使用运行手册

创建使用运行手册(控制台)的 EventBridge 事件

使用以下过程将运行手册配置为 EventBridge 事件目标。

将运行手册配置为 EventBridge 事件规则的目标

  1. 访问 https://console.aws.amazon.com/events/,打开 Amazon EventBridge 控制台。

  2. 在导航窗格中,选择 Rules (规则),然后选择 Create rule (创建规则)

    –或者–

    如果首先打开 Amazon EventBridge 主页,选择 Create rule (创建规则)

  3. 为规则输入名称和描述。

    规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。

  4. 对于定义模式,选择事件模式计划。利用事件模式,您可以构建将为 Amazon 服务中的特定操作生成事件的规则。利用计划,您可以构建将根据您指定的计划使用 cron 格式生成事件的规则。

  5. 选择要创建的规则的其余选项,然后选择添加目标

    有关创建 EventBridge 规则的信息,请参阅 Amazon EventBridge 用户指南中的 Amazon EventBridge 入门

  6. 对于 Select event bus(选择事件总线),请选择要与此规则关联的事件总线。如果您希望根据来自您自己的 Amazon Web Services 账户 的匹配事件启动此规则,请选择 Amazon default event bus (默认事件总线)。当您账户中的某个 Amazon 服务发出一个事件时,它始终会发送到您账户的默认事件总线。

  7. 对于 Target(目标),选择 Systems Manager Automation(Systems Manager 自动化)。

  8. 对于文档,选择在调用目标时要使用的运行手册。

  9. 展开配置文档版本,然后选择一个版本。$DEFAULT 已在 Systems Manager 中显式设置为默认的运行手册版本。您可以选择特定版本,也可以使用最新版本。

  10. 展开配置自动化参数,保留默认参数值(如果可用)或输入您自己的值。

    注意

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

  11. 选择目标区域的底部,选择一个角色授予 EventBridge 权限,以便使用指定的运行手册和参数启动自动化。EventBridge 使用角色启动自动化。您可以让 EventBridge 创建新角色或使用已具有所需权限的角色。

  12. (可选)为规则输入一个或多个标签。有关更多信息,请参阅 Amazon EventBridge 用户指南中的标记 Amazon EventBridge 资源

  13. 选择创建,然后完成向导。

创建一个使用运行手册的 EventBridge 事件(命令行)

以下过程介绍了如何使用 Amazon CLI(在 Linux 或 Windows 上)或 Amazon Tools for PowerShell 创建 EventBridge 事件规则并将运行手册配置为目标。

将运行手册配置为 EventBridge 事件规则的目标

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

    有关信息,请参阅安装或升级 Amazon 命令行工具

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

    基于计划的触发器

    Linux & macOS
    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"

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

    Linux & macOS
    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 * * ? *)"

    基于事件的触发器

    Linux & macOS
    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"]}'

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

    Linux & macOS
    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"]}'

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

    Linux & macOS
    {
        "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. 创建一个命令以将运行手册指定为在步骤 2 中创建的 EventBridge 事件规则的目标。以下是一些为您提供帮助的模板命令。

    Linux & macOS
    aws events put-targets \ --rule CW_Event_Rule_Name \ --targets '{"Arn": "arn:aws:ssm:us-east-1:123456789012:automation-definition/Runbook_Name","Input":"{\"RunbookParameter\":[\"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/Runbook_Name","Input":"{\"RunbookParameter\":[\"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/Runbook_Name" $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/CWE_Role_Name_To_Run_Automation" $Target.Input = '{"RunbookParameter":["ParameterValue"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}' Write-CWETarget ` -Rule "CW_Event_Rule_Name" ` -Target $Target

    以下示例创建一个 EventBridge 事件目标,它使用 AWS-StartEC2Instance 运行手册启动指定的实例 ID。

    Linux & macOS
    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

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

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

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