예: Step Functions 워크플로의 경로를 사용하여 상태 데이터 조작 - AWS Step Functions

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

예: Step Functions 워크플로의 경로를 사용하여 상태 데이터 조작

이 주제에는 InputPath, ResultPath 및 OutputPath 필드를 사용하여 상태 입력 및 출력 JSON을 조작하는 방법의 예가 포함되어 있습니다.

Fail 워크플로 상태 상태 또는 Succeed 워크플로 상태 상태 이외의 모든 상태에는 InputPath, ResultPath 또는 OutputPath와 같은 입력 및 출력 처리 필드가 포함될 수 있습니다. 또한 Wait 워크플로 상태Choice 워크플로 상태 상태는 ResultPath 필드를 지원하지 않습니다. 이러한 필드를 사용하면 JsonPath를 사용하여 워크플로를 통해 이동하는 JSON 데이터를 필터링할 수 있습니다.

또한 Parameters 필드를 사용하여 워크플로를 통해 이동하는 JSON 데이터를 조작할 수 있습니다. Parameters 사용에 대한 자세한 내용은 Step Functions 워크플로에서 파라미터 조작을 참조하십시오.

예를 들어 자Lambda를 사용하는 Step Functions 상태 시스템 만들기습서에 설명된 AWS Lambda 함수와 상태 머신으로 시작합니다. 상태 시스템을 수정하여 다음 InputPath, ResultPath, OutputPath를 포함할 수 있습니다.

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "InputPath": "$.lambda", "ResultPath": "$.data.lambdaresult", "OutputPath": "$.data", "End": true } } }

다음 입력을 사용하여 실행을 시작합니다.

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17 }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

commentextra 노드를 폐기하지만 data 노드의 정보를 보존하면서 동시에 Lambda 함수의 출력을 포함하려고 한다고 가정해보겠습니다.

업데이트된 상태 시스템에서 Task 상태를 변경하여 작업으로 입력을 전달합니다.

"InputPath": "$.lambda",

상태 시스템 정의의 이 라인은 작업 입력을 상태 입력의 lambda 노드로만 한정합니다. Lambda 함수는 입력으로 JSON 객체 {"who": "AWS Step Functions"}만 수신합니다.

"ResultPath": "$.data.lambdaresult",

ResultPath는 상태 시스템에게 Lambda 함수 결과를 기존 상태 시스템 입력의 data 노드 하위 개념으로 lambdaresult라는 노드에 입력하라고 지시합니다. 원래 입력과 OutputPath를 사용한 결과에서 다른 어떠한 조작도 수행하지 않으므로 이제 상태 출력에는 원래 입력과 함께 Lambda 함수의 결과가 포함됩니다.

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

하지만 목적은 data 노드만 보존하고 Lambda 함수의 결과를 포함하는 것이었습니다. OutputPath는 이런 결합된 JSON을 상태 출력으로 보내기 전에 필터링합니다.

"OutputPath": "$.data",

기존 입력에서 data 노드(ResultPath가 입력한 lambdaresult 하위 개념 포함)만 선택하여 출력으로 전달될 수 있게 합니다. 상태 출력은 다음과 같이 필터링됩니다.

{ "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }

Task작업 상태에서:

  1. InputPathlambda 노드만 입력에서 Lambda 함수로 보냅니다.

  2. ResultPath는 기존 입력의 data 노드의 하위 개념으로 결과를 입력합니다.

  3. OutputPath는 상태 입력에서 data 노드만 상태 출력으로 전달하도록 이제 Lambda 함수의 결과를 포함된 상태 입력을 필터링합니다.

예 JsonPath를 사용하여 원래 상태 시스템 입력, 결과 및 최종 출력을 조작하는 예제

보험 신청자의 신원과 주소를 확인하는 다음 상태 시스템을 고려해보겠습니다.

참고

전체 예제를 보려면 Step Functions에서 JSON 경로를 사용하는 방법을 참조하세요.

{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-identity:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address:$LATEST" }, "End": true } } } ] } } }

다음 입력을 사용하여 이 상태 시스템을 실행하면 검증을 수행하는 Lambda 함수에서 확인이 필요한 데이터만 입력으로 예상하므로 실행이 실패합니다. 따라서 적절한 JsonPath를 사용하여 확인할 정보가 포함된 노드를 지정해야 합니다.

{ "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" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }

check-identity Lambda 함수에서 사용해야 하는 노드를 지정하려면 다음과 같이 InputPath 필드를 사용합니다.

"InputPath": "$.data.identity"

그리고 check-address Lambda 함수에서 사용해야 하는 노드를 지정하려면 다음과 같이 InputPath 필드를 사용합니다.

"InputPath": "$.data.address"

이제 원본 상태 시스템 입력 내에 검증 결과를 저장하려면 다음과 같이 ResultPath 필드를 사용합니다.

"ResultPath": "$.results"

하지만 ID 및 확인 결과만 필요하고 원래 입력을 삭제하려면 다음과 같이 OutputPath 필드를 사용합니다.

"OutputPath": "$.results"

자세한 내용은 Step Functions에서 입력 및 출력 처리 단원을 참조하십시오.

OutputPath를 사용하여 상태 출력 필터링

OutputPath를 사용하면 다음 상태로 전달할 상태 출력 부분을 선택할 수 있습니다. 이 접근 방식을 사용하면 원치 않는 정보를 필터링하고 필요한 JSON 부분만 전달할 수 있습니다.

OutputPath를 지정하지 않으면 기본값 $가 사용됩니다. 이 값은 전체 JSON 노드(상태 입력, 작업 결과 및 ResultPath에 따라 결정됨)를 다음 상태로 전달합니다.