

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

# 使用 Step Functions 添加 EventBridge 事件
<a name="connect-eventbridge"></a>

Step Functions 提供了一个用于与亚马逊集成的服务集成 API EventBridge。了解如何通过直接从 Step Functions 工作流程发送自定义事件，来构建事件驱动型应用程序。

要了解如何在 Step Functions 中与AWS服务集成，请参阅[集成 服务](integrate-services.md)和[在 Step Functions 中将参数传递给服务 API](connect-parameters.md)。

**优化 EventBridge 集成的关键特性**  
执行 ARN 和状态机 ARN 会自动附加到每个 `PutEventsRequestEntry` 的 `Resources` 字段。
如果来自 `PutEvents` 的响应包含非零的 `FailedEntryCount`，则 `Task` 状态会失败，并出现错误 `EventBridge.FailedEntry`。

 要使用该 `PutEvents` API，你需要在账户中创建一个与你要发送的事件的特定模式相匹配的 EventBridge 规则。例如，您可以：
+ 在您的账户中创建 Lambda 函数，用于接收和打印与规则匹配的事件。 EventBridge 
+  在您的账户中使用默认事件总线创建一条 EventBridge 规则，该规则与特定事件模式相匹配并以 Lambda 函数为目标。

 有关更多信息，请参阅:
+ 在 EventBridge 用户指南 PutEvents中@@ [使用添加Amazon EventBridge 活动](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-putevents.html)。
+ 服务集成模式中的[等待具有任务令牌的回调](connect-to-resource.md#connect-wait-token)。

以下内容包含一个发送自定义事件的 `Task`：

```
{
  "Type": "Task",
  "Resource": "arn:aws:states:::events:putEvents",
  "Arguments": {
    "Entries": [
      {
        "Detail": {
          "Message": "MyMessage"
        },
        "DetailType": "MyDetailType",
        "EventBusName": "MyEventBus",
        "Source": "my.source"
      }
    ]
  },
  "End": true
}
```

**输入或结果数据的配额**  
在服务之间发送或接收数据时，任务的最大输入或结果为 256 KiB，且需以 UTF-8 编码字符串形式呈现。请参阅[与状态机执行相关的配额](service-quotas.md#service-limits-state-machine-executions)。

## 优化 EventBridge 的 API
<a name="connect-eventbridge-apis"></a>

支持 EventBridge 的 API 和语法包括：
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)

## 错误处理
<a name="connect-eventbridge-error"></a>

`PutEvents` API 接受一个条目数组作为输入，然后返回一个结果条目数组。只要 `PutEvents` 操作成功，即使有一个或多个条目失败，`PutEvents` 也会返回 HTTP 200 响应。`PutEvents` 会在 `FailedEntryCount` 字段中返回失败条目的数量。

Step Functions 会检查 `FailedEntryCount` 是否大于零。如果大于零，Step Functions 将以 `EventBridge.FailedEntry` 错误结束状态。这样，当出现失败条目时，就可以使用 Step Functions 在任务状态上的内置错误处理功能来捕捉或重试，而不需要使用额外的状态来分析响应中的 `FailedEntryCount`。

**注意**  
如果已实现幂等性并能安全地重试所有条目，则可以使用 Step Functions 的重试逻辑。Step Functions 不会在重试前删除 `PutEvents` 输入数组中的成功条目。相反，它会使用原始的条目数组进行重试。

## 用于呼叫的 IAM 政策 EventBridge
<a name="eventbridge-iam"></a>

以下示例模板展示了如何根据状态机定义中的资源AWS Step Functions生成 IAM 策略。有关更多信息，请参阅[Step Functions 如何为集成服务生成 IAM 策略](service-integration-iam-templates.md)和[探索 Step Functions 中的服务集成模式](connect-to-resource.md)。

### `PutEvents`
<a name="eventbridge-iam-listconnections"></a>

*静态资源*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "events:PutEvents"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:event-bus/my-project-eventbus"
            ],
            "Effect": "Allow"
        }
    ]
}
```

*动态资源*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "events:PutEvents"
            ],
            "Resource": "arn:aws:events:*:*:event-bus/*"
        }
    ]
}
```