根據 EventBridge 事件執行自動化 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

根據 EventBridge 事件執行自動化

您可以將 Runbook 指定為 Amazon EventBridge 事件的目標,藉此開始自動化。您可以根據排程或在特定的 AWS 系統事件發生時開始自動化。例如,假設您建立名稱為 BootStrapInstances 的 Runbook,而該文件在執行個體啟動時於執行個體上安裝軟體。若要指定 BootStrapInstances Runbook (和對應的工作流程) 做為 EventBridge 事件的目標,您要先建立新的 EventBridge 規則。(以下為範例規則:Service name (服務名稱):EC2,Event Type (事件類型):EC2 執行個體狀態-變更通知,Specific state(s) (特定狀態):執行 Any instance (任何執行個體)。) 然後藉由 EventBridge 主控台和 AWS Command Line Interface (AWS CLI) 使用下列處理程序來指定 BootStrapInstances Runbook 作為事件的目標。新的執行個體啟動時,系統會執行自動化和安裝軟體。

如需建立 Runbook 的資訊,請參閱 建立您自己的執行手冊

建立使用 Runbook (主控台) 的 EventBridge 事件

使用以下程序設定來將 Runbook 做為 EventBridge 事件的目標。

將 Runbook 設定為 EventBridge 事件的目標
  1. 前往 https://console.aws.amazon.com/events/ 開啟 Amazon EventBridge 主控台。

  2. 在導覽窗格中,選擇規則

  3. 選擇建立規則

  4. 輸入規則的名稱和描述。

    在同一個區域和同一個事件匯流排上,規則不能與另一個規則同名。

  5. 針對事件匯流排,選擇要與此規則建立關聯的事件匯流排。如果您想要此規則回應匹配來自您的 AWS 帳戶 的事件,請選取 default (預設)。當您帳戶中的 AWS 服務 發出事件時,一律會前往您帳戶的預設事件匯流排。

  6. 選擇該規則的觸發方式。

    根據…建立規則 執行此作業...

    事件

    1. 針對規則類型,選擇具有事件模式的規則

    2. 選擇下一步

    3. 事件來源欄位中,選擇 AWS 事件或 EventBridge 合作夥伴事件

    4. Event pattern (事件模式) 區段中,執行下列其中一個動作:

      • 若要使用範本建立您的事件模式,請選擇 Event pattern form (事件模式表單),然後選擇 Event source (事件來源)、AWS service ( 服務),以及 Event type (事件類型)。如果您選擇 All Events (所有事件),此 AWS 服務 發出的所有事件都將符合規則。

        若要自定範本,請選擇自訂模式 (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 (每個月的第一個星期一的 PST) 並輸入 Cron 運算式。

      • 若要使用 Rate 運算式定義排程,請選擇 A schedule that runs at a regular rate, such as every 10 minutes (按一般速率執行的排程,例如每 10 分鐘一次),然後輸入 Rate 運算式。

  7. 選擇 Next (下一步)。

  8. 目標類型欄位中,選擇 AWS 服務

  9. 針對 Select a target (選取目標),請選擇 Systems Manager Automation

  10. 對於 Document (文件),選擇叫用目標時要使用的 Runbook。

  11. Configure automation parameter(s) (設定自動化參數) 區段中,保留預設參數值 (若有) 或輸入您自己的值。

    注意

    若要建立目標,您必須為每個必要參數指定值。如果不這麼做,系統會建立規則,但規則不會執行。

  12. 對於許多目標類型而言,EventBridge 需要許可才能將事件傳送到目標。在這些情況下,EventBridge 可建立執行您的規則所需的 IAM 角色。執行以下任意一項:

    • 若要自動建立 IAM 角色,請選擇為此特定資源建立新角色

    • 若要使用您早前建立的 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" } ] }
  13. 選擇 Next (下一步)。

  14. (選用) 為規則輸入一或多個標籤。如需詳細資訊,請參閱《Amazon EventBridge 使用者指南》中的標記您的 Amazon EventBridge 資源

  15. 選擇 Next (下一步)。

  16. 檢閱規則的詳細資訊,然後選擇建立規則

建立使用 Runbook (命令列) 的 EventBridge 事件

以下程序說明如何使用 AWS CLI (在 Linux 或 Windows 上) 或 AWS Tools for PowerShell 建立 EventBridge 事件規則,並設定 Runbook 做為目標。

將 Runbook 設定為 EventBridge 事件的目標
  1. 如果您尚未安裝並設定 AWS CLI 或 AWS Tools for PowerShell,請進行相應的操作。

    如需相關資訊,請參閱安裝或更新 AWS CLI 的最新版本安裝 AWS Tools for PowerShell

  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. 建立命令,指定 Runbook 做為您在步驟 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 事件目標,使用 Runbook 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 的命令成功,則不會有輸出訊息。