기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
TestState API를 사용하여 단일 상태에 대한 정의를 수락하고 이를 실행합니다. 상태 머신을 생성하거나 기존 상태 머신을 업데이트하지 않고도 상태를 테스트할 수 있습니다.
TestState API를 사용하여 다음을 테스트할 수 있습니다.
-
상태의 입력 및 출력 처리 데이터 흐름.
-
다른 AWS 서비스 요청 및 응답과의 AWS 서비스 통합
-
HTTP 태스크 요청 및 응답
상태를 테스트하기 위해 Step Functions 콘솔, AWS Command Line Interface (AWS CLI) 또는 SDK를 사용할 수도 있습니다.
TestState
API는 IAM 역할을 수임하며, IAM 역할에는 해당 상태에서 액세스하는 리소스에 대한 필수 IAM 권한이 포함되어야 합니다. 필요할 수 있는 상태 권한을 알아보려면 TestState API를 사용하기 위한 IAM 권한 섹션을 참조하세요.
주제
TestState API 사용에 대한 고려 사항
TestState API를 사용하면 한 번에 하나의 상태만 테스트할 수 있습니다. 테스트할 수 있는 상태는 다음과 같습니다.
TestState
API를 사용하는 동안 다음 사항에 유의합니다.
-
TestState API에는 다음에 대한 지원이 포함되어 있지 않습니다.
-
다음 리소스 유형을 사용하는 Task 워크플로 상태 상태:
-
병렬 워크플로 상태 상태
-
Map 워크플로 상태 상태
-
-
테스트는 최대 5분 동안 실행할 수 있습니다. 테스트가 이 시간을 초과하면
States.Timeout
오류가 발생하여 테스트가 실패합니다.
TestState API의 검사 레벨 사용
TestState API를 사용하여 상태를 테스트하려면 해당 상태의 정의를 입력합니다. 그러면 테스트에서 출력이 반환됩니다. 각 상태에서는 테스트 결과에서 보려는 세부 정보의 양을 지정할 수 있습니다. 이 세부 정보를 통해 테스트 중인 상태에 대한 추가 정보를 얻을 수 있습니다. 예를 들어 상태에서 InputPath, ResultPath 등 입력 및 출력 데이터 처리 필터를 사용한 경우 중간 및 최종 데이터 처리 결과를 볼 수 있습니다.
Step Functions는 다음 레벨을 제공하므로 보려는 세부 정보를 지정할 수 있습니다.
이러한 모든 레벨은 status
및 nextState
필드도 반환합니다. status
는 상태 실행 상태를 나타냅니다. 예로 SUCCEEDED
, FAILED
, RETRIABLE
, CAUGHT_ERROR
, nextState
는 전환할 다음 상태의 이름을 나타냅니다. 정의에서 다음 상태를 정의하지 않은 경우 이 필드에는 빈 값이 반환됩니다.
Step Functions 콘솔 및 AWS CLI에서 이러한 검사 레벨을 사용하여 상태를 테스트하는 방법에 대한 자세한 내용은 상태 테스트(콘솔) 및 AWS CLI를 사용하여 상태 테스트 섹션을 참조하세요.
INFO 검사 레벨
테스트가 성공하면 이 레벨에 상태 출력이 표시됩니다. 테스트에 실패한 경우 이 레벨에 오류 출력이 표시됩니다. 레벨을 지정하지 않은 경우 Step Functions는 기본적으로 검사 레벨을 INFO로 설정합니다.
다음 이미지는 성공한 통과 상태 테스트를 보여 줍니다. 이 상태의 검사 레벨은 INFO로 설정되고 상태에 대한 출력이 출력 탭에 표시됩니다.

다음 이미지는 검사 레벨이 INFO로 설정된 경우 태스크 상태에서 실패한 테스트를 보여 줍니다. 출력 탭에는 오류 이름과 해당 오류의 원인에 대한 자세한 설명이 포함된 오류 출력이 표시됩니다.

DEBUG 검사 레벨
테스트가 성공하면 이 레벨에는 상태 출력과 입력 및 출력 데이터 처리 결과가 표시됩니다.
테스트에 실패한 경우 이 레벨에 오류 출력이 표시됩니다. 이 레벨은 실패 지점까지의 중간 데이터 처리 결과를 보여 줍니다. 예를 들어 Lambda 함수를 호출하는 태스크 상태를 테스트했다고 가정해 보겠습니다. InputPath, 파라미터, Step Functions에서 ResultPath를 사용하여 상태 출력 지정, OutputPath를 사용하여 상태 출력 필터링 필터를 태스크 상태에 적용했다고 생각해 봅니다. 간접 호출이 실패했다고 가정해 보겠습니다. 이 경우 DEBUG
레벨에는 필터 적용에 따른 데이터 처리 결과가 다음과 같은 순서로 표시됩니다.
-
input
- 원시 상태 입력 -
afterInputPath
- Step Functions에서InputPath
필터를 적용한 후 입력. -
afterParameters
- Step Functions에서Parameters
필터를 적용한 후의 유효 입력.
이 레벨에서 사용할 수 있는 진단 정보는 정의했을 수 있는 서비스 통합 또는 입/출력 데이터 처리 흐름과 관련된 문제를 해결하는 데 도움이 될 수 있습니다.
다음 이미지는 성공한 통과 상태 테스트를 보여 줍니다. 이 상태의 검사 레벨은 DEBUG로 설정되어 있습니다. 다음 이미지의 입력/출력 처리 탭은 이 상태에 제공된 입력에 대한 Parameters의 애플리케이션 결과를 보여 줍니다.

다음 이미지는 검사 레벨이 DEBUG로 설정된 경우 태스크 상태에서 실패한 테스트를 보여 줍니다. 다음 이미지의 입력/출력 처리 탭은 실패 시점까지의 상태에 대한 입력 및 출력 데이터 처리 결과를 보여 줍니다.

추적 검사 레벨
Step Functions는 HTTP 태스크를 테스트하기 위한 TRACE 레벨을 제공합니다. 이 레벨은가 Step Functions 수행하는 HTTP 요청 및 HTTPS API가 반환하는 응답에 대한 정보를 반환합니다. 응답에는 헤더 및 요청 본문과 같은 정보가 포함될 수 있습니다. 또한 이 레벨에서 입력 및 출력 데이터 처리의 상태 출력과 결과를 볼 수 있습니다.
테스트에 실패한 경우 이 레벨에 오류 출력이 표시됩니다.
이 레벨은 HTTP 태스크에만 적용됩니다. Step Functions에서 이 레벨을 다른 상태 유형에 사용하면 오류가 발생합니다.
검사 레벨을 추적으로 설정하면 EventBridge 연결에 포함된 암호를 볼 수도 있습니다. 이렇게 하려면 TestState API에서 revealSecrets
파라미터를 true
로 설정해야 합니다. 또한 TestState API를 호출하는 IAM 사용자에게 states:RevealSecrets
작업에 대한 권한이 있는지 확인해야 합니다. states:RevealSecrets
권한을 설정하는 IAM 정책에 대한 예제는 TestState API를 사용하기 위한 IAM 권한 섹션을 참조하세요. 이 권한이 없으면 Step Functions에서 액세스 거부 오류가 발생합니다.
revealSecrets
파라미터를 false
로 설정하면 HTTP 요청 및 응답 데이터의 모든 암호가 생략됩니다.
다음 이미지는 성공한 HTTP 태스크 테스트를 보여 줍니다. 이 상태의 검사 레벨은 TRACE로 설정되어 있습니다. 다음 이미지의 HTTP 요청 및 응답 탭은 HTTPS API 호출 결과를 보여줍니다.

TestState API를 사용하기 위한 IAM 권한
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 요청 및 응답을 테스트할 수 있습니다.
상태를 테스트하려면
-
Step Functions 콘솔
을 엽니다. -
상태 머신 생성을 선택하여 상태 머신 생성을 시작하거나 기존 상태 머신을 선택합니다.
-
Workflow Studio의 디자인 모드에서 테스트하려는 상태를 선택합니다.
-
Workflow Studio의 Inspector 패널 패널에서 테스트 상태를 선택합니다.
-
테스트 상태 대화 상자에서 다음을 수행합니다.
-
실행 역할에서 상태를 테스트할 실행 역할을 선택합니다. 테스트하려는 상태에 필요한 IAM 권한이 있는지 확인합니다.
-
(선택 사항) 선택한 상태에서 테스트에 필요한 모든 JSON 입력을 제공합니다.
-
검사 레벨에서 보려는 값을 기준으로 다음 옵션 중 하나를 선택합니다.
-
정보 - 테스트 성공 시 출력 탭에 상태 출력을 표시합니다. 테스트가 실패하면 정보 탭에는 오류 이름과 해당 오류의 원인에 대한 자세한 설명이 포함된 오류 출력이 표시됩니다. 레벨을 지정하지 않은 경우 Step Functions는 기본적으로 검사 레벨을 정보로 설정합니다.
-
디버그 - 테스트가 성공하면 상태 출력과 입력 및 출력 데이터 처리 결과가 표시됩니다. 테스트가 실패하면 디버그에는 오류 이름과 해당 오류의 원인에 대한 자세한 설명이 포함된 오류 출력이 표시됩니다.
-
추적 - 원시 HTTP 요청 및 응답을 보여 주며 헤더, 쿼리 파라미터 및 기타 API별 세부 정보를 확인하는 데 유용합니다. 이 옵션은 HTTP 태스크에만 사용할 수 있습니다.
필요에 따라 비밀 공개를 선택할 수 있습니다. 이 설정을 추적과 함께 사용하면 API 키 등와 같이 EventBridge 연결에 삽입되는 민감한 데이터를 볼 수 있습니다. 콘솔에 액세스하는 데 사용하는 IAM 사용자 ID에는
states:RevealSecrets
작업을 수행할 권한이 있어야 합니다. 이 권한이 없으면 Step Functions에서 테스트가 시작될 때 액세스 거부 오류가 발생합니다.states:RevealSecrets
권한을 설정하는 IAM 정책에 대한 예제는 TestState API를 사용하기 위한 IAM 권한 섹션을 참조하세요.
-
-
테스트 시작을 선택합니다.
-
AWS CLI를 사용하여 상태 테스트
AWS CLI에서 TestState API를 사용하여 지원되는 상태를 테스트할 수 있습니다. 이 API를 사용하여 상태에 대한 정의를 수락하고 이를 실행합니다.
각 상태에서는 테스트 결과에서 보려는 세부 정보의 양을 지정할 수 있습니다. 이러한 세부 정보는 입력 및 출력 데이터 처리 결과, HTTP 요청 및 응답 정보를 포함하여 상태 실행에 대한 추가 정보를 제공합니다. 다음 예제는 TestState API에 지정할 수 있는 다양한 검사 레벨을 보여 줍니다. 기울임꼴
텍스트를 리소스별 정보로 바꿔야 합니다.
이 섹션에는 Step Functions가 AWS CLI에 제공하는 다양한 검사 레벨을 사용하는 방법을 설명하는 다음 예제가 포함되어 있습니다.
예제 1: INFO inspectionLevel을 사용하여 선택 상태 테스트
에서 INFO
inspectionLevel을 사용하여 상태를 테스트하려면 다음 예제와 같이 test-state
명령을 AWS CLI실행합니다.
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}'
이 예제에서는 선택 상태를 사용하여 사용자가 제공한 숫자 입력을 기반으로 상태의 실행 경로를 결정합니다. 레벨을 설정하지 않은 경우 기본적으로 Step Functions는 inspectionLevel
을 INFO
로 설정합니다.
Step Functions는 다음 출력을 반환합니다.
{
"output": "{\"number\": 2}",
"nextState": "Equals 2",
"status": "SUCCEEDED"
}
예제 2: DEBUG inspectionLevel을 사용하여 패스 상태의 입력 및 출력 데이터 처리 디버깅
에서 DEBUG
inspectionLevel을 사용하여 상태를 테스트하려면 다음 예제와 같이 test-state
명령을 AWS CLI실행합니다.
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가 Pass 워크플로 상태 상태를 사용하여 입력 및 출력 데이터 처리 필터로 입력 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 요청 검사
의 revealSecrets 파라미터와 함께 TRACE
inspectionLevel을 사용하여 HTTP 태스크를 테스트하려면 다음 예제와 같이 test-state
명령을 AWS CLI실행합니다.
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 데이터를 필터링하고 조작하는 프로세스를 입력 및 출력 처리라고 합니다. 이 기능의 작동 방식에 대한 자세한 내용은 Step Functions에서 입력 및 출력 처리 단원을 참조하십시오.
Amazon States Language(ASL)의 모든 상태 유형(태스크, 병렬, 맵, 통과, 대기, 선택, 성공, 실패)은 통과하는 JSON 데이터를 필터링하고 조작하기 위한 일련의 공통 필드를 공유합니다. 이러한 필드로는 InputPath, 파라미터, ResultSelector, Step Functions에서 ResultPath를 사용하여 상태 출력 지정, 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를 사용하여 입력 및 출력 처리를 디버깅하는 예제는 다음을 참조하세요.