AWS StepFunctions — объединение и сведение выходных данных задачи в сочетании с исходными входными данными

Как мы используем Parameters, ResultPath и ResultSelector для объединения результатов Task с исходным вводом на том же уровне JSON?

Я проверил документацию. на AWS, но кажется, что ResultSelector всегда создает новый словарь, который помещает его на 1 уровень ниже результата.

Пример ввода


    {
        "status": "PENDING",
        "uuid": "00000000-0000-0000-0000-000000000000",
        "first_name": "John",
        "last_name": "Doe",
        "email": "[email protected]",
        "orders": [
            {
                "item_uuid": "11111111-1111-1111-1111-111111111111",
                "quantities": 2,
                "price": 2.38,
                "created_at": 16049331038000
            }
        ]
    
    
    }

Определение конечного автомата


    "Review": {
      "Type": "Task",
      "Resource": "arn:aws:states:us-east-1:123456789012:activity:Review",
      "ResultPath": null,
      "Next": "Processing",
      "Parameters": {
        "task_name": "REVIEW_REQUIRED",
        "uuid.$": "$.uuid"
      }
    },

Пример вывода из Review Activity


    {
        "review_status": "APPROVED"
    }

Вопрос Как мне обновить определение конечного автомата, чтобы объединить результат Review действия и исходный ввод в нечто, как показано ниже?


   {
        "status": "PENDING",
        "uuid": "00000000-0000-0000-0000-000000000000",
        "first_name": "John",
        "last_name": "Doe",
        "email": "[email protected]",
        "orders": [
            {
                "item_uuid": "11111111-1111-1111-1111-111111111111",
                "quantities": 2,
                "price": 2.38,
                "created_at": 16049331038000
            }
        ],
        "review_status": "APPROVED"
    }


ПРИМЕЧАНИЕ У меня нет доступа к коду действия, только к файлу определения.


person xbeta    schedule 30.11.2020    source источник


Ответы (2)


Хотя пошаговая функция не позволяет вам сделать это, вы можете создать состояние Pass, которое сглаживает ввод в качестве обходного пути.

Пример ввода:

{
  "name": "John Doe",
  "lambdaResult": {
    "age": "35",
    "location": "Eastern Europe"
   }
}
  

Государственный язык Амазонки:

"Flatten": {
  "State": "Pass",
  "Parameters": {
      "name.$" : "$.name",
      "age.$" : "$.lambdaResult.age",
      "location.$": "$.lambdaResult.location"
  },
  "Next": "MyNextState"
}     

Выход:

{
  "name": "John Doe",
  "age": "35",
  "location": "Eastern Europe"
}
  

Это утомительно, но это делает работу.

person Min Kim    schedule 23.04.2021

Спасибо за ваш вопрос.

Похоже, вам не обязательно каким-либо образом манипулировать выводом, и вы ищете способ объединить вывод состояния с его вводом, прежде чем передавать его в следующее состояние. ResultPath< Поле /strong> позволяет объединить результат задачи с вводом задачи или выбрать один из них. Путь, который вы указываете для ResultPath, определяет, какая информация передается на выход.

person aws-jordan    schedule 07.12.2020