本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions API 继续长时间运行的工作流程(建议)
Amazon Step Functions 旨在以有限的持续时间和步骤数运行工作流程。标准工作流程执行的最长持续时间为一年,事件数为 2.5 万个(请参阅 Step Functions 服务配额)。
对于长时间运行的执行,可以通过从 Task 状态启动新的工作流程执行,来避免达到硬配额。您需要将工作流程分解为更小的状态机,这些状态机在新的执行中继续正在进行的工作。
要启动新的工作流程执行,请从 Task 状态调用 StartExecution API 操作并传递必要的参数。
Step Functions 可以通过调用自己的 API 以作为集成服务来启动工作流执行。我们建议您使用这种方法来避免长时间运行的执行超出服务限额。
第 1 步:创建一个长时间运行的状态机
创建一个长时间运行的状态机,您希望该状态机从另一个状态机的 Task 状态开始。在本教程中,将使用使用 Lambda 函数的状态机。
注意
请务必将此状态机的名称和 Amazon 资源名称复制到文本文件中以备稍后使用。
第 2 步:创建状态机以调用 Step Functions API 操作
从一个 Task 状态启动工作流执行
- 
                打开 Step Functions 控制台 ,从菜单中选择状态机,然后选择创建状态机。 
- 
                选择 “从空白处创建”。 
- 
                为状态机命名,然后选择 “继续”,在 Workflow Studio 中编辑状态机。 
- 
                从 “操作” 选项卡中,将 StartExecutionAPI 操作拖放到标有 “将第一个状态拖到此处” 的空白状态。 
- 
                选择StartExecution状态并在的 “配置” 选项卡中执行以下操作设计模式: - 
                        将状态重命名为 Start nested execution。
- 
                        对于集成类型,从下拉列表中选择 Amazon 开发工具包 - 新建。 
- 
                        在 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 角色页面。 
- 
                为的 IAM 角色分配适当的权限,使其能够开始执行另一台状态机。ParentStateMachine要添加该权限,请执行以下操作: - 
                        在 IAM 角色页面上,选择添加权限,然后选择创建内联策略。 
- 
                        在创建策略页面上,选择 JSON 选项卡。 
- 
                        使用以下策略替换现有文本: 
- 
             
                
                { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:us-east-1:123456789012:stateMachine:LambdaStateMachine" ] } ] }
 
- 
                        选择查看策略。 
- 
                        指定策略名称,然后选择创建策略。 
 
- 
                        
第 4 步:运行状态机
状态机执行是指运行工作流执行任务的实例。
- 
                在ParentStateMachine页面上,选择开始执行。 随即显示启动执行对话框。 
- 
                在启动执行对话框中,执行以下操作: - 
                        (可选)输入自定义执行名称,以便覆盖生成的默认执行名称。 非 ASCII 名称和日志记录Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会 CloudWatch 阻止亚马逊记录数据,因此我们建议您仅使用 ASCII 字符,这样您就可以跟踪 Step Functions 的指标。 
- 
                        (可选)在输入框中,以 JSON 格式输入输入值以便运行工作流。 
- 
                        选择启动执行。 
- 
                        Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。 要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详细信息概览。 
 
- 
                        
- 
                打开LambdaStateMachine页面,注意由触发的新执行ParentStateMachine。