教學課程 8:在主控台中偵錯錯誤 - AWS Step Functions

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

教學課程 8:在主控台中偵錯錯誤

當您使用步驟函數時,您可能會遇到由於原因而產生的執行階段錯誤,例如:

  • Choice狀態中「變數」欄位的 JSON 路徑無效。

  • 狀態機器定義問題,例如沒有為Choice狀態定義相符的規則。

  • 應用過濾器操作輸入和輸出時,JSON 路徑表達式無效。

  • 因為 Lambda 函數例外狀況而導致工作失敗。

  • IAM 權限錯誤。

在本教學課程中,您將學習如何使用 Step Functions 主控台來偵錯這些錯誤。如需詳細資訊,請參閱Step Functions 中的錯誤處理

偵錯無效路徑選擇狀態錯誤

當您在狀態的「變數」欄位中指定不正確或無法解析的 JSON 路徑,或者未在Choice狀態中定義相符規則時,您會在Choice執行工作流程時收到錯誤訊息。

為了說明無效路徑錯誤,本教學課程會在您的工作流程中引入Choice狀態錯誤。您將使用狀CreditCardWorkflow態機並編輯其定義以引入錯誤。

  1. 開啟 Step Functions 主控台,然後選擇狀CreditCardWorkflow態機器。

  2. 選擇編輯以編輯狀態機定義。使更改在下面的代碼中突出顯示您的狀態機定義。

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$.Payload", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$.Payload", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }
  3. 選擇「儲存」,然後選擇「儲存」。

  4. 運行狀態機。

  5. 在狀態機器執行的 [執行詳細資訊] 頁面上,執行下列其中一個動作:

    1. 在錯誤訊息上選擇「原因」,以檢視執行失敗的原因。

    2. 選擇在錯誤訊息上顯示步驟詳細資訊,以檢視造成錯誤的步驟。

  6. 在 [步驟詳細資訊] 區段的 [輸入和輸出] 索引標籤中,選擇 [進階] 檢視切換按鈕,以查看所選狀態的輸入和輸出資料傳輸路徑。

  7. 在「圖表」檢視中,確定已套用「點數」大於等於 5000? 已選取並執行下列動作:

    1. 在輸入框中查看狀態的輸入值。

    2. 選擇 [定] 索引標籤,並注意為 [變數] 欄位指定的 JSON 路徑。

      申請信貸的輸入值大於等於 5000? state 是一個數值,而你已經將輸入值的 JSON 路徑指定為$.Payload。在狀態機執行期間,狀Choice態無法解析此 JSON 路徑,因為它不存在。

  8. 編輯狀態機以將「數」欄位值指定為$

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }

在應用輸入和輸出過濾器時調試 JSON 路徑表達式錯誤

當您使用輸入和輸出篩選器時,您可能會遇到因為指定了無效的 JSON 路徑運算式而產生的執行階段錯誤。

下列範例使用您在教學課程 5 中建立的WorkflowInputOutput狀態機器,並示範您使用ResultSelector篩選器來選取工作輸出部分的案例。

  1. 套用ResultSelector篩選器,為 [驗證身分] 步驟選擇工作輸出的一部分。若要這麼做,請依照下列方式編輯您的狀態機定義:

    { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity", "Payload": { "email": "jdoe@example.com", "ssn": "123-45-6789" } }, ... ... "ResultSelector": { "identity.$": "$.Payload.body.message" }", "End": true } } }
  2. 運行狀態機。

  3. 在狀態機器執行的 [執行詳細資訊] 頁面上,執行下列動作:

    1. 在錯誤訊息上選擇「原因」,以檢視執行失敗的原因。

    2. 選擇在錯誤訊息上顯示步驟詳細資訊,以檢視造成錯誤的步驟。

  4. 在錯誤訊息中,請注意 $.Payload.body 節點的內容是逸出的 JSON 字串。發生錯誤是因為您無法使用 JSON 路徑標記法參考字串。

  5. 若要參照 $.Payload.body. 訊息節點,請執行下列動作:

    1. 使用States.StringToJSON內部函數首先將字符串轉換為 JSON 格式。

    2. 在內建函數內指定 JSON 路徑。

      "ResultSelector": { "identity.$":"States.StringToJson($.Payload.body.message)" }
  6. 再次運行狀態機。