기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
예: Step Functions 워크플로의 경로를 사용하여 상태 데이터 조작
상태 관리 및 데이터 변환
변수를 사용하여 상태 간에 데이터 전달과 JSONata를 사용하여 데이터 변환에 대해 알아봅니다.
이 주제에는 InputPath, ResultPath 및 OutputPath 필드를 사용하여 상태 입력 및 출력 JSON을 조작하는 방법의 예가 포함되어 있습니다.
Fail 워크플로 상태 상태 또는 Succeed 워크플로 상태 상태 이외의 모든 상태에는 InputPath
, ResultPath
또는 OutputPath
와 같은 입력 및 출력 처리 필드가 포함될 수 있습니다. 또한 Wait 워크플로 상태 및 Choice 워크플로 상태 상태는 ResultPath
필드를 지원하지 않습니다. 이러한 필드를 사용하면 JsonPath
또한 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"
}
}
comment
및 extra
노드를 폐기하지만 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
작업 상태에서:
-
InputPath
는lambda
노드만 입력에서 Lambda 함수로 보냅니다. -
ResultPath
는 기존 입력의data
노드의 하위 개념으로 결과를 입력합니다. -
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 }, ] } }
Lambda 함수에서 사용해야 하는 노드를 지정하려면 다음과 같이 check-identity
InputPath
필드를 사용합니다.
"InputPath": "$.data.identity"
그리고
Lambda 함수에서 사용해야 하는 노드를 지정하려면 다음과 같이 check-address
InputPath
필드를 사용합니다.
"InputPath": "$.data.address"
이제 원본 상태 시스템 입력 내에 검증 결과를 저장하려면 다음과 같이 ResultPath
필드를 사용합니다.
"ResultPath": "$.results"
하지만 ID 및 확인 결과만 필요하고 원래 입력을 삭제하려면 다음과 같이 OutputPath
필드를 사용합니다.
"OutputPath": "$.results"
자세한 내용은 Step Functions에서 입력 및 출력 처리 단원을 참조하십시오.
OutputPath를 사용하여 상태 출력 필터링
OutputPath
를 사용하면 다음 상태로 전달할 상태 출력 부분을 선택할 수 있습니다. 이 접근 방식을 사용하면 원치 않는 정보를 필터링하고 필요한 JSON 부분만 전달할 수 있습니다.
OutputPath
를 지정하지 않으면 기본값 $
가 사용됩니다. 이 값은 전체 JSON 노드(상태 입력, 작업 결과 및 ResultPath
에 따라 결정됨)를 다음 상태로 전달합니다.