在 Step Functions 主控台中偵錯錯誤 - AWS Step Functions

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

在 Step Functions 主控台中偵錯錯誤

在上一個主題中配置輸入和輸出,您學習了如何篩選和操作資料。在狀態機配置和數據選擇中,您可能會遇到錯誤。在這個最後一個主題中,您將會介紹使用 Step Functions 主控台偵錯執行階段錯誤。

您可能會遇到執行階段錯誤,例如:

  • 無效的JSON路徑 Variable Choice狀態中的欄位。

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

  • 套用篩選器來操作輸入和輸出時,JSON路徑運算式無效。

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

  • IAM權限錯誤。

提示

如需其他錯誤處理選項,請參閱處理 Step Functions 工作流程中的錯

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

當您在狀態的「變數」(Variable) 欄位中指定不正確或無法解析的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. 再次運行狀態機。

結論和後續步驟

恭喜您!您已經入門教學課程使用 Step Functions 到達的結尾。

清除

現在您已經完成入門操作,最好清除 (刪除) 任何您不想再使用的資源。清理 AWS 資源可防止您的帳戶產生任何進一步的費用。