

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：创建 Amazon EventBridge 示例应用程序
<a name="eb-tutorial-get-started"></a>

您可以使用 EventBridge，通过[规则](eb-rules.md)将[事件](eb-events.md)路由到特定 Lambda 函数。

在本教程中，您将使用 AWS CLI、Node.js 和 [GitHub 存储库](https://github.com/aws-samples/amazon-eventbridge-producer-consumer-example)中的代码来创建以下内容：
+ 一个 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 函数，为银行 ATM 交易生成事件。
+ 三个 Lambda 函数，用作 EventBridge 规则的[目标](eb-targets.md)。
+ 以及根据[事件模式](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 开发工具包](https://www.npmjs.com/package/aws-sdk)将事件发布到 EventBridge。

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

此目录还包含 `events.js`，在条目数组中列出了几个测试交易。在 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
  })
}
```

事件的 *Detail* 部分指定了交易属性。其中包括 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) 中。消费者函数独立于生产者运行，它们不知道事件的源。

路由逻辑包含在 EventBridge 规则中，这些规则由应用程序的 AWS SAM 模板部署。这些规则会评估传入的事件流，并将匹配的事件路由到目标 Lambda 函数。

这些规则使用的事件模式是 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，请参阅[安装、更新和卸载 AWS CLI 版本 2](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. 有四个 Lambda 函数的前缀为 **atm-demo**。选择 **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** 的日志组。您会看到两个数据流，分别代表 ATM 批准的两笔交易。选择要查看输出的日志流。

1. 返回日志组列表，然后选择包含 **atmConsumerCase2** 的日志组。您将看到两个数据流，分别代表与*纽约* 位置筛选器匹配的两笔交易。

1. 返回日志组列表，然后选择包含 **atmConsumerCase3** 的日志组。打开流，查看被拒绝的交易。

## 步骤 4：清理资源
<a name="cleanup"></a>

除非您想要保留为本教程创建的资源，否则可立即将其删除。请删除您不再使用的 AWS 资源，这样可防止您的 AWS 账户产生不必要的费用。

**删除 EventBridge 规则**

1. 在 EventBridge 控制台中打开[规则页面](https://console.aws.amazon.com/events/home#/rules)。

1. 选择您创建的规则。

1. 选择 **Delete**。

1. 选择 **Delete**。

**删除 Lambda 函数**

1. 打开 Lamba 控制台的[函数页面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 选择您创建的函数。

1. 依次选择 **Actions** 和 **Delete**。

1. 选择**删除**。

**删除 CloudWatch Logs 日志组**

1. 打开 [CloudWatch 控制台](https://console.aws.amazon.com/Cloudwatch/home)。

1. 依次选择**日志**、**日志组**。

1. 选择在本教程中创建的日志组。

1. 依次选择 **Actions**（操作）和 **Delete log group(s)**（删除日志组）。

1. 选择 **Delete**。