本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions API 继续长时间运行的工作流程(建议)
AWS Step Functions 旨在运行持续时间和步骤数量有限的工作流程。标准工作流程执行的最长持续时间为一年,事件数为 2.5 万个(请参阅 Step Functions 服务配额)。
对于长时间运行的执行,可以通过从 Task
状态启动新的工作流程执行,来避免达到硬配额。您需要将工作流程分解为更小的状态机,这些状态机在新的执行中继续正在进行的工作。
要启动新的工作流程执行,请从 Task
状态调用 StartExecution
API 操作并传递必要的参数。
Step Functions 可以通过调用自己的 API 以作为集成服务来启动工作流执行。我们建议您使用这种方法来避免长时间运行的执行超出服务限额。
第 1 步:创建一个长时间运行的状态机
创建一个长时间运行的状态机,您希望该状态机从另一个状态机的 Task
状态开始。在本教程中,将使用使用 Lambda 函数的状态机。
注意
请务必将此状态机的名称和 Amazon 资源名称复制到文本文件中以备稍后使用。
第 2 步:创建状态机以调用 Step Functions API 操作
从一个 Task
状态启动工作流执行
-
打开 Step Functions 控制台
,然后选择创建状态机。 -
在 选择模板对话框中,选择空白。
-
选择选择,以便在设计模式下打开工作流程工作室。
-
从操作选项卡中,将 StartExecution API 操作拖放到标有将第一个状态拖至此处的空白状态处。
-
选择 StartExecution 状态,然后在设计模式的配置选项卡中执行以下操作:
-
将状态重命名为
Start nested execution
。 -
对于集成类型,从下拉列表中选择 AWS 开发工具包 - 新建。
-
在 API 参数 中,执行以下操作:
-
对于
StateMachineArn
,请将示例 Amazon 资源名称替换为您的状态机 ARN。例如,输入使用 Lambda 的状态机的 ARN。 -
对于
Input
节点,将现有占位符文本替换为以下值:"Comment": "Starting workflow execution using a Step Functions API action"
-
确保 API 参数中的输入类似于以下内容:
{ "StateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:
LambdaStateMachine
", "Input": { "Comment": "Starting workflow execution using a Step Functions API action", "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" }
-
-
-
(可选)在 检查器面板 面板上选择定义,查看工作流中自动生成的 Amazon States Language (ASL) 定义。
提示
您也可以在 Workflow Studio 的代码编辑器中查看 ASL 的定义。在代码编辑器中,还可以编辑工作流的 ASL 定义。
-
为状态机指定一个名称。要执行此操作,请选择默认状态机名称 MyStateMachine 旁边的编辑图标。然后,找到状态机配置,在状态机名称框中指定一个名称。
对于本教程,请输入名称
ParentStateMachine
。 -
(可选)在状态机配置中,指定其他工作流设置,例如状态机类型及其执行角色。
在本教程中,请保留状态机设置中的所有默认选项。
如果您之前为状态机创建了具有正确权限的 IAM 角色并想使用该角色,请在权限中选择选择现有角色,然后从列表中选择一个角色。或者选择输入角色 ARN,然后为该 IAM 角色的 ARN 获取该角色。
-
在确认角色创建对话框中,选择确认继续。
您也可以选择查看角色设置,返回至状态机配置。
注意
如果您删除了 Step Functions 创建的 IAM 角色,Step Functions 在以后无法重新创建该角色。同样,如果您修改了该角色(例如,通过在 IAM 策略中从主体中删除 Step Functions),Step Functions 在以后也无法还原其原始设置。
第 3 步:更新 IAM 策略
要确保您的状态机有权限启动使用 Lambda 函数的状态机执行,您需要将内联策略附加到状态机的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的嵌入内联策略。
-
在 ParentStateMachine 页面上,选择 IAM 角色 ARN,导航到状态机的 IAM 角色页面。
-
为 ParentStateMachine 的 IAM 角色分配适当的权限,使其能够启动另一台状态机的执行。要添加该权限,请执行以下操作:
-
在 IAM 角色页面上,选择添加权限,然后选择创建内联策略。
-
在创建策略页面上,选择 JSON 选项卡。
-
使用以下策略替换现有文本:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:
us-east-2
:123456789012
:stateMachine:LambdaStateMachine
" ] } ] } -
选择查看策略。
-
指定策略名称,然后选择创建策略。
-
第 4 步:运行状态机
状态机执行是指运行工作流执行任务的实例。
-
在 ParentStateMachine 页面上,选择启动执行。
随即显示启动执行对话框。
-
在启动执行对话框中,执行以下操作:
-
(可选)输入自定义执行名称,以便覆盖生成的默认执行名称。
非 ASCII 名称和日志记录
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符不适用于 Amazon CloudWatch,因此我们建议您仅使用 ASCII 字符,这样您就可以在 CloudWatch 中跟踪指标。
-
(可选)在输入框中,以 JSON 格式输入输入值以便运行工作流。
-
选择启动执行。
-
Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。
要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详细信息概览。
-
-
打开 LambdaStateMachine 页面,注意由 ParentStateMachine 触发的新执行。