本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
TestState API 接受單一狀態的定義並執行它。您可以在不建立狀態機器或更新現有狀態機器的情況下測試狀態。
使用 TestState API,您可以測試下列項目:
-
狀態的輸入和輸出處理資料流程。
-
與其他 AWS 服務 請求和回應的AWS 服務 整合
-
HTTP 任務請求和回應
若要測試狀態,您也可以使用 Step Functions主控台AWS Command Line Interface (AWS CLI)、 或 SDK。
TestState
API 會擔任 IAM 角色,該角色必須包含狀態存取之資源的必要IAM許可。如需狀態可能需要之許可的相關資訊,請參閱 IAM 使用 TestState API 的許可。
主題
使用 TestState API 的考量
使用 TestState API,您一次只能測試一個狀態。您可以測試的狀態包括下列項目:
使用 TestState
API 時,請記住下列考量事項。
-
TestState API 不包含對下列項目的支援:
-
測試最多可以執行五分鐘。如果測試超過此持續時間,則會失敗並顯示
States.Timeout
錯誤。
在 TestState API 中使用檢查層級
若要使用 TestState API 測試狀態,請提供該狀態的定義。然後,測試會傳回輸出。對於每個狀態,您可以指定要在測試結果中檢視的詳細資訊量。這些詳細資訊提供有關您測試狀態的其他資訊。例如,如果您已使用任何輸入和輸出資料處理篩選條件,例如 InputPath或 ResultPath 狀態,您可以檢視中繼和最終資料處理結果。
Step Functions 提供下列層級來指定您要檢視的詳細資訊:
所有這些層級也會傳回 status
和 nextState
欄位。 會status
指出狀態執行的狀態。例如,SUCCEEDED
、RETRIABLE
、 FAILED
和 CAUGHT_ERROR
。 nextState
表示要轉換到的下一個狀態的名稱。如果您尚未在定義中定義下一個狀態,此欄位會傳回空值。
如需在Step Functions主控台和 中使用這些檢查層級測試狀態的相關資訊AWS CLI,請參閱 測試狀態 (主控台)和 使用 測試狀態 AWS CLI。
INFO inspectionLevel
如果測試成功,此層級會顯示狀態輸出。如果測試失敗,此層級會顯示錯誤輸出。根據預設,如果您未指定關卡, Step Functions會將檢測關卡設定為 INFO。
下圖顯示成功通過狀態的測試。此狀態的檢查層級設定為 INFO,且狀態的輸出會顯示在輸出索引標籤中。

下圖顯示當檢測層級設為 INFO 時,任務狀態失敗的測試。輸出索引標籤會顯示錯誤輸出,其中包含錯誤名稱和該錯誤原因的詳細說明。

DEBUG inspectionLevel
如果測試成功,此層級會顯示狀態輸出和輸入和輸出資料處理的結果。
如果測試失敗,此層級會顯示錯誤輸出。此層級會顯示故障點之前的中繼資料處理結果。例如,假設您測試了叫用 Lambda函數的任務狀態。假設您已將 InputPath、在 Step Functions 中使用 ResultPath 指定狀態輸出、 參數和 使用 OutputPath 篩選狀態輸出篩選條件套用至任務狀態。表示調用失敗。在此情況下,DEBUG
關卡會根據篩選條件的應用程式,依下列順序顯示資料處理結果:
-
input
– 原始狀態輸入 -
afterInputPath
– 之後的輸入會Step Functions套用InputPath
篩選條件。 -
afterParameters
– 之後的有效輸入會Step Functions套用Parameters
篩選條件。
此層級中可用的診斷資訊可協助您針對您可能已定義的服務整合或輸入和輸出資料處理流程相關問題進行疑難排解。
下圖顯示成功通過狀態的測試。此狀態的檢查層級設定為 DEBUG。下圖中的輸入/輸出處理索引標籤顯示在此狀態提供的輸入Parameters上應用程式 的結果。

下圖顯示當檢測層級設定為 DEBUG 時,任務狀態失敗的測試。下圖中的輸入/輸出處理索引標籤會顯示狀態直至故障點的輸入和輸出資料處理結果。

TRACE inspectionLevel
Step Functions 提供 TRACE 層級來測試 HTTP 任務。此層級會傳回 HTTP 請求的相關資訊,該請求會Step Functions發出 HTTPS API 傳回的回應。回應可能包含資訊,例如標頭和請求內文。此外,您可以在此層級檢視輸入和輸出資料處理的狀態輸出和結果。
如果測試失敗,此層級會顯示錯誤輸出。
此層級僅適用於 HTTP 任務。如果您將此層級用於其他狀態類型, 會Step Functions擲出錯誤。
當您將檢測層級設定為 TRACE 時,您也可以檢視 EventBridge 連線中包含的秘密。若要這樣做,您必須在 TestState API true
中將 revealSecrets
參數設定為 。此外,您必須確保呼叫 TestState API IAM的使用者具有 states:RevealSecrets
動作的許可。如需設定 states:RevealSecrets
許可IAM的政策範例,請參閱 IAM 使用 TestState API 的許可。如果沒有此許可, 會Step Functions擲回拒絕存取的錯誤。
如果您將 revealSecrets
參數設定為 false
, Step Functions 會省略 HTTP 請求和回應資料中的所有秘密。
下圖顯示 HTTP 任務測試成功。此狀態的檢查層級設定為 TRACE。下圖中的 HTTP 請求和回應索引標籤會顯示 HTTPS API 呼叫的結果。

IAM 使用 TestState API 的許可
呼叫 TestState
API IAM的使用者必須具有執行 states:TestState
和 iam:PassRole
動作的許可。此外,如果您將 revealSecrets 參數設定為 true
,您必須確定IAM使用者具有執行states:RevealSecrets
動作的許可。如果沒有此許可, 會Step Functions擲回拒絕存取的錯誤。
您也必須確認您的執行角色包含狀態所存取資源所需的IAM許可。如需狀態可能需要之許可的相關資訊,請參閱管理執行角色。
下列IAM政策範例會設定 states:TestState
、 iam:PassRole
和 states:RevealSecrets
許可。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:TestState", "states:RevealSecrets", "iam:PassRole" ], "Resource": "*" } ] }
測試狀態 (主控台)
您可以在 主控台中測試狀態,並檢查狀態輸出或輸入和輸出資料處理流程。對於 HTTP 任務,您可以測試原始 HTTP 請求和回應。
測試狀態
-
選擇建立狀態機器以開始建立狀態機器,或選擇現有的狀態機器。
-
在 Workflow Studio 設計模式的 中,選擇您要測試的狀態。
-
在 Workflow Studio Inspector 面板面板中選擇測試狀態。
-
在測試狀態對話方塊中,執行下列動作:
-
針對執行角色,選擇要測試狀態的執行角色。請確定您擁有要測試之狀態的必要IAM許可。
-
(選用) 提供您選擇的測試狀態所需的任何 JSON 輸入。
-
針對檢測層級,根據您要檢視的值選取下列其中一個選項:
-
INFO – 如果測試成功,在輸出索引標籤中顯示狀態輸出。如果測試失敗,INFO 會顯示錯誤輸出,其中包含錯誤名稱和該錯誤原因的詳細說明。根據預設,如果您未選取關卡, Step Functions會將檢測關卡設定為 INFO。
-
DEBUG – 如果測試成功,會顯示狀態輸出和輸入和輸出資料處理的結果。如果測試失敗,DEBUG 會顯示錯誤輸出,其中包含錯誤名稱和該錯誤原因的詳細說明。
-
TRACE – 顯示原始 HTTP 請求和回應,對於驗證標頭、查詢參數和其他 API 特定詳細資訊很有用。此選項僅適用於 HTTP 任務。
或者,您可以選擇顯示秘密。結合 TRACE,此設定可讓您查看EventBridge連線插入的敏感資料,例如 API 金鑰。您用來存取主控台IAM的使用者身分必須具有執行
states:RevealSecrets
動作的許可。如果沒有此許可, 會在您開始測試時Step Functions擲回拒絕存取的錯誤。如需設定states:RevealSecrets
許可IAM的政策範例,請參閱 IAM 使用 TestState API 的許可。
-
-
選擇開始測試。
-
使用 測試狀態 AWS CLI
您可以使用 中的 TestState API 來測試支援的狀態AWS CLI。此 API 接受 狀態的定義並執行它。
對於每個狀態,您可以指定要在測試結果中檢視的詳細資訊量。這些詳細資訊提供有關狀態執行的其他資訊,包括其輸入和輸出資料處理結果,以及 HTTP 請求和回應資訊。下列範例示範您可以為 TestState API 指定的不同檢查層級。請記得將斜體
文字取代為您的資源特定資訊。
本節包含下列範例,說明如何使用 Step Functions中提供的不同檢查層級AWS CLI:
範例 1:使用 INFO inspectionLevel 測試選擇狀態
若要使用 中的 INFO
inspectionLevel 測試狀態 AWS CLI,請執行 test-state
命令,如下列範例所示。
aws stepfunctions test-state \ --definition '{"Type": "Choice", "Choices": [{"Variable": "$.number", "NumericEquals": 1, "Next": "Equals 1"}, {"Variable": "$.number", "NumericEquals": 2, "Next": "Equals 2"}], "Default": "No Match"}' \ --role-arn arn:aws:iam::
123456789012
:role/myRole
\ --input '{"number": 2}'
此範例使用選擇狀態,根據您提供的數值輸入來判斷狀態的執行路徑。根據預設,INFO
如果您未Step Functions設定關卡, 會將 inspectionLevel
設定為 。
Step Functions 會傳回下列輸出。
{
"output": "{\"number\": 2}",
"nextState": "Equals 2",
"status": "SUCCEEDED"
}
範例 2:使用 DEBUG inspectionLevel 在通過狀態下偵錯輸入和輸出資料處理
若要使用 中的 DEBUG
inspectionLevel 測試狀態 AWS CLI,請執行 test-state
命令,如下列範例所示。
aws stepfunctions test-state \ --definition '{"Type": "Pass", "InputPath": "$.payload", "Parameters": {"data": 1}, "ResultPath": "$.result", "OutputPath": "$.result.data", "Next": "Another State"}' \ --role-arn arn:aws:iam::
123456789012
:role/myRole
\ --input '{"payload": {"foo": "bar"}}' \ --inspection-level DEBUG
此範例使用 通過工作流程狀態 狀態來示範如何使用輸入和輸出資料處理Step Functions篩選條件來篩選和操作輸入 JSON 資料。此範例使用這些篩選條件:InputPath
、在 Step Functions 中使用 ResultPath 指定狀態輸出
、 參數
和 使用 OutputPath 篩選狀態輸出
。
Step Functions 會傳回下列輸出。
{
"output": "1",
"inspectionData": {
"input": "{\"payload\": {\"foo\": \"bar\"}}",
"afterInputPath": "{\"foo\":\"bar\"}",
"afterParameters": "{\"data\":1}",
"afterResultSelector": "{\"data\":1}",
"afterResultPath": "{\"payload\":{\"foo\":\"bar\"},\"result\":{\"data\":1}}"
},
"nextState": "Another State",
"status": "SUCCEEDED"
}
範例 3:使用 TRACE inspectionLevel 和 revealSecrets 來檢查傳送至 HTTPS API 的 HTTP 請求
若要使用 TRACE
inspectionLevel 和 中的 revealSecrets 參數來測試 HTTP 任務 AWS CLI,請執行 test-state
命令,如下列範例所示。
aws stepfunctions test-state \
--definition '{"Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": {"Method": "GET", "Authentication": {"ConnectionArn": "arn:aws:events:us-east-1:123456789012
:connection/MyConnection/0000000-0000-0000-0000-000000000000"
}, "ApiEndpoint": "https://httpbin.org/get", "Headers": {"definitionHeader": "h1"}, "RequestBody": {"message": "Hello from Step Functions!"}, "QueryParameters": {"queryParam": "q1"}}, "End": true}' \
--role-arn arn:aws:iam::123456789012
:role/myRole
\
--inspection-level TRACE \
--reveal-secrets
此範例會測試 HTTP 任務是否呼叫指定的 HTTPS API,https://httpbin.org/
。它也會顯示 API 呼叫的 HTTP 請求和回應資料。
{
"output": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}",
"inspectionData": {
"input": "{}",
"afterInputPath": "{}",
"afterParameters": "{\"Method\":\"GET\",\"Authentication\":{\"ConnectionArn\":\"arn:aws:events:us-east-1:123456789012
:connection/foo/a59c10f0-a315-4c1f-be6a-559b9a0c6250\"},\"ApiEndpoint\":\"https://httpbin.org/get\",\"Headers\":{\"definitionHeader\":\"h1\"},\"RequestBody\":{\"message\":\"Hello from Step Functions!\"},\"QueryParameters\":{\"queryParam\":\"q1\"}}",
"result": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}",
"afterResultSelector": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}",
"afterResultPath": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}",
"request": {
"protocol": "https",
"method": "GET",
"url": "https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1",
"headers": "[definitionHeader: h1, Authorization: Basic XXXXXXXX, CustomHeader1: CustomHeaderValue1, User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1, Range: bytes=0-262144]",
"body": "{\"message\":\"Hello from Step Functions!\",\"BodyKey1\":\"BodyValue1\"}"
},
"response": {
"protocol": "https",
"statusCode": "200",
"statusMessage": "OK",
"headers": "[date: Tue, 21 Nov 2023 00:06:17 GMT, content-type: application/json, content-length: 620, server: gunicorn/19.9.0, access-control-allow-origin: *, access-control-allow-credentials: true]",
"body": "{\n \"args\": {\n \"QueryParam1\": \"QueryParamValue1\", \n \"queryParam\": \"q1\"\n }, \n \"headers\": {\n \"Authorization\": \"Basic XXXXXXXX\", \n \"Content-Type\": \"application/json; charset=UTF-8\", \n \"Customheader1\": \"CustomHeaderValue1\", \n \"Definitionheader\": \"h1\", \n \"Host\": \"httpbin.org\", \n \"Range\": \"bytes=0-262144\", \n \"Transfer-Encoding\": \"chunked\", \n \"User-Agent\": \"Amazon|StepFunctions|HttpInvoke|us-east-1\", \n \"X-Amzn-Trace-Id\": \"Root=1-0000000-0000-0000-0000-000000000000\"\n }, \n \"origin\": \"12.34.567.891\", \n \"url\": \"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"\n}\n"
}
},
"status": "SUCCEEDED"
}
範例 4:使用 jq 公用程式來篩選和列印 TestState API 傳回的回應
TestState API 會在回應中將 JSON 資料傳回為逸出字串。下列AWS CLI範例延伸範例 3,並使用 jq
公用程式來篩選和列印 TestState API 以人類可讀格式傳回的 HTTP 回應。如需 jq
及其安裝說明的詳細資訊,請參閱 GitHub 上的 jq
aws stepfunctions test-state \
--definition '{"Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": {"Method": "GET", "Authentication": {"ConnectionArn": "arn:aws:events:us-east-1:123456789012
:connection/MyConnection/0000000-0000-0000-0000-000000000000"
}, "ApiEndpoint": "https://httpbin.org/get", "Headers": {"definitionHeader": "h1"}, "RequestBody": {"message": "Hello from Step Functions!"}, "QueryParameters": {"queryParam": "q1"}}, "End": true}' \
--role-arn arn:aws:iam::123456789012
:role/myRole
\
--inspection-level TRACE \
--reveal-secrets \
| jq '.inspectionData.response.body | fromjson'
下列範例顯示以人類可讀格式傳回的輸出。
{
"args": {
"QueryParam1": "QueryParamValue1",
"queryParam": "q1"
},
"headers": {
"Authorization": "Basic XXXXXXXX",
"Content-Type": "application/json; charset=UTF-8",
"Customheader1": "CustomHeaderValue1",
"Definitionheader": "h1",
"Host": "httpbin.org",
"Range": "bytes=0-262144",
"Transfer-Encoding": "chunked",
"User-Agent": "Amazon|StepFunctions|HttpInvoke|us-east-1",
"X-Amzn-Trace-Id": "Root=1-0000000-0000-0000-0000-000000000000"
},
"origin": "12.34.567.891
",
"url": "https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1
"
}
測試和偵錯輸入和輸出資料流程
TestState
API 有助於測試和偵錯流經工作流程的資料。本節提供一些關鍵概念,並說明如何將 TestState 用於此目的。
重要概念
在 中Step Functions,在 JSON 資料通過狀態機器時篩選和操作 JSON 資料的程序稱為輸入和輸出處理。如需其運作方式的相關資訊,請參閱在 Step Functions 中處理輸入和輸出。
Amazon States Language (ASL) 中的所有狀態類型 (任務、平行、映射、通過、等待、選擇、成功和失敗) 共用一組常用欄位,用於篩選和操作通過它們的 JSON 資料。這些欄位為:InputPath、參數、在 Step Functions 中使用 ResultPath 指定狀態輸出、 ResultSelector和 使用 OutputPath 篩選狀態輸出。每個欄位的支援因狀態而異

下列清單說明圖表中顯示的輸入和輸出處理欄位的應用程式順序。
-
狀態輸入是從先前狀態傳遞至目前狀態的 JSON 資料。
-
InputPath 會篩選原始狀態輸入的一部分。
-
任務會執行工作並傳回結果。
-
ResultSelector 會選取要從任務結果保留的一組值。
-
在 Step Functions 中使用 ResultPath 指定狀態輸出 會將結果與原始狀態輸入合併,或使用其取代結果。
-
使用 OutputPath 篩選狀態輸出 會篩選輸出的一部分,以傳遞至下一個狀態。
-
狀態輸出是從目前狀態傳遞到下一個狀態的 JSON 資料。
這些輸入和輸出處理欄位是選用的。如果您在狀態定義中未使用任何這些欄位,任務將耗用原始狀態輸入,並將任務結果傳回為狀態輸出。
使用 TestState 檢查輸入和輸出處理
當您呼叫 TestState
API 並將 inspectionLevel
參數設定為 時DEBUG
,API 回應會包含名為 的物件inspectionData
。此物件包含欄位,可協助您檢查資料在執行時在 狀態內如何篩選或操作。下列範例顯示任務狀態的 inspectionData
物件。
"inspectionData": {
"input": string,
"afterInputPath": string,
"afterParameters": string,
"result": string,
"afterResultSelector": string,
"afterResultPath": string,
"output": string
}
在此範例中,包含 after
字首的每個欄位都會顯示套用特定欄位之後的資料。例如, afterInputPath
顯示套用 InputPath
欄位來篩選原始狀態輸入的效果。下圖會將每個 ASL 定義欄位映射至inspectionData
物件中的對應欄位:

如需使用 TestState API 對輸入和輸出處理進行偵錯的範例,請參閱以下內容: