

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

# 教程：使用 EventBridge 侦听 AWS Batch 作业事件
<a name="batch_cwet"></a>

在本教程中，您设置一个简单的 AWS Lambda 函数，该函数会侦听 AWS Batch 任务事件并将这些事件写出到 CloudWatch Logs 日志流。

## 先决条件
<a name="cwet_prereqs"></a>

本教程假定您具备可正常工作的计算环境和作业队列，随时可以接受作业。如果您没有要从中捕获事件的正在运行的计算环境和作业队列，请执行[AWS Batch 教程入门](Batch_GetStarted.md)中的步骤创建一个。在本教程结束时，您可选择向此作业队列提交作业，以测试您是否已正确配置 Lambda 函数。

**Topics**
+ [

## 先决条件
](#cwet_prereqs)
+ [

# 教程：创建 Lambda 函数
](cwet_create_lam.md)
+ [

# 教程：注册事件规则
](cwet_register_event_rule.md)
+ [

# 教程：测试配置
](cwet_test.md)

# 教程：创建 Lambda 函数
<a name="cwet_create_lam"></a>

 在此过程中，您将创建一个简单的 Lambda 函数来充当 AWS Batch 事件流消息的目标。

**创建目标 Lambda 函数**

1. 通过 [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 打开 AWS Lambda 控制台。

1. 选择 **Create function**（创建函数），然后选择 **Author from scratch**（从头开始创作）。

1. 对于**函数名称**，请输入 **batch-event-stream-handler**。

1. 对于**运行时系统**，选择 **Python 3.8**。

1. 选择**创建函数**。

1. 在**代码源**部分中，编辑示例代码以匹配以下示例：

   ```
   import json
   
   
   def lambda_handler(event, _context):
       # _context is not used
       del _context
       if event["source"] != "aws.batch":
           raise ValueError("Function only supports input from events with a source type of: aws.batch")
   
       print(json.dumps(event))
   ```

   这是一个简单的 Python 3.8 函数，可输出由 AWS Batch 发送的事件。如果一切配置正确，则在本教程结束时，您将在与此 Lambda 函数关联的 CloudWatch Logs 日志流中看到事件详细信息。

1. 选择**部署**。

# 教程：注册事件规则
<a name="cwet_register_event_rule"></a>

在该部分中，您创建一个 EventBridge 事件规则，用于捕获来自 AWS Batch 资源的任务事件。该规则捕获来自定义该规则的账户中的 AWS Batch 的所有事件。作业消息本身包含有关事件源的信息 (包括将事件源提交到其中的作业队列)。您可以使用此信息以编程方式过滤和排序事件。

**注意**  
在使用 AWS 管理控制台 创建事件规则时，控制台会自动为 EventBridge 添加 IAM 权限以调用 Lambda 函数。但是，如果您使用 AWS CLI 创建事件规则，则必须明确授予权限。有关更多信息，请参阅《Amazon EventBridge 用户指南》中的[事件和事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)**。

**创建 EventBridge 规则**

1. 打开位于 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 的 Amazon EventBridge 控制台。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

1. 为规则输入名称和描述。

   规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。

1. 对于**事件总线**，请选择要与此规则关联的事件总线。如果您希望此规则对来自您自己的账户的匹配事件触发，请选择 **AWS默认事件总线**。当您账户中的某个 AWS 服务发出一个事件时，它始终会发送到您账户的默认事件总线。

1. 对于**规则类型**，选择**具有事件模式的规则**。

1. 选择**下一步**。

1. 对于**事件源**，选择**其他**。

1. 对于**事件模式**，选择 **自定义模式（JSON 编辑器）**。

1. 在文本区域中粘贴以下事件模式。

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

   此规则适用于您的所有 AWS Batch 组和每个 AWS Batch 事件。或者，您也可以创建一个更具体的规则来过滤掉一些结果。

1. 选择**下一步**。

1. 对于 **Target types**（目标类型），选择 **AWS service**（AWS 服务）。

1. 对于**选择目标**，请选择 **Lambda 函数**，然后选择您的 Lambda 函数。

1. （可选）对于 **Additional settings**（其他设置），执行以下操作：

   1. 对于 **Maximum age of event**（事件的最大时长），输入一分钟（00:01）与 24 小时（24:00）之间的值。

   1. 对于**重试尝试**，输入 0 到 185 之间的数字。

   1. 对于**死信队列**，选择是否使用标准 Amazon SQS 队列作为死信队列。如果与此规则匹配的事件未成功传递到目标，EventBridge 会将这些事件发送到死信队列。请执行以下操作之一：
      + 选择**无**不使用死信队列。
      + 选择**在当前 AWS 账户中选择一个 Amazon SQS 队列用作死信队列**，然后从下拉列表中选择要使用的队列。
      + 选择**在其他 Amazon SQS 队列中选择其他队列 AWS 帐户作为死信队列**，然后输入要使用的队列的 ARN。您必须将基于资源的策略附加到队列，以授予 EventBridge 向其发送消息的权限。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[授予死信队列的权限](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rule-dlq.html#eb-dlq-perms)。

1. 选择**下一步**。

1. （可选）为规则输入一个或多个标签。有关更多信息，请参阅《Amazon EventBridge 用户指南》**中的 [Amazon EventBridge 标签](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-tagging.html)。

1. 选择**下一步**。

1. 查看规则详细信息并选择**创建规则**。

# 教程：测试配置
<a name="cwet_test"></a>

您现在可以通过向作业队列提交作业来测试您的 EventBridge 配置。如果所有配置都正确完成，您的 Lambda 函数将触发并将事件数据写入到该函数的 CloudWatch Logs 日志流。

**测试配置**

1. 打开AWS Batch控制台，地址：[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 提交新的 AWS Batch 作业。有关更多信息，请参阅 [教程：提交作业](submit_job.md)。

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

1. 在导航窗格中，选择 **Logs** (日志)，然后选择 Lambda 函数的日志组（例如，**/aws/lambda/***my-function*）。

1. 选择日志流以查看事件数据。