

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

# 教學課程：建立範例 Amazon EventBridge 應用程式
<a name="eb-tutorial-get-started"></a>

您可以使用 EventBridge，透過[規則](eb-rules.md)將[事件](eb-events.md)路由傳送至特定的 Lambda 函數。

在本教學課程中，您將使用 [ GitHub 儲存庫](https://github.com/aws-samples/amazon-eventbridge-producer-consumer-example)中的 AWS CLI Node.js 和程式碼來建立下列項目：
+ 產生銀行 ATM 交易事件的 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 函數。
+ 用作 EventBridge 規則[目標](eb-targets.md)的 Lambda 函數。
+ 以及根據[事件模式](eb-event-patterns.md)將建立的事件路由傳送至正確下游函數的規則。

此範例使用 AWS SAM 範本來定義 EventBridge 規則。若要進一步瞭解如何搭配 EventBridge 使用 AWS SAM 範本，請參閱 [使用 AWS Serverless Application Model 範本部署 Amazon EventBridge 資源](eb-use-sam.md)。

在儲存庫中，*atmProducer* 子目錄包含 `handler.js`，其代表產生事件的 ATM 服務。此程式碼是以 Node.js 撰寫的 Lambda 處理常式，並使用這行 JavaScript 程式碼，透過 [AWS SDK](https://www.npmjs.com/package/aws-sdk) 將事件發佈至 EventBridge。

```
const result = await eventbridge.putEvents(params).promise()
```

該目錄還包含 `events.js`，列出了一個 Entries 數組中的幾個測試事務。單個事件在 JavaScript 中的定義如下：

```
{
  // Event envelope fields
  Source: 'custom.myATMapp',
  EventBusName: 'default',
  DetailType: 'transaction',
  Time: new Date(),

  // Main event body
  Detail: JSON.stringify({
    action: 'withdrawal',
    location: 'MA-BOS-01',
    amount: 300,
    result: 'approved',
    transactionId: '123456',
    cardPresent: true,
    partnerBank: 'Example Bank',
    remainingFunds: 722.34
  })
}
```

事件的*詳細資訊*區段會指定交易屬性。這些措施包括 ATM 的位置、金額、合作銀行以及交易結果。

*atmConsumer* 子目錄中的 `handler.js` 檔案包含三個函數：

```
exports.case1Handler = async (event) => {
  console.log('--- Approved transactions ---')
  console.log(JSON.stringify(event, null, 2))
}

exports.case2Handler = async (event) => {
  console.log('--- NY location transactions ---')
  console.log(JSON.stringify(event, null, 2))
}

exports.case3Handler = async (event) => {
  console.log('--- Unapproved transactions ---')
  console.log(JSON.stringify(event, null, 2))
}
```

每個函數都會接收交易事件，這些事件會透過 `console.log` 陳述式記錄到 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html) 中。消費者函數獨立於生產者運行，並且不知道事件來源。

路由邏輯包含在應用程式 AWS SAM 範本所部署的 EventBridge 規則中。這些規則會評估傳入的事件串流，並將相符的事件路由傳送至目標 Lambda 函數。

規則使用屬於 JSON 物件的事件模式。JSON 物件的結構與其相符的事件相同。以下是其中一個規則的事件模式。

```
{
  "detail-type": ["transaction"],
  "source": ["custom.myATMapp"],
  "detail": {
    "location": [{
      "prefix": "NY-"
    }]
  }
}
```

**Topics**
+ [先決條件](#eb-gs-prereqs)
+ [步驟 1：建立應用程式](#eb-gs-create-application)
+ [步驟 2：執行應用程式](#eb-gs-run-application)
+ [步驟 3：檢查日誌並驗證應用程式運作是否正常](#eb-gs-check-logs)
+ [步驟 4：清除您的資源](#cleanup)

## 先決條件
<a name="eb-gs-prereqs"></a>

教學課程需要使用以下項目：
+  AWS 帳戶。如果您還沒有[AWS 帳戶，請建立](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html)帳戶。
+ AWS CLI 已安裝。若要安裝 AWS CLI，請參閱[安裝、更新和解除安裝第 2 AWS CLI 版](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
+ 已安裝 Node.js 12.x。若要安裝 Node.js，請參閱[下載](https://nodejs.org/en/download/)。

## 步驟 1：建立應用程式
<a name="eb-gs-create-application"></a>

若要設定範例應用程式，您將使用 AWS CLI 和 Git 來建立您需要 AWS 的資源。

**建立應用程式**

1. [登入 AWS](https://console.aws.amazon.com/console/home)。

1. [安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) 並在[本機電腦上安裝 AWS Serverless Application Model CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)。

1. 建立一個新目錄，然後導航到終端中的該目錄。

1. 在命令列輸入 `git clone https://github.com/aws-samples/amazon-eventbridge-producer-consumer-example`：

1. 在命令列中執行以下命令：

   ```
   cd ./amazon-eventbridge-producer-consumer-example
   sam deploy --guided
   ```

1. 在終端中，執行下列動作：

   1. 針對 `Stack Name`，請輸入堆疊的名稱。例如，命名堆疊 `Test`。

   1. 針對 `AWS Region`，請輸入區域。例如：`us-west-2`。

   1. 針對 `Confirm changes before deploy`，請輸入 `Y`。

   1. 針對 `Allow SAM CLI IAM role creation`，請輸入 `Y`

   1. 針對 `Save arguments to configuration file`，請輸入 `Y`

   1. 針對 `SAM configuration file`，請輸入 `samconfig.toml`。

   1. 針對 `SAM configuration environment`，請輸入 `default`。

## 步驟 2：執行應用程式
<a name="eb-gs-run-application"></a>

由於您已設定資源，您將使用主控台來測試函數。

**執行應用程式**

1. 在您部署 AWS SAM 應用程式的相同區域中開啟 [Lambda 主控台](https://console.aws.amazon.com/lambda/)。

1. 有四個帶有字首 **atm-demo** 的 Lambda 函數。先選取 **atmProducerFn** 函數，然後選擇**動作**，進行**測試**。

1. 輸入 `Test` 作為**名稱**。

1. 選擇**測試**。

## 步驟 3：檢查日誌並驗證應用程式運作是否正常
<a name="eb-gs-check-logs"></a>

由於您已執行應用程式，您將使用主控台來檢查 CloudWatch Logs。

**檢查日誌**

1. 在執行 AWS SAM 應用程式的相同區域中開啟 [CloudWatch 主控台](https://console.aws.amazon.com/cloudwatch/)。

1. 選擇 **Logs** (日誌)，然後選擇 **Log groups** (日誌群組)。

1. 選取包含 **atmConsumerCase1** 的日誌群組。您會看到兩個串流，代表自動櫃員機核准的兩筆交易。選擇日誌串流以檢視输出。

1. 瀏覽回日誌群組清單，然後選取包含 **atmConsumerCase2** 的日誌群組。您會看到兩個串流，代表符合*紐約*地點篩選條件的兩筆交易。

1. 瀏覽回日誌群組清單並選取包含 **atmConsumerCase3** 的日誌群組。打開串流以查看被拒絕的交易。

## 步驟 4：清除您的資源
<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. 選擇**刪除**。

**若要刪除 CloudWatch Logs 日誌群組**

1. 開啟 [Cloudwatch 主控台](https://console.aws.amazon.com/Cloudwatch/home)。

1. 選擇**日誌**、**日誌群組**。

1. 選取在教學課程中建立的日誌群組。

1. 選擇**動作**、**刪除日誌群組**。

1. 選擇**刪除**。