У меня есть пошаговая функция с 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))
@JorgRoper Спасибо, я отредактировал свой вопрос, чтобы сделать его более понятным.
Я так хочу эту функцию, увы, в данный момент она не поддерживается. Во всяком случае, у вас должен быть трейлинг $
вот так TimeoutSeconds.$: $.myTimeout
Так как я не смог найти решение для динамического тайм-аута.
Я нашел обходной путь, используя Состояние выбора 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: ...
Эта функция доступна уже сейчас. Вместо TimeoutSecondsPath
можно использовать параметр TimeoutSeconds
. TimeoutSecondsPath
принимает ссылочный путь (например, "$.myTimeout"
)
Не могли бы вы показать нам, где вычисляется/определяется "$.expirydate"? TimeoutSeconds должен быть определен в секундах, но ваш переданный параметр "expirydate"???