Пошаговые функции AWS — повторное использование результатов предыдущего шага

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

Вопрос:

я знаю, что в пошаговых функциях AWS мы можем использовать resultPath для передачи вывода текущего состояния в следующее состояние вместе с его входными данными. Допустим, у меня есть 3 состояния A, B и C, когда A завершает выполнение, он передает свои входные данные и выходные данные в B в качестве входных данных, когда B завершает, есть ли способ передать выходные данные B вместе с выходными данными A вход в C в качестве входных данных? Пожалуйста, посоветуйте, спасибо!

Комментарии:

1. Если состояния ur являются лямбдами, u сможет отправить добавленный результат в следующее состояние.

Ответ №1:

если у вас есть только a resultPath в вашей задаче, то он добавляет результат к входящему событию этой задачи, поэтому, если задача A принимает входные данные

 {  TaskAInput: Stuff }  

И имеет только a resultPath: TaskAOutput , то входные данные для задачи B будут:

 {  TaskAInput: Stuff  TaskAOutput: TaskAResult }  

Это входит в задачу B. Если задача B имеет только a resultPath: TaskBOutput , то

 {  TaskAInput: Stuff  TaskAOutput: TaskAResult  TaskBOutput: TaskBesult }  

и так далее по цепочке.

Примечание. Если вы присоедините an outputPath к любому из вышеперечисленных шагов, он выведет только этот путь json из конечного комбинированного ввода и результатов. Если вы вообще используете входной путь, он сократит ввод только до этого в будущем.

Ответ №2:

Вам просто нужно сделать следующее:

Функция:

 def lambda_handler(event, context):  ...  result = ...  return {  "Ainput":event,  "Aoutput": result  }  

B функция:

 def lambda_handler(event, context):  ...  result = ...  return {  "Ainput": event['Ainput'],  "Aoutput": event['Aoutput'],  "Boutput": result  }    

Функция C:

 def lambda_handler(event, context):  Ainput = event['Ainput']  Aoutput = event['Aoutput']  Boutput = event['Boutput']  

Теперь вы можете использовать эти результаты в своей функции C по своему усмотрению.

Комментарии:

1. Это полезно в определенных ситуациях, но является ненужными накладными расходами в других случаях, когда a resultPath будет делать то же самое. Однако, если вам нужны новые ключи верхнего уровня в json, и ваша лямбда возвращает объект json (т. Е. диктант python), то это определенно правильный путь, так как он дает вам полный контроль над вводом/выводом из любого данного лямбда. Однако вам может потребоваться использовать комбинацию outputPath и resultPath , чтобы предотвратить попадание дубликатов ключей в результаты ввода. (установите для них одинаковое значение)