使用 EventBridge 自动执行 Step Functions 事件传送 - AWS Step Functions

使用 EventBridge 自动执行 Step Functions 事件传送

使用 EventBridge,可以从 Step Functions 标准工作流程中选择事件,来发送到其它服务进行额外处理。此技术提供了一种灵活的方法来松散地连接组件并监控资源。

Amazon EventBridge 是一项无服务器服务,它将应用程序组件连接在一起,以构建可扩展的事件驱动型应用程序。事件驱动型架构是一种构建松耦合软件系统的风格,这些系统通过发出和响应事件 来协同工作。事件表示状态更改或更新。

通过使用 EventBridge 向其它服务传送 Step Functions 事件,可以监控标准工作流程,而无需持续调用 DescribeExecution API 来获取状态。状态机执行中的状态更改会自动发送到 EventBridge。可以使用这些事件来定位服务。例如,事件可能会调用 AWS Lambda 函数,将消息发布到 Amazon Simple Notification Service(Amazon SNS)主题,甚至运行另一个 SFN 工作流程。

事件传送的工作原理

Step Functions 生成事件并将其发送到默认的 EventBridge 事件总线,事件总线在每个 AWS 账户中自动预置。事件总线是接收事件并将其传送到零个或多个目的地或目标的路由器。目标是其它 AWS 服务。可以为事件总线指定规则,来将事件与规则的事件模式 进行比较。当事件与模式匹配时,事件总线会将事件发送到指定的目标。下图显示了此流程:

AWS 服务将事件发送到 EventBridge(其中规则与事件匹配),并将事件发送到目标。
标准工作流程与快速工作流程

只有标准工作流程才能向 EventBridge 发出事件。要监控快速工作流程的执行,可以使用 CloudWatch Logs。请参阅CloudWatch Logs 中的日志记录

Step Functions 事件

Step Functions 会自动将以下事件发送到默认的 EventBridge 事件总线。与规则的事件模式相匹配的事件会尽力传送给指定的目标。事件可能不按顺序传送。

有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 EventBridge events

事件详细信息类型 描述

执行状态更改

表示状态机执行状态的变化。

使用 EventBridge 传送 Step Functions 事件

要让 EventBridge 默认事件总线将 Step Functions 事件发送到目标,必须创建规则。每条规则都包含一个事件模式,EventBridge 将其与在事件总线上接收到的每个事件进行匹配。如果事件数据与指定的事件模式匹配,EventBridge 会将该事件传送给规则的目标。

有关创建事件总线规则的全面说明,请参阅《EventBridge 用户指南》中的 Creating rules that react to events

也可以从 Step Functions 控制台为特定的状态机创建事件总线规则:

  • 在状态机的详细信息页面上,选择操作,然后选择创建 EventBridge 规则

    EventBridge 控制台打开至创建规则页面,状态机被选为规则的事件源。

  • 按照《EventBridge 用户指南》Creating rules that react to events 中详述的过程进行操作。

创建与 Step Functions 事件匹配的事件模式

每个事件模式是一个 JSON 对象,其中包含:

  • 标识发送事件的服务的 source 属性。对于 Step Functions 事件,源为 aws.states

  • (可选):包含要匹配的事件类型数组的 detail-type 属性。

  • (可选):包含要匹配的其他事件数据的 detail 属性。

例如,以下事件模式与 Step Functions 中的所有执行状态更改事件相匹配:

{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"] }

尽管以下示例和与特定状态机关联的特定执行相匹配,但当执行失败或超时时:

{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["FAILED", "TIMED_OUT"], "stateMachineArn": ["arn:aws:states:region:account-id:stateMachine:state-machine"], "executionArn": ["arn:aws:states:region:account-id:execution:state-machine-name:execution-name"] } }

有关写入事件模式的更多信息,请参阅《EventBridge 用户指南》中的 Event patterns

使用事件触发 Step Functions 状态机

还可以将 Step Functions 状态机指定为 EventBridge 事件总线规则的目标。这使您能够触发 Step Functions 工作流的执行,用于响应另一项 AWS 服务中的事件。

有关更多信息,请参阅 Amazon EventBridge 用户指南中的 Amazon EventBridge 目标

Step Functions 事件详细信息参考

来自 AWS 服务的所有事件都有一组公共字段,其中包含有关事件的元数据,例如作为事件来源的 AWS 服务、事件的生成时间、事件发生的账户和区域。有关这些常规字段的定义,请参阅《Amazon EventBridge User Guide》中的 Event structure reference

此外,每个事件都有一个 detail 字段,其中包该特定事件专有的数据。

当使用 EventBridge 来选择和管理 Step Functions 事件时,请记住以下几点:

  • 来自 Step Functions 的所有事件的 source 字段都设置为 aws.states

  • detail-type 字段指定事件类型。

    例如 Step Functions Execution Status Change

  • detail 字段包含该特定事件专有的数据。

有关如何构造使规则能够与 Step Functions 事件匹配的事件模式的信息,请参阅《Amazon EventBridge 用户指南》中的 Event patterns

有关事件以及 EventBridge 如何处理事件的更多信息,请参阅《Amazon EventBridge User Guide》中的 Amazon EventBridge events

执行状态更改

表示状态机执行状态的变化。

之所以包含下面的 sourcedetail-type 字段,是因为它们包含 Step Functions 事件的特定值。有关所有事件中包含的其它元数据字段的定义,请参阅《Amazon EventBridge 用户指南》中的 Event structure reference

事件结构

{ . . ., "detail-type": "Step Functions Execution Status Change", "source"": "aws.states", . . ., "detail"": { "executionArn"" : "string", "input" : "string", "inputDetails" : { "included" : "boolean" }, "name" : "string", "output" : "string", "outputDetails" : { "included" : "boolean" }, "startDate" : "integer", "stateMachineArn" : "string", "stopDate" : "integer", "status" : "RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE" } }

备注

执行状态更改事件可以在其定义中包含输入属性。对于某些事件,执行状态更改事件还可以在其定义中包含输出属性。

  • 如果发送到 EventBridge 的转义输入和转义输出组合超过 248 KiB,则该输入将被排除在外。同样,如果转义输出也超过 248 KiB,则该输出也将被排除在外。这是事件配额的结果。

  • 您可以使用 inputDetailsoutputDetails 属性确定有效负载是否已被截断。有关更多信息,请参阅 CloudWatchEventsExecutionDataDetails 数据类型

  • 对于标准工作流程,可以使用 DescribeExecution 来查看完整的输入和输出。

    DescribeExecution 不适用于快速工作流。如果要查看完整的输入/输出,则可以:

示例

例 执行状态更改:执行已启动
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws::states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "RUNNING", "startDate": 1551225271984, "stopDate": null, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }
例 执行状态更改:执行已成功
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "SUCCEEDED", "startDate": 1547148840101, "stopDate": 1547148840122, "input": "{}", "inputDetails": { "included": true }, "output": "\"Hello World!\"", "outputDetails": { "included": true } } }
例 执行状态更改:执行已失败
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "FAILED", "startDate": 1551225146847, "stopDate": 1551225151881, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }
例 执行状态更改:已超时
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "TIMED_OUT", "startDate": 1551224926156, "stopDate": 1551224927157, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null
例 执行状态更改:已中止
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "account-id", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:account-id:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:account-id:stateMachine:state-machine", "name": "execution-name", "status": "ABORTED", "startDate": 1551225014968, "stopDate": 1551225017576, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }