本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Step Functions 主控台中偵錯錯誤
在上一個主題中配置輸入和輸出,您學習了如何篩選和操作資料。在狀態機配置和數據選擇中,您可能會遇到錯誤。在這個最後一個主題中,您將會介紹使用 Step Functions 主控台偵錯執行階段錯誤。
您可能會遇到執行階段錯誤,例如:
無效的JSON路徑
Variable
Choice
狀態中的欄位。狀態機器定義問題,例如沒有為
Choice
狀態定義相符的規則。套用篩選器來操作輸入和輸出時,JSON路徑運算式無效。
因為 Lambda 函數例外狀況而導致工作失敗。
IAM權限錯誤。
提示
如需其他錯誤處理選項,請參閱處理 Step Functions 工作流程中的錯。
偵錯無效路徑選擇狀態錯誤
當您在狀態的「變數」(Variable) 欄位中指定不正確或無法解析的JSON路徑,或者未在Choice
狀態中定義相符規則時,您會在Choice
執行工作流程時收到錯誤訊息。
為了說明無效路徑錯誤,本教學課程會在您的工作流程中引入Choice
狀態錯誤。您將使用狀CreditCardWorkflow態機並編輯其定義以引入錯誤。
開啟 Step Functions 主控台,然後選擇狀CreditCardWorkflow態機器。
選擇編輯以編輯狀態機定義。使更改在下面的代碼中突出顯示您的狀態機定義。
{ "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" }, ... ... } }
選擇「儲存」,然後選擇「儲存」。
運行狀態機。
在狀態機器執行的 [執行詳細資訊] 頁面上,執行下列其中一個動作:
在錯誤訊息上選擇「原因」,以檢視執行失敗的原因。
選擇在錯誤訊息上顯示步驟詳細資訊,以檢視造成錯誤的步驟。
在 [步驟詳細資訊] 區段的 [輸入和輸出] 索引標籤中,選擇 [進階] 檢視切換按鈕,以查看所選狀態的輸入和輸出資料傳輸路徑。
在「圖表」檢視中,確定已套用「點數」大於等於 5000? 已選取並執行下列動作:
在輸入框中查看狀態的輸入值。
選擇「定義」頁籤,並注意為「變數」欄位指定的JSON路徑。
申請信貸的輸入值大於等於 5000? state 是一個數值,而你已經將輸入值的JSON路徑指定為
$.Payload
。在狀態機執行期間,狀Choice
態無法解析此JSON路徑,因為它不存在。
編輯狀態機以將「變數」欄位值指定為
$
。{ "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
篩選器來選取工作輸出部分的案例。
套用
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 } } }運行狀態機。
在狀態機器執行的 [執行詳細資訊] 頁面上,執行下列動作:
在錯誤訊息上選擇「原因」,以檢視執行失敗的原因。
選擇在錯誤訊息上顯示步驟詳細資訊,以檢視造成錯誤的步驟。
在錯誤訊息中,請注意 $.payload.body 節點的內容是逸出字串。JSON發生錯誤是因為您無法使用JSON路徑標記法參考字串。
若要參照 $.Payload.body. 訊息節點,請執行下列動作:
使用
States.StringToJSON
內在函數首先將字符串轉換為格式JSON。指定內建函數內部的 $. 承載. 身體. 訊息節點的JSON路徑。
"ResultSelector": { "identity.$":"States.StringToJson($.Payload.body.message)" }
再次運行狀態機。
結論和後續步驟
恭喜您!您已經入門教學課程使用 Step Functions 到達的結尾。
清除
現在您已經完成入門操作,最好清除 (刪除) 任何您不想再使用的資源。清理 AWS 資源可防止您的帳戶產生任何進一步的費用。