

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

# 搭配 Amazon EventBridge 使用 Elastic Beanstalk
<a name="AWSHowTo.eventbridge"></a>

使用 Amazon EventBridge，您可以設定事件驅動規則來監控 Elastic Beanstalk 資源，並啟動使用其他服務的目標動作 AWS 。例如，您可以透過在生產環境的運作狀態變更為 *Warning* (警告) 狀態時傳送 Amazon SNS 主題，來設定傳出電子郵件通知的規則。或者，您可以在環境的運作狀態變更為 *Degraded* (已降級) 或 *Severe* (嚴重) 狀態時傳遞通知至 Slack，來設定 Lambda 函數。

您可以在 Amazon EventBridge 中建立規則，以對下列任何一個 Elastic Beanstalk 事件採取行動：
+ *環境操作的狀態變更 (包括建立、更新和終止操作)。*事件將指明狀態變更是否已開始、成功或失敗。
+ *其他資源的狀態變更。*除了環境之外，受監控的其他資源包括負載平衡器、Auto Scaling 群組和執行個體。
+ *環境的運作狀態轉換。*事件指出環境運作狀態已從運作狀態轉換到另一個運作狀態。
+ *受管更新的狀態變更。*事件將指明狀態變更是否已開始、成功或失敗。

若要擷取您感興趣的特定 Elastic Beanstalk 事件，請定義 EventBridge 可用來偵測事件的特定事件模式。事件模式擁有與其相符事件相同的結構。該模式引用您欲比對的欄位，並提供您正在尋找的數值。盡可能發出事件。在正常操作情況下，其可近乎即時地從 Elastic Beanstalk 傳送至 EventBridge。但是，可能會發生延遲或阻止事件傳遞的情況。

如需 Elastic Beanstalk 事件中包含的欄位清單及其可能的字串值，請參閱 [Elastic Beanstalk 事件欄位映射](#eb-eventbridge-mapping)。如需 EventBridge 規則如何使用事件模式的詳細資訊，請參閱 [EventBridge 中的事件和事件模式](https://docs.aws.amazon.com//eventbridge/latest/userguide/eventbridge-and-event-patterns.html)。

## 使用 EventBridge 監控 Elastic Beanstalk 資源
<a name="eb-eventbridge-tasks"></a>

使用 EventBridge，您可以建立規則，其定義當 Elastic Beanstalk 針對其資源發出事件時要採取的動作。例如，您可以建立一個規則，在環境狀態變更時傳送電子郵件訊息給您。

EventBridge 主控台具有**預先定義的模式**選項，可建置 Elastic Beanstalk 事件模式。如果建立規則時在 EventBridge 主控台中選取此選項，您即可快速建置 Elastic Beanstalk 事件模式。您只需選取事件欄位和值。在您選取後，主控台即會建置並顯示事件模式。或者，您可以手動編輯您建置的事件模式，並將其儲存為自訂模式。此外，主控台還會提供選項來顯示詳細的**範例事件**，您可以複製並貼至您正在建置的事件模式。

如果您想要輸入或複製事件模式並貼至 EventBridge 主控台，可以選擇使用主控台中的 **Custom pattern** (自訂模式) 選項。這樣做，您不需要執行前述選取欄位和值的步驟。本主題提供您可以使用的[事件比對模式](#eb-eventbridge-patterns)和 [Elastic Beanstalk 事件](#eb-eventbridge-examples)的範例。

**建立資源事件的規則**

1.  AWS 使用具有使用 EventBridge 和 Elastic Beanstalk 許可的帳戶登入 。

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

1. 在導覽窗格中，選擇**規則**。

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

1. 輸入規則的**Name (名稱)**，或者輸入描述。

1. 針對**事件匯流排**選擇**預設值**。當您帳戶中 AWS 的服務發出事件時，一律會前往您帳戶的預設事件匯流排。

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

1. 選擇**下一步**。

1. 在**事件來源**欄位中，選擇 **AWS 事件或 EventBridge 合作夥伴事件**。

1. (選用) 對於 **Sample event** (範例事件)，請選擇 **AWS 事件**。在搜尋欄位中輸入 *Elastic Beanstalk*。這將提供您可以選擇顯示的 Elastic Beanstalk 事件範例清單。此步驟僅顯示您可以參考的範例事件。它不會影響規則建立的結果。本主題後面的 [Elastic Beanstalk 事件範例](#eb-eventbridge-examples) 區段提供相同類型事件的範例。

1. 在 **Event pattern** (事件模式) 區段中，選擇 **Event pattern form** (事件模式表單)。
**注意**  
如果已經有事件模式的文字，而且不需要使用 EventBridge 主控台進行建置，您可以選取 **Custom pattern (JSON editor)** (自訂模式 (JSON 編輯器))。然後，可以手動輸入或複製文字並貼至 **Event Pattern** (事件模式) 方塊。選擇 **Next** (下一步)，然後轉到有關輸入目標的步驟。

1. 在**事件來源**欄位中，選擇 **AWS 服務**。

1. 針對**AWS 服務**，選取 **Elastic Beanstalk**。

1. 針對 **Event type** (事件類型)，選取 **Status Change** (狀態變更)。

1. 此步驟涵蓋如何使用 Elastic Beanstalk 的 **detail type** (詳細資訊類型)、**status** (狀態) 和 **severity** (嚴重性) 事件欄位。選擇這些欄位和想要比對的值後，主控台會建置並顯示事件模式。
   + 如果您只為特定詳細資訊類型選取*一個*值 （例如），則可以為階層中的下一個欄位選擇一或多個值。 ****
   + 如果您為特定詳細資訊類型選擇*多個*值 （請勿），請勿為階層中的下一個欄位選擇特定值。 ****這樣可以防止事件模式中欄位的模糊比對邏輯。

   **environment** (環境) 事件欄位不受此階層的影響，因此它會依照下一個步驟中所述顯示。

1. 針對 Environment (環境)，選取 **Any environment** (任何環境) 或 **Specific environment(s)** (特定環境)。
   + 如果您選取 **Specific environment(s)** (特定環境)，可以從下拉式清單中選擇一或多個環境。EventBridge 會新增您在事件模式 *detail* (詳細資訊) 區段的 *EnvironmentName[ ]* 清單中選取的所有環境。然後，您的規則會篩選所有事件，以僅包含您選擇的特定環境。
   + 如果您選取 **Any environment** (任何環境)，則不會將任何環境新增至您的事件模式。因此，您的規則不會根據環境來篩選任何 Elastic Beanstalk 事件。

1. 選擇**下一步**。

1. 在**目標類型**欄位中，選擇 **AWS 服務**。

1. 在 **Select a target** (選取目標) 下，選擇從 Elastic Beanstalk 收到資料狀態變更事件時，要採取的目標動作。

   例如，您可以使用 Amazon Simple Notification Service (SNS) 主題，在事件發生時，傳送電子郵件或文字訊息。若要執行此操作，您需要使用 Amazon SNS 主控台建立 Amazon SNS 主題。若要進一步了解，請參閱[使用 Amazon SNS 傳送使用者通知](https://docs.aws.amazon.com//sns/latest/dg/sns-user-notifications.html)。
**重要**  
某些目標動作可能需要使用其他服務，並產生額外費用，例如 Amazon SNS 或 Lambda 服務。如需 AWS 定價的詳細資訊，請參閱 [https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/)。有些服務是 AWS 免費用量方案的一部分。若您是新客戶，可以免費試用這些服務。如需詳細資訊，請參閱[https://aws.amazon.com/free/](https://aws.amazon.com/free/)。

1. (選用) 選擇 **Add another target** (新增其他目標)，以指定事件規則的其他目標動作。

1. 選擇**下一步**。

1. (選用) 為規則輸入一或多個標籤。如需詳細資訊，請參閱《Amazon EventBridge 使用者指南》**中的 [Amazon EventBridge 標籤](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-tagging.html)。

1. 選擇**下一步**。

1. 檢閱規則的詳細資訊，然後選擇**建立規則**。

## Elastic Beanstalk 事件模式範例
<a name="eb-eventbridge-patterns"></a>

事件模式擁有與其相符事件相同的結構。該模式引用您欲比對的欄位，並提供您正在尋找的數值。
+ 所有環境的*運作狀態變更*

  ```
  {
     "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Health status change"
      ]
  }
  ```
+ 下列環境的*運作狀態變更*：`myEnvironment1` 和 `myEnvironment2`。此事件模式會針對這兩個特定環境進行篩選，而之前的 *Health status change* (運作狀態變更) 範例不會針對所有環境來傳送事件。

  ```
  {"source": [
      "aws.elasticbeanstalk"
      ],
      "detail-type": [
          "Health status change"
      ],
      "detail": {
          "EnvironmentName": [
              "myEnvironment1",
              "myEnvironment2"
          ]
      }
  }
  ```
+ 所有環境的 *Elastic Beanstalk 資源狀態變更*

  ```
  {
    "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Elastic Beanstalk resource status change"
      ]
  }
  ```
+ 下列環境的 *Elastic Beanstalk 資源狀態變更*且 `Status` *環境更新失敗*並顯示 `Severity` *錯誤*︰`myEnvironment1` 和 `myEnvironment2`

  ```
  {"source": [
      "aws.elasticbeanstalk"
      ],
      "detail-type": [
          "Elastic Beanstalk resource status change"
      ],
      "detail": {
          "Status": [
              "Environment update failed"
              ],
          "Severity": [
              "ERROR"
              ],
          "EnvironmentName": [
              "myEnvironment1",
              "myEnvironment2"
          ]
      }
  }
  ```
+ 負載平衡器、Auto Scaling 群組和執行個體的*其他資源狀態變更*

  ```
  {
     "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Other resource status change"
      ]
  }
  ```
+ 所有環境的*受管更新狀態變更*

  ```
  {
     "source": [
      "aws.elasticbeanstalk"
    ],
    "detail-type": [
      "Managed update status change"
      ]
  }
  ```
+ 從 Elastic Beanstalk 擷取*所有事件* (不包括 `detail-type` 區段)

  ```
  {
    "source": [
      "aws.elasticbeanstalk"
    ]
  }
  ```

## Elastic Beanstalk 事件範例
<a name="eb-eventbridge-examples"></a>

以下是*資源狀態變更*的 Elastic Beanstalk 事件範例：

```
{ 
   "version":"0",
   "id":"1234a678-1b23-c123-12fd3f456e78",
   "detail-type":"Elastic Beanstalk resource status change",
   "source":"aws.elasticbeanstalk",
   "account":"111122223333",
   "time":"2020-11-03T00:31:54Z",
   "region":"us-east-1",
   "resources":[
      "arn:was:elasticbeanstalk:us-east-1:111122223333:environment/myApplication/myEnvironment"
   ],
   "detail":{
      "Status":"Environment creation started",
      "EventDate":1604363513951,
      "ApplicationName":"myApplication",
      "Message":"createEnvironment is starting.",
      "EnvironmentName":"myEnvironment",
      "Severity":"INFO"
   }
}
```

以下是*運作狀態變更*的 Elastic Beanstalk 事件範例：

```
{ 
   "version":"0",
   "id":"1234a678-1b23-c123-12fd3f456e78",
   "detail-type":"Health status change",
   "source":"aws.elasticbeanstalk",
   "account":"111122223333",
   "time":"2020-11-03T00:34:48Z",
   "region":"us-east-1",
   "resources":[
      "arn:was:elasticbeanstalk:us-east-1:111122223333:environment/myApplication/myEnvironment"
   ],
   "detail":{
      "Status":"Environment health changed",
      "EventDate":1604363687870,
      "ApplicationName":"myApplication",
      "Message":"Environment health has transitioned from Pending to Ok. Initialization completed 1 second ago and took 2 minutes.",
      "EnvironmentName":"myEnvironment",
      "Severity":"INFO"
   }
}
```

## Elastic Beanstalk 事件欄位映射
<a name="eb-eventbridge-mapping"></a>

下表會將 Elastic Beanstalk 事件欄位及其可能的字串值映射至 EventBridge `detail-type` 欄位。如需有關 EventBridge 如何處理服務事件模式的詳細資訊，請參閱 [EventBridge 中的事件和事件模式](https://docs.aws.amazon.com//eventbridge/latest/userguide/eventbridge-and-event-patterns.html)。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/AWSHowTo.eventbridge.html)