

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Step Functions API 繼續長時間執行的工作流程 （建議）
<a name="tutorial-continue-new"></a>

AWS Step Functions 旨在以有限的持續時間和步驟數量執行工作流程。標準工作流程執行的持續時間上限為一年和 25，000 個事件 （請參閱 [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 Resource Name 複製到文字檔案中，以供日後使用。

## 步驟 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 SDK - new**。

   1. 在 **API 參數**中，執行下列動作：

      1. 對於 `StateMachineArn`，請將範例 Amazon Resource Name 取代為狀態機器的 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. （選用） 選擇[Inspector 面板](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. 將適當的許可指派給 **ParentStateMachine** 的 IAM 角色，使其能夠開始執行另一個狀態機器。若要指派 許可，請執行下列動作：

   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 字元的狀態機器、執行、活動和標籤名稱。由於這類字元會阻止 Amazon CloudWatch 記錄資料，我們建議您僅使用 ASCII 字元，以便您可以追蹤 Step Functions 指標。

   1. （選用） 在**輸入**方塊中，輸入 JSON 格式的輸入值來執行工作流程。

   1. 選擇 **Start execution (開始執行)**。

   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** 觸發的新執行。