本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon Step Functions 执行作为集成服务进行管理
Step Functions 与其自己的 API 集成以作为服务集成。这允许 Step Functions 直接从正在运行的执行的任务状态开始新的状态机执行。构建新的工作流时,请使用嵌套工作流执行降低主要工作流的复杂性并重用常用流程。
这些区域有:运行作业 (.sync)集成模式可用。
请注意,没有针对请求响应要么等待具有任务令牌的回调集成模式。
有关更多信息,请参阅下列内容:
支持的Step Functions API 和语法:
下面包括一个 Task
状态,此状态开始执行另一个状态机并等待其完成。
{
"Type":"Task",
"Resource":"arn:aws:states:::states:startExecution.sync:2",
"Parameters":{
"Input":{
"Comment": "Hello world!"
},
"StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld",
"Name":"ExecutionName"
},
"End":true
}
下面包括一个 Task
状态,此状态开始执行另一个状态机。
{
"Type":"Task",
"Resource":"arn:aws:states:::states:startExecution",
"Parameters":{
"Input":{
"Comment": "Hello world!"
},
"StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld",
"Name":"ExecutionName"
},
"End":true
}
下面这个状态Task
实现了回调服务集成模式。
{
"Type":"Task",
"Resource":"arn:aws:states:::states:startExecution.waitForTaskToken",
"Parameters":{
"Input":{
"Comment": "Hello world!",
"token.$": "$$.Task.Token"
},
"StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld",
"Name":"ExecutionName"
},
"End":true
}
要将嵌套的工作流执行与启动它的父执行相关联,请传递一个特殊命名的参数,该参数包括从上下文对象中提取的执行 ID。启动嵌套执行时,使用名为 AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID
的参数。通过将 .$
附加到参数名称并在上下文对象中通过 $$.Execution.Id
引用 ID 来传递执行 ID。有关更多信息,请参阅 访问上下文对象。
{
"Type":"Task",
"Resource":"arn:aws:states:::states:startExecution.sync",
"Parameters":{
"Input":{
"Comment": "Hello world!",
"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"
},
"StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld",
"Name":"ExecutionName"
},
"End":true
}
嵌套状态机返回以下内容:
资源 | 输出 |
---|---|
startExecution.sync | 字符串 |
startExecution.sync:2 | JSON |
两者都将等待嵌套状态机完成,但它们返回不同的 Output
格式。例如,如果您创建一个可返回对象的 Lambda 函数{ "MyKey": "MyValue" }
,你会得到以下响应:
对于 startExecution.sync:
{
<other fields>
"Output": "{ \"MyKey\": \"MyValue\" }"
}
对于 startExecution.sync:2:
{
<other fields>
"Output": {
"MyKey": "MyValue"
}
}
为嵌套状态机配置 IAM 权限
父状态机使用轮询和事件确定子状态机是否已完成执行。轮询需要权限states:DescribeExecution
而事件通过 EventBridge to Step Functions 需要权限events:PutTargets
、events:PutRule
, 和events:DescribeRule
. 如果您的 IAM 角色缺少这些权限,则父状态机可能会有一段延迟,然后才知道子状态机的执行已完成。
对于调用以调用的状态机StartExecution
对于单个嵌套工作流程执行,请使用策略以限制对该状态机的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:
[[region]]
:[[accountId]]
:stateMachine:[[stateMachineName]]
" ] } ] }
有关更多信息,请参阅 。嵌套工作流程执行的 IAM 权限.