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

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

를 사용하여 TestState API Step Functions에서 상태 테스트

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

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

상태를 테스트하려면 Step Functions 콘솔 , AWS Command Line Interface (AWS CLI)또는 SDK.

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

사용에 대한 고려 사항 TestState API

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

를 사용하는 동안 다음 고려 사항에 유의TestStateAPI하세요.

에서 검사 수준 사용 TestState API

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

Step Functions 는 보려는 세부 정보를 지정하는 다음 수준을 제공합니다.

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

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

INFO inspectionLevel

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

다음 이미지는 성공한 통과 상태 테스트를 보여 줍니다. 이 상태에 대한 검사 수준이 로 설정INFO되고 상태에 대한 출력이 출력 탭에 나타납니다.

통과된 테스트의 INFO 레벨 출력 스크린샷입니다.

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

실패한 테스트에 대한 INFO 레벨의 출력 스크린샷입니다.

DEBUG inspectionLevel

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

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

  • input - 원시 상태 입력

  • afterInputPath - 이후 입력 Step Functions 는 InputPath 필터를 적용합니다.

  • afterParameters - 다음 이후의 유효 입력 Step Functions 는 Parameters 필터를 적용합니다.

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

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

통과된 테스트에 대한 DEBUG 레벨 출력 스크린샷입니다.

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

실패한 테스트에 대한 DEBUG 레벨의 출력 스크린샷입니다.

TRACE inspectionLevel

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

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

이 수준은 HTTP 태스크에만 적용됩니다.Step Functions 는 다른 상태 유형에 이 수준을 사용하는 경우 오류를 발생시킵니다.

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

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

다음 이미지는 성공하는 HTTP 작업에 대한 테스트를 보여줍니다. 이 상태에 대한 검사 수준은 로 설정됩니다TRACE. 다음 이미지의 HTTP 요청 및 응답 탭은 서드 파티 API 호출의 결과를 보여줍니다.

통과된 테스트의 TRACE 수준 출력 스크린샷입니다.

IAM 사용 권한 TestState API

는 IAM 를 호출하는 사용자는 states:TestStateiam:PassRole 작업을 수행할 권한이 TestState API 있어야 합니다. 또한 revealSecrets 파라미터를 로 설정하는 경우 true IAM 사용자는 states:RevealSecrets 작업을 수행할 권한이 있습니다. 이 권한이 없으면 Step Functions 는 액세스 거부 오류를 발생시킵니다.

또한 실행 역할에 필요한 가 포함되어 있는지 확인해야 합니다.IAM 상태가 액세스하는 리소스에 대한 권한입니다. 상태에 필요할 수 있는 권한을 알아보려면 실행 역할 관리 섹션을 참조하세요.

다음은 IAM 정책 예제는 states:TestState, iam:PassRolestates: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의 검사기 패널 패널에서 테스트 상태를 선택합니다.

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

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

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

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

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

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

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

        필요에 따라 비밀 공개를 선택할 수 있습니다. 와 함께 TRACE이 설정을 사용하면 EventBridge API 키와 같은 연결 삽입. 는 IAM 콘솔에 액세스하는 데 사용하는 사용자 자격 증명에는 states:RevealSecrets 작업을 수행할 수 있는 권한이 있어야 합니다. 이 권한이 없으면 Step Functions 는 테스트를 시작할 때 액세스 거부 오류를 발생시킵니다. 의 예 IAM states:RevealSecrets 권한을 설정하는 정책은 섹션을 참조하세요IAM 사용 권한 TestState API.

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

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

TestState API 에서 를 사용하여 지원되는 상태를 테스트할 수 있습니다.AWS CLI. 이렇게 하면 상태의 정의를 API 수락하고 실행합니다.

각 상태에서는 테스트 결과에서 보려는 세부 정보의 양을 지정할 수 있습니다. 이러한 세부 정보는 입력 및 출력 데이터 처리 결과와 HTTP 요청 및 응답 정보를 포함하여 상태 실행에 대한 추가 정보를 제공합니다. 다음 예제에서는 에 지정할 수 있는 다양한 검사 수준을 보여줍니다 TestState API. 를 교체해야 합니다.italicized 리소스별 정보가 포함된 텍스트입니다.

이 섹션에는 다음과 같은 다양한 검사 수준을 사용하는 방법을 설명하는 다음 예제가 포함되어 있습니다.Step Functions 에서 는 를 제공합니다.AWS CLI:

예제 1: Choice 상태를 테스트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 수준을 설정INFO하지 않으면 가 inspectionLevel 를 로 설정합니다.

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 입력 및 출력 JSON 데이터 처리 필터를 사용하여 입력 데이터를 필터링하고 조작합니다. 이 예제에서는 InputPath, 파라미터, Step Functions 워크플로 ResultPath 에서 를 사용하여 상태 출력 지정, Step Functions 워크플로를 사용하여 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 를 사용하여 타사에 전송된 HTTP 요청 검사 API

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 태스크가 지정된 타사 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 및 설치 지침에 대한 자세한 내용은 의 jq를 참조하세요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 위해 를 사용하는 방법을 설명합니다.

주요 개념

In Step Functions상태 시스템의 상태를 통과할 때 JSON 데이터를 필터링하고 조작하는 프로세스를 입력 및 출력 처리라고 합니다. 이 기능의 작동 방식에 대한 자세한 내용은 Step Functions에서 입력 및 출력 처리하기 단원을 참조하십시오.

Amazon States Language (ASL)(작업, 병렬, 맵, 통과, 대기, 선택, 성공 및 실패)의 모든 상태 유형은 통과하는 JSON 데이터를 필터링하고 조작하기 위한 공통 필드 세트를 공유합니다. 이러한 필드로는 InputPath, 파라미터, ResultSelector, Step Functions 워크플로 ResultPath 에서 를 사용하여 상태 출력 지정, Step Functions 워크플로를 사용하여 OutputPath 상태 출력 필터링하기 등이 있습니다. 각 필드에 대한 지원은 상태마다 다릅니다. 런타임에 Step Functions 는 각 필드를 특정 순서로 적용합니다. 다음 다이어그램은 이러한 필드가 태스크 상태 내의 데이터에 적용되는 순서를 보여 줍니다.

필터 순서: InputPath, 파라미터 ResultSelector ResultPath, 및 OutputPath.

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

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

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

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

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

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

  6. Step Functions 워크플로 ResultPath 에서 를 사용하여 상태 출력 지정에서는 결과를 원시 상태 입력과 결합하거나 결과를 원시 상태 입력으로 대체합니다.

  7. Step Functions 워크플로를 사용하여 OutputPath 상태 출력 필터링하기에서는 출력의 일부를 필터링하여 다음 상태로 전달합니다.

  8. 상태 출력은 현재 상태에서 다음 상태로 전달되는 JSON 데이터입니다.

이러한 입력 및 출력 처리 필드는 선택 사항입니다. 상태 정의에서 이러한 필드를 사용하지 않는 경우 태스크는 원시 상태 입력을 사용하고 태스크 결과를 상태 출력으로 반환합니다.

TestState 를 사용하여 입력 및 출력 처리 검사

를 호출TestStateAPI하고 inspectionLevel 파라미터를 로 설정하면 API 응답DEBUG에 라는 객체가 포함됩니다inspectionData. 이 객체에는 데이터가 실행되었을 때 상태 내에서 데이터가 필터링 또는 조작된 방식을 검사하는 데 도움이 되는 필드가 포함되어 있습니다. 다음 예제는 태스크 상태용 inspectionData 객체를 보여 줍니다.

"inspectionData": { "input": string, "afterInputPath": string, "afterParameters": string, "result": string, "afterResultSelector": string, "afterResultPath": string, "output": string }

이 예제에서 after 접두사가 포함된 각 필드는 특정 필드가 적용된 이후의 데이터를 보여 줍니다. 예를 들어 afterInputPathInputPath 필드를 적용하여 원시 상태 입력을 필터링했을 때의 효과를 보여 줍니다. 다음 다이어그램은 각 ASL 정의 필드를 inspectionData 객체의 해당 필드에 매핑합니다.

에 ASL 필드 매핑을 보여주는 다이어그램입니다inspectionData.

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