Step Functions 워크플로의 파라미터를 사용하여 상태 데이터를 조작합니다. - AWS Step Functions

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

Step Functions 워크플로의 파라미터를 사용하여 상태 데이터를 조작합니다.

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

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

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를 사용하여 상태 입력과 병합할 수 있습니다. 이 예제에서는 and만 선택하고 이를 Amazon EMR createCluster .sync의 상태 입력과 병합하려고 합니다. resourceType ClusterId 다음을 예로 들어보겠습니다.

{ "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": { "ClusterId": "AKIAIOSFODNN7EXAMPLE" "ResourceType": "elasticmapreduce", } }

배열의 배열 평면화

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

배열을 평면화하려면 다음 예제와 같이 [*] ResultSelector 필드의 JMESPath구문을 사용하십시오.

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

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