Как добавить динамические TimeoutSeconds для активности в AWS Step Functions?

У меня есть пошаговая функция с TimeoutSeconds, например:

ActivityWaiting:
    Type: Task
    ResultPath: $.output
    Resource: arn:aws:states:#{AWS::Region}:#{AWS::AccountId}:activity:myActivity
    TimeoutSeconds: 3600

Я хотел бы контролировать значение TimeoutSeconds и изменить его с помощью параметра из предыдущего шага. Я пробовал что-то вроде этого:

ActivityWaiting:
    Type: Task
    ResultPath: $.output
    Resource: arn:aws:states:#{AWS::Region}:#{AWS::AccountId}:activity:myActivity
    TimeoutSeconds: $.myTimeout

Но, к сожалению, это не сработало.

Редактировать: Я хотел бы рассчитать/определить время myTimeout перед выполнением пошаговой функции с помощью python. Что-то такое:

data['myTimeout'] = getTimeout() #dymanic time in the seconds(ex 15000)

response = step_functions.start_execution(stateMachineArn=state_machine, input=json.dumps(data))

Не могли бы вы показать нам, где вычисляется/определяется "$.expirydate"? TimeoutSeconds должен быть определен в секундах, но ваш переданный параметр "expirydate"???

Jorg Roper 08.04.2019 23:21

@JorgRoper Спасибо, я отредактировал свой вопрос, чтобы сделать его более понятным.

Marina 09.04.2019 11:33

Я так хочу эту функцию, увы, в данный момент она не поддерживается. Во всяком случае, у вас должен быть трейлинг $ вот так TimeoutSeconds.$: $.myTimeout

andrhamm 07.10.2019 23:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
3
839
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Так как я не смог найти решение для динамического тайм-аута.

Я нашел обходной путь, используя Состояние выбора AWS

Мне нужно было дождаться ответа от микросервиса, время зависело от количества объектов, которые я ему отправил. Процесс обработки каждого объекта занимал в среднем около 3 минут, поэтому тайм-аут мог составлять от 3 минут и более.

Все результаты мой микросервис записал в БД. Поэтому я создал лямбду, которая проверяет БД в цикле.

Условие выхода такое

  • Получение всех результатов в БД
  • Время ожидания закончилось, которое рассчитывается динамически для каждого выполнения

Я работаю с фреймворком Бессерверный, вот мое окончательное решение:

VerifyLambda:
    Type: Task
    Resource: arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:verify-step
    Next: IsFinished
IsFinished:
    Type: Choice
    Choices:
        - Variable: $.isFinish
        BooleanEquals: false
        Next: Wait 3m
    Default: NextLambdaStep
Wait 3m:
    Type: Wait
    Seconds: 180
    Next: VerifyLambda
NextLambdaStep: ...

Step function Visualization

Эта функция доступна уже сейчас. Вместо TimeoutSecondsPath можно использовать параметр TimeoutSeconds. TimeoutSecondsPath принимает ссылочный путь (например, "$.myTimeout")

Другие вопросы по теме