

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Step Functions API 继续长时间运行的工作流程（建议）
<a name="tutorial-continue-new"></a>

AWS Step Functions 旨在以有限的持续时间和步骤数运行工作流程。标准工作流程执行的最长持续时间为一年，事件数为 2.5 万个（请参阅 [Step Functions 服务配额](service-quotas.md)）。

对于长时间运行的执行，可以通过从 `Task` 状态启动新的工作流程执行，来避免达到硬配额。您需要将工作流程分解为更小的状态机，这些状态机在新的执行中继续正在进行的工作。

要启动新的工作流程执行，请从 `Task` 状态调用 `StartExecution` API 操作并传递必要的参数。

Step Functions 可以通过调用自己的 API 以作为[集成服务](integrate-services.md)来启动工作流执行。我们建议您使用这种方法来避免长时间运行的执行超出服务限额。

## 第 1 步：创建一个长时间运行的状态机
<a name="use-sfn-api-create-called-state-machine"></a>

创建一个长时间运行的状态机，您希望该状态机从另一个状态机的 `Task` 状态开始。在本教程中，将使用[使用 Lambda 函数的状态机](tutorial-creating-lambda-state-machine.md)。

**注意**  
请务必将此状态机的名称和 Amazon 资源名称复制到文本文件中以备稍后使用。

## 第 2 步：创建状态机以调用 Step Functions API 操作
<a name="use-sfn-api-create-caller-state-machine"></a>

**从一个 `Task` 状态启动工作流执行**

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home)，从菜单中选择**状态机**，然后选择**创建状态机**。

1. 选择**从空白创建**。

1. 为状态机命名，然后选择**继续**，在 Workflow Studio 中编辑状态机。

1. 从 “**操作**” 选项卡中，将 **StartExecution**API 操作拖放到标有 “**将第一个状态拖到此处” 的空白状态**。

1. 选择**StartExecution**状态并在的 “**配置**” 选项卡中执行以下操作[设计模式](workflow-studio.md#wfs-interface-design-mode)：

   1. 将状态重命名为 **Start nested execution**。

   1. 对于**集成类型**，从下拉列表中选择 **AWS 开发工具包 - 新建**。

   1. 在 **API 参数** 中，执行以下操作：

      1. 对于 `StateMachineArn`，请将示例 Amazon 资源名称替换为您的状态机 ARN。例如，输入[使用 Lambda 的状态机的](tutorial-creating-lambda-state-machine.md) ARN。

      1. 对于 `Input` 节点，将现有占位符文本替换为以下值：

         ```
         "Comment": "Starting workflow execution using a Step Functions API action"
         ```

      1. 确保 **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"
           }
         ```

1. （可选）在 [检查器面板](workflow-studio.md#workflow-studio-components-formdefinition) 面板上选择**定义**，查看工作流中自动生成的 [Amazon States Language](concepts-amazon-states-language.md) (ASL) 定义。
**提示**  
您也可以在 Workflow Studio 的[代码编辑器](workflow-studio.md#wfs-interface-code-editor)中查看 ASL 的定义。在代码编辑器中，还可以编辑工作流的 ASL 定义。

1. 为状态机指定一个名称。为此，请选择默认状态机名称旁边的编辑图标**MyStateMachine**。然后，找到**状态机配置**，在**状态机名称**框中指定一个名称。

   对于本教程，请输入名称 **ParentStateMachine**。

1. （可选）在**状态机配置**中，指定其他工作流设置，例如状态机类型及其执行角色。

   在本教程中，请保留**状态机设置**中的所有默认选项。

   如果您之前为状态机[创建了具有正确权限的 IAM 角色](procedure-create-iam-role.md)并想使用该角色，请在**权限**中选择**选择现有角色**，然后从列表中选择一个角色。或者选择**输入角色 ARN**，然后为该 IAM 角色的 ARN 获取该角色。

1. 在**确认角色创建**对话框中，选择**确认**继续。

   您也可以选择**查看角色设置**，返回至**状态机配置**。
**注意**  
如果您删除了 Step Functions 创建的 IAM 角色，Step Functions 在以后无法重新创建该角色。同样，如果您修改了该角色（例如，通过在 IAM 策略中从主体中删除 Step Functions），Step Functions 在以后也无法还原其原始设置。

## 第 3 步：更新 IAM 策略
<a name="use-sfn-api-update-policy-start-execution"></a>

要确保您的状态机有权限启动[使用 Lambda 函数的状态机](tutorial-creating-lambda-state-machine.md)执行，您需要将内联策略附加到状态机的 IAM 角色。有关更多信息，请参阅**《IAM 用户指南》中的[嵌入内联策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console)。

1. 在该**ParentStateMachine**页面上，选择 **IAM 角色 ARN** 以导航到状态机的 IAM **角色**页面。

1. 为的 IAM 角色分配适当的权限，使其能够开始执行另一台状态机。**ParentStateMachine**要添加该权限，请执行以下操作：

   1. 在 IAM **角色**页面上，选择**添加权限**，然后选择**创建内联策略**。

   1. 在**创建策略**页面上，选择 **JSON** 选项卡。

   1. 使用以下策略替换现有文本：  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "states:StartExecution"
                ],
                "Resource": [
                    "arn:aws:states:us-east-1:123456789012:stateMachine:LambdaStateMachine"
                ]
            }
        ]
      }
      ```

   1. 选择**查看策略**。

   1. 指定策略名称，然后选择**创建策略**。

## 第 4 步：运行状态机
<a name="use-sfn-api-start-execution"></a>

状态机执行是指运行工作流执行任务的实例。

1. 在**ParentStateMachine**页面上，选择**开始执行**。

   随即显示**启动执行**对话框。

1. 在**启动执行**对话框中，执行以下操作：

   1. （可选）输入自定义执行名称，以便覆盖生成的默认执行名称。
**非 ASCII 名称和日志记录**  
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会 CloudWatch 阻止亚马逊记录数据，因此我们建议您仅使用 ASCII 字符，这样您就可以跟踪 Step Functions 的指标。

   1. （可选）在**输入**框中，以 JSON 格式输入输入值以便运行工作流。

   1. 选择**启动执行**。

   1. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为*执行详细信息*页面。在此页面上，您可以随着执行的进展或者在执行完成后查看执行结果。

      要查看执行结果，请在**图表视图**上选择各个状态，然后在[步骤详细信息](concepts-view-execution-details.md#exec-details-intf-step-details)窗格中选择各个选项卡，分别查看每个状态的详细信息，包括输入、输出和定义。有关可在*执行详细信息*页面上查看的执行信息的详细信息，请参阅[执行详细信息概览](concepts-view-execution-details.md#exec-details-interface-overview)。

1. 打开**LambdaStateMachine**页面，注意由触发的新执行**ParentStateMachine**。