기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
예: Step Functions 워크플로의 상태 데이터 조작
이 항목에는 InputPath ResultPath, 및 필드를 JSON 사용하여 상태 입력 및 출력을 조작하는 방법에 대한 예제가 포함되어 있습니다. OutputPath
실패 워크플로 상태 상태 또는 워크플로 상태 성공 상태 이외의 모든 상태에는 InputPath
, ResultPath
또는 OutputPath
와 같은 입력 및 출력 처리 필드가 포함될 수 있습니다. 또한 대기 워크플로 상태 및 워크플로 상태 선택 상태는 ResultPath
필드를 지원하지 않습니다. 이러한 필드에서 a를 사용하여 JsonPath
또한 Parameters
필드를 사용하여 워크플로를 통해 이동하는 JSON 데이터를 조작할 수 있습니다. Parameters
사용에 대한 자세한 내용은 Step Functions 워크플로의 파라미터를 사용하여 상태 데이터를 조작합니다.을 참조하십시오.
예를 들어, 다음으로 시작하십시오. AWS Lambda Lambda를 사용하는 Step Functions 상태 시스템 만들기튜토리얼에 설명된 함수 및 상태 머신. 상태 시스템을 수정하여 다음 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
노드를 폐기할 수 있지만 Lambda 함수의 출력을 포함시키고 노드에 정보를 보존하고 싶다고 가정해 보겠습니다. data
업데이트된 상태 시스템에서 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에서 입력 및 출력 처리하기 단원을 참조하십시오.