我在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
但不幸的是,它没有用。
修改:
我想在使用python执行step函数之前计算/定义时间myTimeout
。像这样:
data['myTimeout'] = getTimeout() #dymanic time in the seconds(ex 15000)
response = step_functions.start_execution(stateMachineArn=state_machine, input=json.dumps(data))
答案 0 :(得分:1)
此功能现已可用。有一个 TimeoutSecondsPath
参数可以用来代替 TimeoutSeconds
。 TimeoutSecondsPath
接受参考路径(例如 "$.myTimeout"
)
答案 1 :(得分:0)
由于我找不到动态超时的解决方案。
我已经使用AWS Choice state
进行了变通我需要等待微服务的答案,时间取决于我发送给它的对象的数量。 每个对象的平均处理时间约为3分钟,因此超时时间可能在3分钟以上。
所有结果,我的微服务已写入数据库。 因此,我创建了一个lambda,它可以循环检查数据库。
退出条件是
我使用Serverless框架,这是我的最终解决方案:
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: ...