Step Functions에서 워크플로우 입력 및 출력 구성 - AWS Step Functions

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

Step Functions에서 워크플로우 입력 및 출력 구성

이전 워크로드 실행 주제에서는 워크플로를 실행하는 방법을 배웠습니다. 이 항목에서는 상태 간에 전달되는 데이터를 선택, 필터링 및 조작하는 방법을 알아봅니다.

Step Functions 실행은 JSON 텍스트를 입력으로 받아 워크플로의 첫 번째 상태로 해당 입력을 전달합니다. 워크플로의 개별 상태는 JSON 데이터를 입력으로 받고 일반적으로 JSON 데이터를 다음 상태에 출력으로 전달합니다. 기본적으로 입력 및/또는 출력을 구성하지 않은 경우 워크플로의 한 상태에서 다음 상태로 데이터가 전달됩니다. 정보가 상태에서 다른 상태로 흐르는 방식을 이해하고 이 데이터를 필터링하고 조작하는 방법을 알아보는 것이 Step Functions에서 워크플로를 효율적으로 설계하고 구현하는 데 중요합니다.

Step Functions는 상태 간 입력 및 출력 데이터 흐름을 제어하는 다음 필터를 제공합니다.

참고

사용 사례에 따라 워크플로에 이러한 필드를 모두 적용하지 않아도 됩니다.

InputPath

전체 입력 페이로드 중 작업 입력으로 사용할 WHAT부분을 선택합니다. 이 필드를 지정하면 Step Functions에서 먼저 이 필드를 적용합니다.

파라미터

작업을 호출하기 HOW전의 입력이 다음과 같이 표시되도록 지정합니다. Parameters필드를 사용하여 입력으로 전달되는 키-값 쌍의 컬렉션을 만들 수 있습니다. AWS 서비스 통합 (예: AWS Lambda 함수. 이러한 값은 정적이거나 상태 입력 또는 워크플로 컨텍스트 객체에서 동적으로 선택한 값일 수도 있습니다.

ResultSelector

작업 출력에서 WHAT선택할지 결정합니다. ResultSelector 필드를 사용하여 상태 결과를 바꾸는 키-값 페어 컬렉션을 만들고 해당 컬렉션을 ResultPath에 전달할 수 있습니다.

Step Functions 워크플로를 사용하여 ResultPath 상태 출력 지정하기

작업 출력을 WHERE입력할지 결정합니다. ResultPath를 사용하여 상태 출력이 입력 사본인지, 생성되는 결과인지 아니면 이 둘의 조합인지 확인합니다.

Step Functions 워크플로를 사용하여 OutputPath 상태 출력 필터링하기

다음 상태로 보낼지 결정합니다WHAT. 를 사용하면 원하지 않는 정보를 필터링하고 관심 있는 JSON 데이터 부분만 전달할 수 있습니다. OutputPath

작은 정보

ParametersResultSelector 필터는 구성 방식으로 작동하는 반면JSON, InputPathOutputPath 필터는 JSON 데이터 개체 내의 특정 노드를 필터링하는 방식으로 작동하며 ResultPath 필터는 출력을 추가할 수 있는 필드를 만드는 방식으로 작동합니다.

워크플로에 입력과 출력을 구성하는 방법에 대한 자세한 내용은 Step Functions에서 입력 및 출력 처리하기 섹션을 참조하세요.

필터를 사용하여 원시 입력의 특정 부분을 선택합니다. InputPath

InputPath 필터를 사용하여 입력 페이로드의 특정 부분을 선택합니다.

InputPath를 지정하지 않으면 값이 $로 기본 설정됩니다. 이로 인해 상태 작업이 특정 부분이 아닌 전체 원시 입력을 참조합니다.

1단계: 상태 시스템 만들기

중요

스테이트 머신이 동일한 시스템 아래에 있는지 확인하세요. AWS 계정 및 지역을 이전에 생성한 Lambda 함수로 사용합니다.

  1. 자습서 4에서 배운 Parallel 상태 예제를 사용하여 새 상태 시스템을 만듭니다. 워크플로 프로토타입이 다음 프로토타입과 비슷한지 확인합니다.

  2. check-identitycheck-address Lambda 함수의 통합을 구성합니다. Lambda 함수를 만들고 상태 시스템에서 사용하는 방법은 1단계: Lambda 함수를 만들어 필수 검사 수행2단계: 워크플로 업데이트 - 수행할 병렬 작업 추가 섹션을 참조하세요.

  3. 페이로드의 경우 기본 선택 항목인 상태 입력을 페이로드로 사용을 그대로 둬야 합니다.

  4. 다음을 선택하고 자습서 51단계: 상태 시스템 저장 1~3단계를 수행하여 새 상태 시스템을 만듭니다. 이 자습서에서는 상태 시스템 이름을 WorkflowInputOutput으로 지정합니다.

2단계: 상태 시스템 실행

  1. WorkflowInputOutput페이지에서 실행 시작을 선택합니다.

  2. (선택 사항) 생성된 기본값을 재정의하려면 사용자 지정 실행 이름을 입력합니다.

    ASCII비이름 및 로깅

    Step Functions는 ASCII -자가 아닌 문자를 포함하는 상태 머신, 실행, 액티비티 및 레이블의 이름을 허용합니다. CloudWatchAmazon에서는 이러한 문자를 사용할 수 없으므로 지표를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다 CloudWatch.

  3. 입력 영역에서 다음 JSON 데이터를 실행 입력으로 추가합니다.

    { "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" } } }
  4. 실행 시작을 선택합니다.

  5. check-identitycheck-address Lambda 함수에서 필수 ID 및 주소 확인을 수행하는 데 사용해야 하는 실행 입력 부분을 지정하지 않았으므로 상태 시스템 실행에서 오류가 발생합니다.

  6. 이 자습서의 3단계를 계속 진행하여 오류를 수정합니다.

3단계: InputPath 필터를 사용하여 실행 입력의 특정 부분 선택

  1. 실행 세부 정보 페이지에서 상태 머신 편집을 선택합니다.

  2. 2단계: 상태 시스템 실행에 제공된 실행 입력에 언급된 대로 신청자 ID를 확인하려면 Verify identity 작업 정의를 다음과 같이 편집합니다.

    ... { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.data.identity", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity:$LATEST" }, "End": true } } } ...

    따라서 다음 JSON 데이터를 check-identity 함수의 입력으로 사용할 수 있게 됩니다.

    { "email": "jdoe@example.com", "ssn": "123-45-6789" }
  3. 실행 입력에 언급된 대로 신청자 주소를 확인하려면 다음과 같이 Verify address 작업 정의를 편집합니다.

    ... { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.data.address", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:check-address:$LATEST" }, "End": true } } } ...

    따라서 다음 JSON 데이터를 함수의 입력으로 사용할 수 있게 됩니다. check-address

    { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }
  4. 실행 시작을 선택합니다. 이제 상태 시스템 실행이 성공적으로 완료됩니다.

파라미터 필터를 사용하여 선택한 입력 조작

InputPath필터를 사용하면 제공하는 원시 JSON 입력을 제한하는 데 도움이 되지만 Parameters 필터를 사용하면 키-값 쌍의 컬렉션을 입력으로 전달할 수 있습니다. 이러한 키-값 페어는 상태 시스템 정의에서 정의한 정적 값이거나 InputPath를 사용하여 원시 입력에서 선택한 값일 수 있습니다.

워크플로에서 ParametersInputPath 다음에 적용됩니다. Parameters는 기본 작업이 입력 페이로드를 수락하는 방법을 지정하는 데 도움이 됩니다. 예를 들어, check-address Lambda 함수가 데이터 대신 문자열 파라미터를 입력으로 받는 경우 필터를 사용하여 Parameters 입력을 변환할 수 있습니다. JSON

다음 예제에서 Parameters 필터는 3단계: InputPath 필터를 사용하여 실행 입력의 특정 부분 선택InputPath를 사용하여 선택한 입력을 수신하고 입력 항목에 내장 함수 States.Format을 적용하여 addressString 문자열을 만듭니다. 내장 함수를 사용하면 지정된 입력에 대해 기본적인 데이터 처리 작업을 수행할 수 있습니다. 자세한 내용은 Step Functions용 Amazon States 언어의 내장 함수 워크플로우 단원을 참조하십시오.

"Parameters": { "addressString.$": "States.Format('{}. {}, {} - {}', $.street, $.city, $.state, $.zip)" }

따라서 다음 문자열이 생성되어 check-address Lambda 함수에 입력으로 제공됩니다.

{ "addressString": "123 Main St. Columbus, OH - 43219" }

ResultSelector ResultPath, 및 필터를 사용하여 출력을 구성합니다. OutputPath

check-addressLambda 함수가 상태 머신에서 호출되면 함수는 주소 WorkflowInputOutput검증을 수행한 후 출력 페이로드를 반환합니다. 실행 세부 정보 페이지에서 주소 확인 단계를 선택하고 단계 세부 정보 창의 태스크 결과 내에서 출력 페이로드를 봅니다.

{ "ExecutedVersion": "$LATEST", "Payload": { "statusCode": 200, "body": "{\"approved\":true,\"message\":\"identity validation passed\"}" }, "SdkHttpMetadata": { "AllHttpHeaders": { "X-Amz-Executed-Version": [ "$LATEST" ], ... ... "StatusCode": 200 }

사용: ResultSelector

ID 및 주소 확인 검사 결과를 워크플로의 다음 상태에 제공해야 하는 경우 JSON 출력에서 Payload.body 노드를 선택하고 ResultSelector 필터의 StringToJson 내장 함수를 사용하여 필요에 따라 데이터 형식을 지정할 수 있습니다.

ResultSelector는 작업 출력에서 필요한 내용을 선택합니다. 다음 예제에서는 $.payload.body의 문자열을 ResultSelector 가져와 States.StringToJson 내장 함수를 적용하여 문자열을 ID 노드로 변환하고 결과를 ID 노드에 넣습니다. JSON JSON

"ResultSelector": { "identity.$": "States.StringToJson($.Payload.body)" }

따라서 다음과 같은 데이터가 생성됩니다. JSON

{ "identity": { "approved": true, "message": "Identity validation passed" } }

이러한 입력 및 출력 필터를 사용할 때 잘못된 JSONpath 표현식으로 인한 런타임 오류가 발생할 수 있습니다.

사용 ResultPath

ResultPath 필드를 사용하여 상태의 작업 처리 결과를 저장할 초기 입력 페이로드의 위치를 지정할 수 있습니다. ResultPath를 지정하지 않으면 기본값으로 $가 설정됩니다. 이로 인해 초기 입력 페이로드가 원시 작업 결과로 바뀝니다. ResultPathnull로 지정하면 원시 결과가 삭제되고 초기 입력 페이로드가 유효 출력이 됩니다.

필드를 사용하여 만든 JSON 데이터에 ResultPath 필드를 적용하면 다음 예와 같이 입력 페이로드의 결과 노드 내에 작업 결과가 추가됩니다. ResultSelector

{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "results": { "identity": { "approved": true } } }

사용: OutputPath

ResultPath를 적용한 후에 상태 출력의 일부를 선택하여 다음 상태로 전달할 수 있습니다. 이 방법을 사용하면 원하지 않는 정보를 걸러내고 필요한 JSON 부분만 전달할 수 있습니다.

다음 예제에서 OutputPath 필드는 결과 노드 내에 상태 출력을 저장합니다("OutputPath": "$.results"). 따라서 다음 상태로 전달할 수 있는 상태의 최종 출력은 다음과 같습니다.

{ "addressResult": { "approved": true, "message": "address validation passed" }, "identityResult": { "approved": true, "message": "identity validation passed" } }

콘솔 기능을 사용하여 입력 및 출력 데이터 흐름 시각화

Step Functions 콘솔의 데이터 흐름 시뮬레이터 또는 실행 세부 정보 페이지의 고급 보기 옵션을 사용하여 워크플로의 상태 간의 입력 및 출력 데이터 흐름을 시각화할 수 있습니다.

매개변수 필드를 사용하여 선택한 입력을 조작합니다.

InputPath필드를 사용하면 제공하는 원시 JSON 입력을 제한하는 데 도움이 되지만 Parameters 필드를 사용하면 키-값 쌍의 컬렉션을 입력으로 전달할 수 있습니다. 이러한 키-값 페어는 상태 시스템 정의에서 정의한 정적 값이거나 InputPath를 사용하여 원시 입력에서 선택한 값일 수 있습니다.

Parameters워크플로우에서는 이후에 적용됩니다. InputPath Parameters기본 작업이 입력 페이로드를 수락하는 방법을 지정하는 데 도움이 됩니다. 예를 들어, check-address Lambda 함수가 데이터 대신 문자열 파라미터를 입력으로 받는 경우 필드를 사용하여 Parameters 입력을 변환할 수 있다고 가정해 보겠습니다. JSON

다음 예제에서 Parameters 필드는 InputPath 필터를 사용하여 원시 입력의 특정 부분을 선택합니다. InputPath 섹션에서 사용하여 선택한 입력을 수신하고 입력 항목에 내장 함수를 States.Format 적용하여 라는 문자열을 생성합니다. addressString 내장 함수를 사용하면 지정된 입력에 대해 기본적인 데이터 처리 작업을 수행할 수 있습니다. 자세한 내용은 내장 함수를 참조하십시오.

"Parameters": { "addressString.$": "States.Format('{}. {}, {} - {}', $.street, $.city, $.state, $.zip)" }

따라서 다음 문자열이 생성되어 checkaddress Lambda 함수에 입력으로 제공됩니다.

참고

이 예제를 사용하여 입력을 업데이트하고 상태 머신을 실행하면 Lambda 함수가 업데이트된 형식의 입력을 수락하지 않기 때문에 오류가 반환됩니다.

{ "addressString.$": "123 Main St. Columbus, OH - 43219" }

다음 단계

마지막 디버그 오류 주제에서는 Step Functions 워크플로의 오류를 디버깅하는 방법을 알아봅니다.