本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Step Functions 提供了一个用于与亚马逊集成的服务集成 API EventBridge。了解如何通过直接从 Step Functions 工作流程发送自定义事件,来构建事件驱动型应用程序。
要了解如何在 Step Functions 中与 AWS 服务集成,请参阅集成 服务和在 Step Functions 中将参数传递给服务 API。
优化 EventBridge 集成的关键特性
-
执行 ARN 和状态机 ARN 会自动附加到每个
PutEventsRequestEntry
的Resources
字段。 -
如果来自
PutEvents
的响应包含非零的FailedEntryCount
,则Task
状态会失败,并出现错误EventBridge.FailedEntry
。
要使用该 PutEvents
API,你需要在账户中创建一个与你要发送的事件的特定模式相匹配的 EventBridge 规则。例如,您可以:
-
在您的账户中创建 Lambda 函数,用于接收和打印与规则匹配的事件。 EventBridge
-
在您的账户中使用默认事件总线创建一条 EventBridge 规则,该规则与特定事件模式相匹配并以 Lambda 函数为目标。
有关更多信息,请参阅:
-
在 EventBridge 用户指南 PutEvents中@@ 使用添加Amazon EventBridge 活动。
-
服务集成模式中的等待具有任务令牌的回调。
以下内容包含一个发送自定义事件的 Task
:
{
"Type": "Task",
"Resource": "arn:aws:states:::events:putEvents",
"Parameters": {
"Entries": [
{
"Detail": {
"Message": "MyMessage"
},
"DetailType": "MyDetailType",
"EventBusName": "MyEventBus",
"Source": "my.source"
}
]
},
"End": true
}
注意
在 Step Functions 中,任务的最大输入或结果数据大小有一个配额。这样,当您向其他服务发送数据或从其他服务接收数据时,您只能使用 256 KiB 的数据作为 UTF-8 编码的字符串。请参阅 与状态机执行相关的配额。
优化 EventBridge 的 API
支持 EventBridge 的 API 和语法包括:
错误处理
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
以下示例模板展示了如何根据状态机定义中的资源 AWS Step Functions 生成 IAM 策略。有关更多信息,请参阅Step Functions 如何为集成服务生成 IAM 策略 和探索 Step Functions 中的服务集成模式。
PutEvents
静态资源
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"events:PutEvents"
],
"Resource": [
"arn:aws:events:us-east-1:123456789012
:event-bus/stepfunctions-sampleproject-eventbus"
],
"Effect": "Allow"
}
]
}
动态资源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"events:PutEvents"
],
"Resource": "arn:aws:events:*:*:event-bus/*"
}
]
}