

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

# 搭配映像建置器管道使用 EventBridge
<a name="ev-rules-for-pipeline"></a>

AWS 和 合作夥伴服務會以近乎即時的方式將事件串流至 Amazon EventBridge 事件匯流排。您也可以傳送自己的自訂事件。事件匯流排使用規則將每個事件路由到一或多個目標。

Image Builder 會以兩個獨立方向使用 EventBridge：
+ **從規則啟動管道建置。**您可以設定映像建置器管道做為規則目標，讓 EventBridge 在事件符合規則或排程觸發時執行管道。請參閱 [根據排程觸發管道建置](#ev-rules-schedule-pipeline) 和 [從事件模式觸發管道建置](#ev-trigger-pipeline-pattern)。
+ **對 Image Builder 傳送的事件做出反應。**發生重大變更時，Image Builder 會將事件發佈至預設事件匯流排，例如，當映像變成`AVAILABLE`或掃描偵測到 CVEs時。您可以使用規則來比對這些事件，並將其路由至目標，例如 Lambda 函數或 Amazon SNS 主題，以啟動您自己的自動化。請參閱 [對映像建置器傳送的事件做出反應](#ev-create-reaction-rule)。

如需 Image Builder 傳送的事件和每個事件中的欄位的詳細資訊，請參閱 [Image Builder 傳送的事件訊息](integ-eventbridge.md#integ-eb-event-summary)。

**注意**  
事件匯流排是區域特定的。規則及其調用的資源通常位於相同區域；若要跨區域路由，請將目標區域中的事件匯流排設為目標。Image Builder 會將其事件發佈至建置執行所在的 區域中的預設事件匯流排。

**Topics**
+ [EventBridge 詞彙](#ev-terms)
+ [檢視映像建置器管道的 EventBridge 規則](#ev-rules-pipeline-tab)
+ [根據排程觸發管道建置](#ev-rules-schedule-pipeline)
+ [從事件模式觸發管道建置](#ev-trigger-pipeline-pattern)
+ [對映像建置器傳送的事件做出反應](#ev-create-reaction-rule)

## EventBridge 詞彙
<a name="ev-terms"></a>

下列術語可協助您了解 EventBridge 如何與您的映像建置器管道整合。

事件  
描述環境中可能影響一或多個應用程式資源的變更。環境可以是 AWS 環境、SaaS 合作夥伴服務或應用程式，或是您的其中一個應用程式或服務。您也可以在時間軸上設定排程事件。

事件匯流排  
從應用程式和服務接收事件資料的管道。

來源  
將事件傳送至事件匯流排的服務或應用程式。

Target  
EventBridge 在符合規則時叫用的資源或端點，將資料從事件傳遞到目標。

規則  
規則會比對連入事件，並將這些事件路由到目標以進行處理。單一規則可以將事件傳送至多個目標，然後可以平行執行。規則是以事件模式或排程為基礎。

模式  
事件模式會定義事件結構和規則相符的欄位，以啟動目標動作。

Schedule  
排程規則會依排程執行動作，例如執行映像建置器管道以每季重新整理映像。排程表達式有兩種類型：  
+ **Cron 表達**式 – 使用可以概述簡單條件的 cron 語法來比對特定排程條件；例如，特定日期每週執行一次。您也可以建立更複雜的條件，例如在每個月第五天的凌晨 2 點到凌晨 4 點之間執行。
+ **速率表達式** – 指定調用目標時的規則間隔，例如每 12 小時一次。

## 檢視映像建置器管道的 EventBridge 規則
<a name="ev-rules-pipeline-tab"></a>

映像建置器**映像管道**詳細資訊頁面中的 **EventBridge 規則**索引標籤會顯示您帳戶可存取的 EventBridge 事件匯流排，以及適用於目前管道之所選事件匯流排的規則。此標籤也會直接連結至 EventBridge 主控台，以建立新資源。

**連結至 EventBridge 主控台的動作**
+ **建立事件匯流排**
+ **建立規則**

若要進一步了解 EventBridge，請參閱《*Amazon EventBridge 使用者指南*》中的下列主題。
+ [什麼是 Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)
+ [Amazon EventBridge 事件匯流排](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus.html)
+ [Amazon EventBridge 事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)
+ [Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

## 根據排程觸發管道建置
<a name="ev-rules-schedule-pipeline"></a>

將映像建置器管道設定為 EventBridge 排程規則的目標，以定期重新整理映像。下列範例會建立規則，每 90 天啟動一次管道建置。

**注意**  
管道也可以使用自己的內建**排程** （存放在管道上的 Cron 或 Rate 表達式）。該排程由 Image Builder 管理，並與任何 EventBridge 規則分開：  
使用**管道排程**進行簡單的週期性重建。它也可以根據相依性更新進行閘道建置，並自動停用失敗的管道。請參閱 *EC2 Image Builder API 參考*`Schedule`中的 。
使用 **EventBridge 規則**從事件模式啟動組建，或將一個觸發散發到多個目標。

------
#### [ AWS 管理主控台 ]

1. 開啟 EC2 Image Builder 主控台，位於 [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/)。

1. 若要查看在您帳戶下建立的影像管道清單，請從導覽窗格中選擇**影像管道**。
**注意**  
映像管道清單包含管道 – AMI 或 所建立輸出映像類型的指標Docker。

1. 若要檢視詳細資訊或編輯管道，請選擇**管道名稱**連結。這會開啟管道的詳細資訊檢視。
**注意**  
您也可以選取**管道名稱**旁的核取方塊，然後選擇**檢視詳細資訊**。

1. 開啟 **EventBridge 規則**索引標籤。

1. 保留事件匯流排面板中預先選取的預設**事件匯流排**。

1. 選擇**建立規則**。這將帶您前往 Amazon EventBridge 主控台中的**建立規則**頁面。

1. 輸入規則的名稱和描述。規則名稱在所選區域的事件匯流排中必須是唯一的。

1. 在**定義模式**面板中，選擇**排程**選項。這會展開面板，每個選取選項的**固定速率**為 。

1. `90` 在第一個方塊中輸入 ，然後從下拉式清單中選取**天數**。

1. 在**選取目標**面板中執行下列動作：

   1. `EC2 Image Builder` 從**目標**下拉式清單中選取 。

   1. 若要將規則套用至映像建置器管道，請從**映像管道**下拉式清單中選取目標管道。

   1. EventBridge 需要許可才能啟動所選管道的建置。在此範例中，請保留預設選項，以**為此特定資源建立新角色**。

   1. 選擇 **Add target (新增目標)**。

1. 選擇 **Create** (建立)

**注意**  
目前的 EventBridge 主控台可能會透過 EventBridge 排程器建立排程，而確切的標籤和步驟可能會隨著時間而變更。連結的 *Amazon EventBridge 使用者指南*是目前主控台體驗的授權。

------
#### [ AWS CLI ]

這些步驟會建立排程規則，每 90 天啟動一次管道建置。EventBridge 需要一個可在管道`imagebuilder:StartImagePipelineExecution`上呼叫的 IAM 角色。

1. 建立具有速率表達式的規則：

   ```
   aws events put-rule \
     --name refresh-image-every-90-days \
     --schedule-expression "rate(90 days)"
   ```

1. 使用此信任政策，建立 EventBridge 可擔任的 IAM 角色：

   ```
   {
       "Version": "2012-10-17",
       "Statement": [{
           "Effect": "Allow",
           "Principal": { "Service": "events.amazonaws.com" },
           "Action": "sts:AssumeRole"
       }]
   }
   ```

   連接允許管道啟動的許可政策：

   ```
   {
       "Version": "2012-10-17",
       "Statement": [{
           "Effect": "Allow",
           "Action": "imagebuilder:StartImagePipelineExecution",
           "Resource": "arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:image-pipeline/{{my-pipeline}}"
       }]
   }
   ```

1. 新增管道做為規則的目標，參考上一個步驟中的角色：

   ```
   aws events put-targets \
     --rule refresh-image-every-90-days \
     --targets '[{
       "Id": "1",
       "Arn": "arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:image-pipeline/{{my-pipeline}}",
       "RoleArn": "arn:aws:iam::{{111122223333}}:role/{{EventBridgeImageBuilderRole}}"
     }]'
   ```

1. 確認已連接目標：

   ```
   aws events list-targets-by-rule --rule refresh-image-every-90-days
   ```

------

**注意**  
若要進一步了解此範例中未涵蓋的速率表達式規則設定，請參閱《*Amazon EventBridge 使用者指南*》中的[速率表達](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html#eb-rate-expressions)式。

## 從事件模式觸發管道建置
<a name="ev-trigger-pipeline-pattern"></a>

當事件符合模式時，您可以啟動管道建置，而不是排程。建立具有事件模式的規則，然後將管道新增為目標 （具有 中所述的相同 IAM 角色[根據排程觸發管道建置](#ev-rules-schedule-pipeline))。

下列範例會在特定基礎映像變成 時啟動組建`AVAILABLE`，例如，在基礎映像完成後鏈結相依映像組建。`resources` 字首會將規則範圍限定為基礎映像，使其僅符合該映像，而非相依管道自己的輸出：

```
{
    "source": ["aws.imagebuilder"],
    "detail-type": ["EC2 Image Builder Image State Change"],
    "detail": {
        "state": { "status": ["AVAILABLE"] }
    },
    "resources": [{
        "prefix": "arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:image/{{my-base-image}}/"
    }]
}
```

**重要**  
將事件模式範圍限定為基礎映像，如本範例中的 `resources` 字首所示。符合帳戶中每個`AVAILABLE`映像的模式也會符合相依管道自己的輸出映像，這會再次啟動管道並建立無限的建置迴圈。依特定基礎映像名稱或 ARN 字首進行篩選，讓規則只符合您想要的映像。

------
#### [ AWS 管理主控台 ]

1. 前往 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 選擇**規則**，然後選擇**建立規則**。保留**預設**事件匯流排。

1. 輸入名稱和描述。在**規則類型**下，選擇**具有事件模式的規則**。

1. 針對事件來源，選擇**其他**，然後將上面的事件模式貼到**事件模式**方塊中。

1. 在**選取目標**面板中，`EC2 Image Builder`從**目標**下拉式清單中選擇，然後從**影像管道**下拉式清單中選擇要建置的管道。

1. EventBridge 需要許可才能啟動管道。保留預設選項，以**為此特定資源建立新角色**。

1. 選擇**建立規則**。

------
#### [ AWS CLI ]

建立規則並將管道新增為目標：

```
aws events put-rule \
  --name rebuild-on-base-available \
  --event-pattern '{"source":["aws.imagebuilder"],"detail-type":["EC2 Image Builder Image State Change"],"detail":{"state":{"status":["AVAILABLE"]}},"resources":[{"prefix":"arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:image/{{my-base-image}}/"}]}'

aws events put-targets \
  --rule rebuild-on-base-available \
  --targets '[{"Id":"1","Arn":"arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:image-pipeline/{{dependent-pipeline}}","RoleArn":"arn:aws:iam::{{111122223333}}:role/{{EventBridgeImageBuilderRole}}"}]'
```

------

如需您可以比對的事件及其欄位，請參閱 [Image Builder 傳送的事件訊息](integ-eventbridge.md#integ-eb-event-summary)。

## 對映像建置器傳送的事件做出反應
<a name="ev-create-reaction-rule"></a>

當您的資源達到重要點時，Image Builder 會將事件發佈到預設事件匯流排，例如，當影像變更狀態、掃描完成、工作流程步驟暫停輸入，或管道自動停用時。您可以比對這些事件與規則，並將其路由至目標以啟動您自己的自動化。常見的模式包括：
+ 當映像變成 `AVAILABLE`或 時，透過 Amazon SNS 主題通知團隊`FAILED`。
+ 叫用 Lambda 函數在參數存放區中註冊新的 AMI、啟動外部合規測試，或更新部署管道。
+ 當掃描報告關鍵 CVEs 時，安全性問題清單的提醒。
+ 當工作流程步驟暫停建置時，推動核准`WaitForAction`工作流程。

若要對 Image Builder 傳送的事件採取行動，請建立事件模式符合事件 `source`(`aws.imagebuilder`) 和 的規則`detail-type`，並選擇性地縮小 內欄位的範圍`detail`。然後新增執行自動化的目標。

**範例：映像完成時通知 (`AVAILABLE` 或 `FAILED`)**

```
{
    "source": ["aws.imagebuilder"],
    "detail-type": ["EC2 Image Builder Image State Change"],
    "detail": {
        "state": { "status": ["AVAILABLE", "FAILED"] }
    }
}
```

**範例：只有在掃描發現關鍵 CVEs 時提醒**

使用數值比對器，讓清理掃描不會觸發規則：

```
{
    "source": ["aws.imagebuilder"],
    "detail-type": ["EC2 Image Builder CVE Detected"],
    "detail": {
        "finding-severity-counts": {
            "critical": [{ "numeric": [">", 0] }]
        }
    }
}
```

------
#### [ AWS 管理主控台 ]

1. 前往 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 選擇**規則**，然後選擇**建立規則**。保留**預設**事件匯流排。

1. 輸入名稱和描述。在**規則類型**下，選擇**具有事件模式的規則**。

1. 針對事件來源，選擇**其他**，然後將上述其中一個事件模式貼到**事件模式**方塊中。

1. 選擇您的目標，例如 Amazon SNS 主題或 Lambda 函數，並完成目標設定。

1. 選擇**建立規則**。

------
#### [ AWS CLI ]

建立規則並將相符事件傳送至 Amazon SNS 主題：

```
aws events put-rule \
  --name image-available-or-failed \
  --event-pattern '{"source":["aws.imagebuilder"],"detail-type":["EC2 Image Builder Image State Change"],"detail":{"state":{"status":["AVAILABLE","FAILED"]}}}'

aws events put-targets \
  --rule image-available-or-failed \
  --targets '[{"Id":"1","Arn":"arn:aws:sns:{{us-west-2}}:{{111122223333}}:{{image-status}}"}]'
```

EventBridge 還需要將事件傳送至目標的許可。如需每個目標類型所需許可的詳細資訊，請參閱《Amazon EventBridge 使用者指南》中的[將事件傳送至目標的許可](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html#targets-permissions)和使用 Amazon EventBridge 的資源型政策。 [ EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html) * EventBridge *

------

**注意**  
當您符合`EC2 Image Builder Workflow Step Waiting`事件時，您的目標可以使用事件`workflow-step-execution-id`中的 `SendWorkflowStepAction` 和 `RESUME`或 `action`的 來呼叫 `STOP`。請參閱[WaitForAction](wfdoc-step-actions.md#wfdoc-step-action-waitfor)。