

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

# 教學課程：使用 EventBridge 來記錄 Amazon EC2 執行個體的狀態
<a name="eb-log-ec2-instance-state"></a>

您可以建立一個 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 函數，記錄 [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 執行個體狀態的變化。您可以建立[規則](eb-rules.md)，當有狀態轉換或有轉移到一或多個有興趣的狀態時執行 Lambda 函數。在此教學中，您將記錄任何新執行個體的啟動。

**Topics**
+ [步驟 1：建立 AWS Lambda 函數](#eb-ec2-create-lambda-function)
+ [步驟 2：建立規則](#eb-ec2-create-rule)
+ [步驟 3：測試規則](#eb-api-test-rule)
+ [步驟 4：確認成功](#success)
+ [步驟 5：清除您的資源](#cleanup)

## 步驟 1：建立 AWS Lambda 函數
<a name="eb-ec2-create-lambda-function"></a>

建立 Lambda 函數以記錄狀態變更[事件](eb-events.md)。當您在步驟 2 建立規則時指定此函數。

**建立 Lambda 函數**

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 選擇 **Create function (建立函數)**。

1. 選擇**從頭開始撰寫**。

1. 輸入 Lambda 函數的名稱和描述。例如，將函數命名為 `LogEC2InstanceStateChange`。

1. 將其餘選項保留為預設值並選擇**建立函數**。

1. 在函數頁面的**程式碼**標籤上，按兩下 **index.js**。

1. 將現有的程式碼取代為以下程式碼。

   ```
   'use strict';
   
   exports.handler = (event, context, callback) => {
       console.log('LogEC2InstanceStateChange');
       console.log('Received event:', JSON.stringify(event, null, 2));
       callback(null, 'Finished');
   };
   ```

1. 選擇**部署**。

## 步驟 2：建立規則
<a name="eb-ec2-create-rule"></a>

建立規則來執行您在步驟 1 中建立的 Lambda 函數。規則會在您啟動 Amazon EC2 執行個體時執行。

**若要建立 EventBridge 規則**

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

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

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

1. 輸入規則的名稱和描述。例如，命名規則 `TestRule`

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

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

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

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

1. 針對**事件模式**，請執行下列動作：

   1. 針對**事件來源**，請從下拉式清單中選取 **EC2**。

   1. 在**事件類型**中，從下拉式清單中選擇 **EC2 執行個體狀態變更通知**。

   1. 選擇**特定狀態**並從下拉式清單中選擇**正在執行**。

   1. 選擇**任何執行個體**。

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

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

1. 針對**選取目標**，請從下拉式清單中選擇 **Lambda 函數**。

1. 在**函數**中，選取您在**步驟 1：建立 Lambda 函數** 區段中建立的 Lambda 函數。在此範例中，選取 `LogEC2InstanceStateChange`。

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

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

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

## 步驟 3：測試規則
<a name="eb-api-test-rule"></a>

您可以使用 Amazon EC2 主控台停用 Amazon EC2 執行個體，以測試您的規則。等待幾分鐘讓執行個體停止，然後在 CloudWatch 主控台上檢查您的 AWS Lambda 指標，以確認您的函數是否執行。

**停用執行個體以測試您的規則**

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

1. 啟動執行個體。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。

1. 停止執行個體。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[停止和啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)。

1. 若要檢視 Lambda 函數的輸出，請執行下列動作：

   1. 在 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

   1. 在導覽窗格中，選擇**日誌**。

   1. 為 Lambda 函數 (`/aws/lambda/{{function-name}}`) 選取日誌群組名稱。

   1. 選取日誌串流的名稱以檢視函數為您停止的執行個體提供的資料。

1. (選用) 完成後，請終止已停止的執行個體。如需詳細資訊，請參閱*《Amazon EC2 使用者指南》*中的[終止您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

## 步驟 4：確認成功
<a name="success"></a>

如果您在 CloudWatch logs 中看到 Lambda 事件，表示您已成功完成本教學課程。如果事件不在 CloudWatch logs中，請驗證規則是否已成功建立，開始進行故障診斷，如果規則看起來正確，請驗證 Lambda 函數的程式碼是否正確無誤。

## 步驟 5：清除您的資源
<a name="cleanup"></a>

除非您想要保留為此教學課程建立的資源，否則您現在便可刪除。透過刪除不再使用 AWS 的資源，您可以避免 AWS 帳戶產生不必要的費用。

**刪除 EventBridge 規則**

1. 開啟 EventBridge 主控台的[規則頁面](https://console.aws.amazon.com/events/home#/rules)。

1. 選取您建立的規則。

1. 選擇**刪除**。

1. 選擇**刪除**。

**若要刪除 Lambda 函數**

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選取您建立的函數。

1. 選擇 **動作**、**刪除**。

1. 選擇 **刪除**。