Переопределите поле во входных данных перед переходом в следующее состояние в функции шага AWS

#amazon-web-services #aws-step-functions

Вопрос:

Допустим, у меня есть 3 состояния, A -> B ->> C. Предположим, что входные данные для A включают поле с именем>> names , которое имеет тип List, и каждый элемент содержит два поля firstName и lastName . Состояние B обработает входные данные для A и вернет вызванный ответ newLastName . Если я хочу переопределить каждый элемент names таким образом, чтобы names[i].lastName = newLastName перед передачей этого ввода в состояние C существовал ли встроенный синтаксис для этого? Спасибо.

Ответ №1:

Вы управляете событиями, передаваемыми следующей задаче, в пошаговой функции с тремя атрибутами определения: ResultPath и OutputPath при выходе из одной задачи, и InputPath при входе в следующую.

Сначала вы должны понять, как конечный автомат создает событие для следующей задачи, и каждый из 3 вышеперечисленных параметров изменяет его.

У вас должен быть, по крайней мере, путь к результату. Это ключ в том случае, если вывод вашей лямбды будет помещен под. так ResultPath="$.my_path" что в результате будет создан объект json, у которого есть ключ верхнего уровня my_path со значением, равным тому, что выводится из лямбды.

Если это единственный атрибут, он привязан к тому, что было введено. Поэтому, если бы ваше входное событие было объектом json с ключами original_key1 , а some_other_key ваш вывод только с указанным выше путем к результату был бы:

 {
    "original_key_1": some value,
    "some_other_key": some other value,
    "my_path": the output of your lambda
}
 

Теперь, если вы добавите OutputPath, это отключит все, кроме пути (ПОСЛЕ добавления пути к результату!) в следующем выводе.

Если вы добавите OutputPath="$.my_path" , вы получите json:

 { output of your lambda }
 

(лучше, чтобы ваш вывод был сопоставимым объектом json, как диктант python!)

InputPath делает то же самое … но для ввода. Он отсекает все, кроме описанного пути, и это единственное, что отправляется в лямбду. Но это не мешает добавлению входных данных — поэтому InputPath ResultPath приводит к тому, что в лямбду отправляется меньше, но все вместе на выходе

Однако на самом деле нет логики цикла, подобной той, которую вы описываете, — определения задач и конечных автоматов являются статическими направлениями, а не динамической логикой.

Вы можете просто обработать его внутри лямбды. Это своего рода предпочтительный метод. ОДНАКО, если вы это сделаете, вам следует использовать комбинацию OutputPath и ResultPath, чтобы «отключить» ввод, заменив различные поля входящего события тем, что вы хотите, прежде чем возвращать его в конце.