#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, чтобы «отключить» ввод, заменив различные поля входящего события тем, что вы хотите, прежде чем возвращать его в конце.