TestState API를 사용하여 상태 테스트 - AWS Step Functions

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

TestState API를 사용하여 상태 테스트

TestStateAPI는 단일 상태의 정의를 받아들이고 이를 실행합니다. 상태 머신을 생성하거나 기존 상태 머신을 업데이트하지 않고도 상태를 테스트할 수 있습니다.

TestState API를 사용하여 다음을 테스트할 수 있습니다.

상태를 테스트하기 위해 Step Functions 콘솔, AWS Command Line Interface (AWS CLI) 또는 SDK를 사용할 수도 있습니다.

TestState API는 IAM 역할을 수임하며, IAM 역할에는 해당 상태에서 액세스하는 리소스에 대한 필수 IAM 권한이 포함되어야 합니다. 필요할 수 있는 상태 권한을 알아보려면 IAM TestState API 사용 권한 섹션을 참조하세요.

TestState API 사용에 대한 고려사항

TestStateAPI를 사용하면 한 번에 한 상태만 테스트할 수 있습니다. 테스트할 수 있는 상태는 다음과 같습니다.

TestState API를 사용하는 동안 다음 사항에 유의합니다.

  • TestState API에는 다음에 대한 지원이 포함되어 있지 않습니다.

  • 테스트는 최대 5분 동안 실행할 수 있습니다. 테스트가 이 시간을 초과하면 States.Timeout 오류가 발생하여 테스트가 실패합니다.

TestState API의 검사 수준 사용

TestStateAPI를 사용하여 상태를 테스트하려면 해당 상태의 정의를 제공합니다. 그러면 테스트에서 출력이 반환됩니다. 각 상태에서는 테스트 결과에서 보려는 세부 정보의 양을 지정할 수 있습니다. 이 세부 정보를 통해 테스트 중인 상태에 대한 추가 정보를 얻을 수 있습니다. 예를 들어 상태에서 InputPath, ResultPath 등 입력 및 출력 데이터 처리 필터를 사용한 경우 중간 및 최종 데이터 처리 결과를 볼 수 있습니다.

Step Functions는 다음 레벨을 제공하므로 보려는 세부 정보를 지정할 수 있습니다.

이러한 모든 레벨은 statusnextState 필드도 반환합니다. status는 상태 실행 상태를 나타냅니다. 예로 SUCCEEDED, FAILED, RETRIABLE, CAUGHT_ERROR, nextState는 전환할 다음 상태의 이름을 나타냅니다. 정의에서 다음 상태를 정의하지 않은 경우 이 필드에는 빈 값이 반환됩니다.

Step Functions 콘솔 및 AWS CLI에서 이러한 검사 레벨을 사용하여 상태를 테스트하는 방법에 대한 자세한 내용은 상태 테스트(콘솔)AWS CLI를 사용하여 상태 테스트 섹션을 참조하세요.

INFO 검사 레벨

테스트가 성공하면 이 레벨에 상태 출력이 표시됩니다. 테스트에 실패한 경우 이 레벨에 오류 출력이 표시됩니다. 레벨을 지정하지 않은 경우 Step Functions는 기본적으로 검사 레벨INFO로 설정합니다.

다음 이미지는 성공한 통과 상태 테스트를 보여 줍니다. 이 상태의 검사 레벨INFO로 설정되고 상태에 대한 출력이 출력 탭에 표시됩니다.

INFO 레벨의 테스트에 성공한 일부 상태의 출력입니다.

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

INFO 레벨의 테스트에 성공한 일부 상태의 출력입니다.

DEBUG 검사 레벨

테스트가 성공하면 이 레벨에는 상태 출력과 입력 및 출력 데이터 처리 결과가 표시됩니다.

테스트에 실패한 경우 이 레벨에 오류 출력이 표시됩니다. 이 레벨은 실패 지점까지의 중간 데이터 처리 결과를 보여 줍니다. 예를 들어 Lambda 함수를 호출하는 태스크 상태를 테스트했다고 가정해 보겠습니다. InputPath, 파라미터, ResultPath, OutputPath 필터를 태스크 상태에 적용했다고 생각해 봅니다. 간접 호출이 실패했다고 가정해 보겠습니다. 이 경우 DEBUG 레벨에는 필터 적용에 따른 데이터 처리 결과가 다음과 같은 순서로 표시됩니다.

  • input - 원시 상태 입력

  • afterInputPath - Step Functions에서 InputPath 필터를 적용한 후 입력.

  • afterParameters - Step Functions에서 Parameters 필터를 적용한 후의 유효 입력.

이 레벨에서 사용할 수 있는 진단 정보는 정의했을 수 있는 서비스 통합 또는 입/출력 데이터 처리 흐름과 관련된 문제를 해결하는 데 도움이 될 수 있습니다.

다음 이미지는 성공한 통과 상태 테스트를 보여 줍니다. 이 상태의 검사 레벨DEBUG로 설정되어 있습니다. 다음 이미지의 입력/출력 처리 탭은 이 상태에 제공된 입력에 대한 Parameters의 애플리케이션 결과를 보여 줍니다.

DEBUG 레벨의 테스트에 성공한 일부 상태의 출력입니다.

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

DEBUG 레벨의 테스트에 실패한 상태의 출력입니다.

추적 검사 레벨

Step Functions는 HTTP 태스크를 테스트하기 위한 TRACE 레벨을 제공합니다. 이 레벨은 Step Functions가 수행하는 HTTP 요청과 타사 API가 반환하는 응답에 대한 정보를 반환합니다. 응답에는 헤더 및 요청 본문과 같은 정보가 포함될 수 있습니다. 또한 이 레벨에서 입력 및 출력 데이터 처리의 상태 출력과 결과를 볼 수 있습니다.

테스트에 실패한 경우 이 레벨에 오류 출력이 표시됩니다.

이 레벨은 HTTP 태스크에만 적용됩니다. Step Functions에서 이 레벨을 다른 상태 유형에 사용하면 오류가 발생합니다.

검사 수준을 TRACE로 설정하면 EventBridge 연결에 포함된 비밀도 볼 수 있습니다. 이렇게 하려면 true TestStateAPI에서 revealSecrets 파라미터를 로 설정해야 합니다. 또한 TestState API를 호출하는 IAM 사용자에게 states:RevealSecrets 작업에 대한 권한이 있는지 확인해야 합니다. states:RevealSecrets 권한을 설정하는 IAM 정책에 대한 예제는 IAM TestState API 사용 권한 섹션을 참조하세요. 이 권한이 없으면 Step Functions에서 액세스 거부 오류가 발생합니다.

revealSecrets 파라미터를 false로 설정하면 HTTP 요청 및 응답 데이터의 모든 암호가 생략됩니다.

다음 이미지는 성공한 HTTP 태스크 테스트를 보여 줍니다. 이 상태의 검사 레벨TRACE로 설정되어 있습니다. 다음 이미지의 HTTP 요청 및 응답 탭은 타사 API 호출의 결과를 보여 줍니다.

TRACE 레벨의 테스트에 성공한 일부 상태의 출력입니다.

IAM TestState API 사용 권한

TestState API를 호출하는 IAM 사용자에게 states:TestStateiam: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 요청 및 응답을 테스트할 수 있습니다.

상태를 테스트하려면
  1. Step Functions 콘솔을 엽니다.

  2. 상태 머신 생성을 선택하여 상태 머신 생성을 시작하거나 기존 상태 머신을 선택합니다.

  3. Workflow Studio의 디자인 모드에서 테스트하려는 상태를 선택합니다.

  4. Workflow Studio의 Inspector 패널에서 테스트 상태를 선택합니다.

  5. 테스트 상태 대화 상자에서 다음을 수행합니다.

    1. 실행 역할에서 상태를 테스트할 실행 역할을 선택합니다. 테스트하려는 상태에 필요한 IAM 권한이 있는지 확인합니다.

    2. (선택 사항) 선택한 상태에서 테스트에 필요한 모든 JSON 입력을 제공합니다.

    3. 검사 레벨에서 보려는 값을 기준으로 다음 옵션 중 하나를 선택합니다.

      • 정보 - 테스트 성공 시 출력 탭에 상태 출력을 표시합니다. 테스트가 실패하면 정보 탭에는 오류 이름과 해당 오류의 원인에 대한 자세한 설명이 포함된 오류 출력이 표시됩니다. 레벨을 지정하지 않은 경우 Step Functions는 기본적으로 검사 레벨정보로 설정합니다.

      • 디버그 - 테스트가 성공하면 상태 출력과 입력 및 출력 데이터 처리 결과가 표시됩니다. 테스트가 실패하면 디버그에는 오류 이름과 해당 오류의 원인에 대한 자세한 설명이 포함된 오류 출력이 표시됩니다.

      • 추적 - 원시 HTTP 요청 및 응답을 보여 주며 헤더, 쿼리 파라미터 및 기타 API별 세부 정보를 확인하는 데 유용합니다. 이 옵션은 HTTP 태스크에만 사용할 수 있습니다.

        필요에 따라 비밀 공개를 선택할 수 있습니다. 이 설정을 추적과 함께 사용하면 API 키 등와 같이 EventBridge 연결에 삽입되는 민감한 데이터를 볼 수 있습니다. 콘솔에 액세스하는 데 사용하는 IAM 사용자 ID에는 states:RevealSecrets 작업을 수행할 권한이 있어야 합니다. 이 권한이 없으면 Step Functions에서 테스트가 시작될 때 액세스 거부 오류가 발생합니다. states:RevealSecrets 권한을 설정하는 IAM 정책에 대한 예제는 IAM TestState API 사용 권한 섹션을 참조하세요.

    4. 테스트 시작을 선택합니다.

AWS CLI를 사용하여 상태 테스트

에서 TestStateAPI를 사용하여 지원되는 상태를 테스트할 수 AWS CLI 있습니다. 이 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는 inspectionLevelINFO로 설정합니다.

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, 파라미터, 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를 사용하여 타사 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 태스크가 지정된 타사 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 유틸리티를 사용하여 API가 반환하는 응답을 필터링하고 인쇄하기 TestState

TestState API는 응답에서 JSON 데이터를 이스케이프된 문자열로 반환합니다. 다음 AWS CLI 예제는 예제 3을 확장하고 이 jq 유틸리티를 사용하여 TestState API가 반환하는 HTTP 응답을 사람이 읽을 수 있는 형식으로 필터링하고 인쇄합니다. 에 대한 자세한 내용 jq 및 설치 지침은 jq on을 참조하십시오. GitHub

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, ResultPath, OutputPath 등이 있습니다. 각 필드에 대한 지원은 상태마다 다릅니다. 런타임 시 Step Functions는 각 필드를 특정 순서로 적용합니다. 다음 다이어그램은 이러한 필드가 태스크 상태 내의 데이터에 적용되는 순서를 보여 줍니다.

입력 및 출력 데이터 처리 필터 ( InputPath, 매개 변수 ResultSelector, ResultPath 상태) 가 Step Functions 적용되는 순서입니다. OutputPath

다음 목록은 다이어그램에 표시된 입력 및 출력 처리 필드의 적용 순서를 설명합니다.

  1. 상태 입력은 이전 상태에서 현재 상태로 전달된 JSON 데이터입니다.

  2. InputPath에서는 원시 상태 입력의 일부를 필터링합니다.

  3. 파라미터에서는 태스크에 전달할 값 집합을 구성합니다.

  4. 태스크는 작업을 수행하고 결과를 반환합니다.

  5. ResultSelector에서는 태스크 결과에서 유지할 값 집합을 선택합니다.

  6. ResultPath에서는 결과를 원시 상태 입력과 결합하거나 결과를 원시 상태 입력으로 대체합니다.

  7. OutputPath에서는 출력의 일부를 필터링하여 다음 상태로 전달합니다.

  8. 상태 출력은 현재 상태에서 다음 상태로 전달되는 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 접두사가 포함된 각 필드는 특정 필드가 적용된 이후의 데이터를 보여 줍니다. 예를 들어 afterInputPathInputPath 필드를 적용하여 원시 상태 입력을 필터링했을 때의 효과를 보여 줍니다. 다음 다이어그램은 각 ASL 정의 필드를 inspectionData 객체의 해당 필드에 매핑합니다.

inspectionData 객체 필드를 ASL 필드와 매핑하는 것입니다.

TestState API를 사용하여 입력 및 출력 처리를 디버깅하는 예는 다음을 참조하십시오.