Сквозной ввод в вывод в AWS Step Functions

Как передать входные данные в состояние Task в AWS Step Functions на выход?

После прочтения ввода и На странице "Обработка вывода" в документации AWS я играл с различными комбинациями InputPath, ResultPath и OutputPath.

Определение состояния:

"First State": {
    "Type": "Task",
    "Resource": "[My Lambda ARN]",
    "Next": "Second State",
    "InputPath": "$.someKey",
    "OutputPath": "$"
}

Вход:

{
    "someKey": "someValue"
}

Ожидаемый результат

Я бы хотел, чтобы результат First State (и, следовательно, вход Second State) был

{
    "someKey": "someValue"
}

Фактический результат

[empty]

Что делать, если ввод более сложный, например

{
    "firstKey": "firstValue",
    "secondKey": "secondValue"
}

Я хотел бы переслать все это, не беспокоясь о (под) путях.


person matsev    schedule 05.12.2017    source источник
comment
Привет, @matsev. Не могли бы вы ответить на мой вопрос? Это похоже на то, что вы спросили. Спасибо   -  person Gustavo Lopes    schedule 11.10.2019


Ответы (3)


В спецификации Amazon States Language говорится, что:

Если значение ResultPath равно нулю, это означает, что собственный исходный вывод состояния отбрасывается, и его исходный ввод становится его результатом.

Следовательно, я обновил определение своего состояния на

"First State": {
    "Type": "Task",
    "Resource": "[My Lambda ARN]",
    "Next": "Second State",
    "ResultPath": null
}

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

{
    "firstKey": "firstValue",
    "secondKey": "secondValue"
}
person matsev    schedule 05.12.2017

Для тех, кто использует CDK, решение состоит в использовании явного перечисления aws_stepfunctions.JsonPath.DISCARD, а не None / null.

from aws_cdk import (
    aws_stepfunctions,
    aws_stepfunctions_tasks,
)

aws_stepfunctions_tasks.LambdaInvoke(
    self,
    "my_function",
    lambda_function=lambda_function,
    result_path=aws_stepfunctions.JsonPath.DISCARD,
)

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-stepfunctions.JsonPath.html#static-discard

person Alex    schedule 07.01.2021

Я искал решение для передачи ввода из одного параллельного состояния в другое параллельное состояние, и вышеупомянутый вариант работал действительно хорошо. Например, моя пошаговая функция выглядит так ... tas1- ›parallel task2 -› parallel trask3 - ›task4. Поэтому, когда он запускается с параллельной задачей3, входные значения стираются, поэтому ptask3 не работает. С помощью вышеуказанного варианта я смог передать тот же ввод от ptask2 к ptas3.

person spatel    schedule 09.10.2020
comment
Привет, spatel, это не ответ сам по себе, это скорее комментарий к ответу, о котором вы говорите. Пожалуйста, удалите этот ответ и опубликуйте его как комментарий к мацевскому ответу. - person NHol; 09.10.2020