在 Step Functions 狀態機器中處理錯誤條件 - AWS Step Functions

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

在 Step Functions 狀態機器中處理錯誤條件

在本教學課程中,您會建立具有任務狀態 AWS Step Functions 的狀態機器,該狀態會叫用為擲回自訂錯誤而建置的範例 Lambda 函數。

任務是其中之一備用狀態,您可以設定 Catch 欄位。當整合收到錯誤時,擷取欄位會根據錯誤名稱選擇後續步驟。

步驟 1:建立拋出錯誤的 Lambda 函數

使用 Lambda 函數來模擬錯誤條件。

  1. 在 https://https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

  2. 選擇 Create function (建立函數)

  3. 選擇使用藍圖、搜尋 Step Functions,然後選擇擲回自訂錯誤

  4. 針對函數名稱,請輸入 ThrowErrorFunction

  5. 針對 Role (角色),選擇 Create a new role with basic Lambda permissions (建立具備基本 Lambda 許可的新角色)

  6. 選擇 Create function (建立函數)

    下列程式碼應該會顯示在程式碼窗格中。

    export const handler = async () => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };

步驟 2:測試 Lambda 函數

在建立狀態機器之前,請確認您的 Lambda 函數在調用CustomError時擲回您的 。

  1. 選擇測試標籤。

  2. 選擇建立新事件並保留預設事件 JSON

  3. 選擇測試以使用測試事件叫用函數。

  4. 展開執行函數以檢閱擲回錯誤的詳細資訊。

您現在有一個 Lambda 函數已準備好擲回自訂錯誤。

在下一個步驟中,您將設定狀態機器來擷取並重試該錯誤。

步驟 3:建立您的狀態機器

使用 Step Functions 主控台建立使用 任務工作流程狀態 搭配Catch組態的狀態機器。狀態機器會叫用 Lambda 函數,您已建置此函數來模擬在叫用函數時擲回錯誤。Step Functions 會在重試之間使用指數退避來重試函數。

  1. 開啟 Step Functions 主控台,從功能表中選擇狀態機器,然後選擇建立狀態機器

  2. 選擇從空白建立,然後在狀態機器名稱中輸入 CatchErrorStateMachine

  3. 接受預設類型 (標準),然後選擇繼續在 Workflow Studio 中編輯您的狀態機器。

  4. 選擇程式碼以切換至 ASL 編輯器,然後使用下列狀態機器定義取代程式碼:

    { "Comment": "Example state machine that can catch a custom error thrown by a function integration.", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account-id:function:ThrowErrorFunction:$LATEST", "Payload": "{% $states.input %}" }, "Catch": [ { "ErrorEquals": [ "CustomError" ], "Next": "CustomErrorFallback" }, { "ErrorEquals": [ "States.ALL" ], "Next": "CatchAllFallback" } ], "End": true, "Retry": [ { "ErrorEquals": [ "CustomError", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ] }, "CustomErrorFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from a custom error function." } }, "CatchAllFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from all other error codes." } } }, "QueryLanguage": "JSONata" }

步驟 4:設定您的狀態機器

執行狀態機器之前,您必須先連線到先前建立的 Lambda 函數。

  1. 切換回設計模式,然後選取名為 CreateAccount 的 Lambda:調用任務狀態。

  2. 組態索引標籤上,尋找 API 引數。針對函數名稱,選擇您先前建立的 Lambda 函數。

  3. 選擇建立,檢閱角色,然後選擇確認以建立您的狀態機器。

步驟 5:執行狀態機器

建立和設定狀態機器之後,您可以執行它並檢查流程。

  1. 在編輯器中,選擇執行

    或者,從狀態機器清單中,選擇開始執行

  2. 開始執行對話方塊中,接受產生的 ID,並在輸入中輸入下列 JSON:

    { "Cause" : "Custom Function Error" }
  3. 選擇 Start execution (開始執行)

Step Functions 主控台會引導您前往標題為執行 ID 的頁面,稱為執行詳細資訊頁面。您可以在工作流程進行和完成後檢閱執行結果。

若要檢閱執行結果,請在圖形檢視中選擇個別狀態,然後選擇步驟詳細資訊窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之執行資訊的詳細資訊,請參閱 執行詳細資訊概觀

您的狀態機器會叫用 Lambda 函數,這會擲出 CustomError。在圖形檢視中選擇 CreateAccount 步驟,以查看狀態輸出。您的狀態機器輸出看起來應該類似下圖:

擷取自訂錯誤的工作流程的說明性螢幕擷取畫面。

恭喜您!

您現在有一個狀態機器,可以捕捉和處理 Lambda 函數擲回的錯誤條件。您可以使用此模式在工作流程中實作強大的錯誤處理。

注意

您也可以建立狀態機器,在逾時時重試,或在發生錯誤或逾時時Catch用來轉換為特定狀態的機器。如需錯誤處理技巧的範例,請參閱使用重試和擷取的範例