InputPath, 매개변수 및 ResultSelector - AWS Step Functions

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

InputPath, 매개변수 및 ResultSelector

InputPath, ParametersResultSelector 필드는 JSON이 워크플로를 통해 이동할 때 JSON을 조작하는 방법을 제공합니다. InputPath는 경로를 사용하여 JSON 표기법을 필터링해 전달되는 입력을 제한할 수 있습니다(경로 참조). Parameters 필드를 사용하면 키-값 페어 컬렉션을 전달할 수 있습니다. 여기서 값은 상태 머신 정의에서 정의하는 정적 값 또는 경로를 사용하여 입력에서 선택하는 값입니다. ResultSelector 필드는 ResultPath가 적용되기 전의 상태 결과를 조작할 수 있는 방법을 제공합니다.

AWS Step Functions는 InputPath 필드를 먼저 적용한 다음 Parameters 필드를 적용합니다. 우선 InputPath를 사용하여 원시 입력을 필터링한 다음 Parameters를 적용하여 입력을 추가로 조작하거나 새 값을 추가할 수 있습니다. 그런 다음 ResultSelector 필드를 사용하여 ResultPath가 적용되기 전의 상태 출력을 조작할 수 있습니다.

작은 정보

Step Functions 콘솔의 데이터 흐름 시뮬레이터를 사용하면 JSON 경로 구문을 테스트하고 상태 내에서 데이터가 조작되는 방식을 더 잘 이해하며 데이터가 상태 간에 전달되는 방식을 확인할 수 있습니다.

InputPath

InputPath를 사용하여 상태 입력의 부분을 선택합니다.

예를 들어, 상태에 대한 입력에 다음이 포함된다고 가정합니다.

{ "comment": "Example for InputPath.", "dataset1": { "val1": 1, "val2": 2, "val3": 3 }, "dataset2": { "val1": "a", "val2": "b", "val3": "c" } }

InputPath를 적용할 수 있습니다.

"InputPath": "$.dataset2",

위의 InputPath를 통해 입력으로 전달되는 JSON은 다음과 같습니다.

{ "val1": "a", "val2": "b", "val3": "c" }
참고

경로는 값의 모음을 출력할 수 있습니다. 다음 예제를 살펴보세요.

{ "a": [1, 2, 3, 4] }

경로 $.a[0:2]를 적용하는 경우 결과는 다음과 같습니다.

[ 1, 2 ]

파라미터

이 섹션에서는 파라미터 필드를 사용할 수 있는 다양한 방법을 설명합니다.

키-값 페어

Parameters 필드를 사용하여 입력으로 전달되는 키-값 페어 컬렉션을 만듭니다. 각각의 값은 상태 머신 정의에 포함한 정적 값 또는 path를 통해 입력 또는 컨텍스트 객체에서 선택한 값일 수 있습니다. path를 사용하여 값을 선택한 키-값 페어의 경우 키 이름이 .$ 기호로 끝나야 합니다.

예를 들어 다음과 같은 입력을 제공한다고 가정합니다.

{ "comment": "Example for Parameters.", "product": { "details": { "color": "blue", "size": "small", "material": "cotton" }, "availability": "in stock", "sku": "2317", "cost": "$23" } }

정보의 일부를 선택하기 위해 상태 머신 정의에 이러한 파라미터를 지정할 수 있습니다.

"Parameters": { "comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.product.details.size", "exists.$": "$.product.availability", "StaticValue": "foo" } },

이전 입력 및 Parameters 필드를 지정하면 다음과 같은 JSON이 전달됩니다.

{ "comment": "Selecting what I care about.", "MyDetails": { "size": "small", "exists": "in stock", "StaticValue": "foo" } },

입력 외에도 컨텍스트 객체라고 알려진 특수 JSON 객체에 액세스할 수 있습니다. 컨텍스트 객체에는 상태 머신 실행에 대한 정보가 포함됩니다. 컨텍스트 객체 섹션을 참조하세요.

연결된 리소스

또한 Parameters 필드는 정보를 연결된 리소스로 전달할 수 있습니다. 예를 들어 작업 상태가 AWS Batch 작업을 오케스트레이션하는 경우 관련 API 파라미터를 해당 서비스의 API 작업에 직접 전달할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

Amazon S3

상태 간에 전달하는 Lambda 함수 데이터가 262,144바이트를 초과하는 경우 Amazon S3를 사용하여 데이터를 저장하고 다음 방법 중 하나를 구현하는 것이 좋습니다.

또는 구현을 조정하여 실행에서 더 작은 용량의 페이로드를 전달할 수 있습니다.

ResultSelector

ResultSelector 필드를 사용하여 ResultPath가 적용되기 전의 상태 결과를 조작합니다. 이 ResultSelector 필드를 사용하면 키 값 페어 컬렉션을 만들 수 있습니다. 여기서 값은 정적이거나 상태 결과에서 선택한 값입니다. ResultSelector 필드를 사용하면 ResultPath 필드에 전달하려는 상태 결과 부분을 선택할 수 있습니다.

참고

ResultPath 필드를 사용하여 ResultSelector 필드 출력을 원래 입력에 추가할 수 있습니다.

ResultSelector는 다음 상태의 선택적 필드입니다.

예를 들어 Step Functions 서비스 통합에서는 결과의 페이로드 외에 메타데이터를 반환합니다. ResultSelector는 결과의 일부를 선택하고 ResultPath를 사용하여 상태 입력과 병합할 수 있습니다. 이 예제에서는 resourceTypeClusterId만 선택하고 이를 Amazon EMR createCluster.sync의 상태 입력과 병합하려고 합니다. 다음을 예로 들어보겠습니다.

{ "resourceType": "elasticmapreduce", "resource": "createCluster.sync", "output": { "SdkHttpMetadata": { "HttpHeaders": { "Content-Length": "1112", "Content-Type": "application/x-amz-JSON-1.1", "Date": "Mon, 25 Nov 2019 19:41:29 GMT", "x-amzn-RequestId": "1234-5678-9012" }, "HttpStatusCode": 200 }, "SdkResponseMetadata": { "RequestId": "1234-5678-9012" }, "ClusterId": "AKIAIOSFODNN7EXAMPLE" } }

그런 다음 ResultSelector를 사용하여 resourceTypeClusterId를 선택할 수 있습니다.

"Create Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync", "Parameters": { <some parameters> }, "ResultSelector": { "ClusterId.$": "$.output.ClusterId", "ResourceType.$": "$.resourceType" }, "ResultPath": "$.EMROutput", "Next": "Next Step" }

지정된 입력에서 ResultSelector를 사용하면 다음이 생성됩니다.

{ "OtherDataFromInput": {}, "EMROutput": { "ResourceType": "elasticmapreduce", "ClusterId": "AKIAIOSFODNN7EXAMPLE" } }

배열의 배열 평면화

상태 시스템의 Parallel 또는 상태에서 배열의 배열을 반환하는 경우 ResultSelector 필드를 사용하여 배열을 평면 배열로 변환할 수 있습니다. Parallel 또는 Map 상태 정의 내에 이 필드를 포함하여 이러한 상태의 결과를 조작할 수 있습니다.

배열을 평면화하려면 다음 예제와 같이 ResultSelector 필드에서 JMESPath 구문 [*]을 사용합니다.

"ResultSelector": { "flattenArray.$": "$[*][*]" }

배열을 평면화하는 방법을 보여주는 예제는 다음 자습서의 3단계를 참조하세요.