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

基于事件运行自动化

您可以通过指定运行手册作为 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 (规则)

  3. 选择 Create rule (创建规则)

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

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

  5. 对于 Event bus(事件总线),请选择要与此规则关联的事件总线。如果您希望此规则响应来自您自己的 Amazon Web Services 账户的匹配事件,请选择 defaul(默认)。当您账户中的某个 Amazon Web Service发出一个事件时,它始终会发送到您账户的默认事件总线。

  6. 选择触发规则的方式。

    要基于以下内容创建 VPC 请执行此操作...

    事件

    1. 对于 Rule type(规则类型),选择 Rule with an event pattern(具有事件模式的规则)。

    2. 选择 Next (下一步)

    3. 对于 Event source(事件源),选择 Amazon 事件或 EventBridge 合作伙伴事件

    4. Event pattern(事件模式)部分中,执行以下操作之一:

      • 要使用模板创建您的事件模式,请选择 Event pattern form(事件模式表单),然后选择 Event source(事件源)、Amazon service(Amazon 服务)和 Event type(事件类型)。如果您选择 All Events(所有事件)作为事件类型,此 Amazon Web Service发送的所有事件将会匹配规则。

        要自定义模板,请选择 Custom pattern (JSON editor)(自定义模式(JSON 编辑器))进行您的更改。

      • 要使用自定义事件模式,请选择 Custom pattern (JSON editor)(自定义模式(JSON 编辑器)),然后创建您的事件模式。

    计划
    1. 对于 Rule type(规则类型),选择 Schedule(计划)。

    2. 选择 Next (下一步)

    3. 对于 Schedule pattern(计划模式),执行以下操作之一:

      • 要使用 cron 表达式定义计划,请选择 A fine-grained schedule that runs at a specific time, such as 8:00 a.m.(在特定时间(例如上午 8:00)运行的精细计划) PST on the first Monday of every month(每月第一个星期一,太平洋标准时间),然后输入 cron 表达式。

      • 要使用速率表达式定义时间表,请选择 A schedule that runs at a regular rate, such as every 10 minutes(以常规速率运行的计划,例如每 10 分钟),然后输入速率表达式。

  7. 选择 Next (下一步)

  8. 对于 Target types(目标类型),选择 Amazon service(服务)。

  9. 对于 Target(目标),选择 Systems Manager Automation

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

  11. Configure document version(配置文档版本)部分中,选择一个版本。$DEFAULT 已在 Systems Manager 中显式设置为默认的运行手册版本。您可以选择特定版本,也可以使用最新版本。

  12. Configure automation parameter(s)(配置自动化参数)部分中,保留默认参数值(如果可用)或输入您自己的值。

    注意

    要创建目标,您必须为每个所需的参数指定一个值。如果不指定,系统虽然会创建规则,但该规则不会运行。

  13. 对于许多目标类型,EventBridge 需要权限以便将事件发送到目标。在这些情况下,EventBridge 可以创建运行事件所需的 IAM 角色:请执行下列操作之一:

    • 若要自动创建 IAM 角色,请选择 Create a new role for this specific resource (为此特定资源创建新角色)

    • 要使用您之前创建的 IAM 角色,请选择 Use existing role(使用现有角色),然后从下拉列表中选择现有角色。请注意,您可能需要更新 IAM 角色的信任策略以包括 EventBridge。以下是示例:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com", "ssm.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  14. 选择 Next (下一步)

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

  16. 选择 Next (下一步)

  17. 查看规则详细信息并选择 Create rule(创建规则)。

创建一个使用运行手册的 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 rule name \ --targets '{"Arn": "arn:aws:ssm:region:account ID:automation-definition/runbook name","Input":"{\"input parameter\":[\"value\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "target ID","RoleArn": "arn:aws:iam::123456789012:role/service-role/EventBridge service role"}'
    Windows
    aws events put-targets ^ --rule rule name ^ --targets '{"Arn": "arn:aws:ssm:region:account ID:automation-definition/runbook name","Input":"{\"input parameter\":[\"value\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "target ID","RoleArn": "arn:aws:iam::123456789012:role/service-role/EventBridge service role"}'
    PowerShell
    $Target = New-Object Amazon.CloudWatchEvents.Model.Target $Target.Id = "target ID" $Target.Arn = "arn:aws:ssm:region:account ID:automation-definition/runbook name" $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/EventBridge service role" $Target.Input = '{"input parameter":["value"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}' Write-CWETarget ` -Rule "rule name" ` -Target $Target

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

    Linux & macOS
    aws events put-targets \ --rule DailyAutomationRule \ --targets '{"Arn": "arn:aws:ssm:region:*: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:region:*: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:region:*: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 中成功,则没有输出。