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

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

根據事件執行自動化

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

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

創建使用 runbook(控制台)的 EventBridge 事件

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

若要將 Runbook 設定為 EventBridge 事件規則的目標
  1. 在以下位置打開 Amazon EventBridge 控制台 https://console.aws.amazon.com/events/

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

  3. 選擇 Create rule (建立規則)

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

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

  5. 針對 Event bus (事件匯流排),選擇要與此規則建立關聯的事件匯流排。如果您希望此規則回應來自您自己的相符事件 AWS 帳戶,請選取預設值。當您帳戶 AWS 服務 中的某個事件發出時,它始終會進入您帳戶的默認事件總線。

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

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

    事件

    1. 針對 Rule type (規則類型) 選擇 Rule with an event pattern (具有事件模式的規則)。

    2. 選擇 Next (下一步)

    3. 對於事件來源,請選擇AWS 事件或 EventBridge 合作夥伴事件。

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

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

        若要自定範本,請選擇 Custom pattern (JSON editor) (自訂模式 (JSON 編輯器)) 並進行變更。

      • 若要使用自訂事件模式,請選擇 Custom pattern (JSON editor) (自訂模式 (JSON 編輯器)) 並建立事件模式。

    排程
    1. 針對 Rule type (規則類型),選擇 Schedule (排程)。

    2. 選擇下一步

    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. Target types (目標類型) 欄位中,選擇 AWS service (服務)。

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

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

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

    注意

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

  12. 對於許多目標類型, 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" } ] }
  13. 選擇 Next (下一步)

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

  15. 選擇 Next (下一步)

  16. 檢閱規則的詳細資訊,然後選擇 Create rule (建立規則)。

創建使用 runbook(命令行)的 EventBridge 事件

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

若要將 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"

    下列範例會建立每天上午 9:00 (UTC) 開始的 EventBridge 事件規則。

    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

    下列範例會建立使用 runbook AWS-StartEC2Instance 啟 EventBridge 動指定執行個體 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