如何在AWS Step Functions中为活动添加动态的TimeoutSeconds?

时间:2019-04-08 19:25:00

标签: amazon-web-services serverless 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

但不幸的是,它没有用。

修改: 我想在使用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))

2 个答案:

答案 0 :(得分:1)

此功能现已可用。有一个 TimeoutSecondsPath 参数可以用来代替 TimeoutSecondsTimeoutSecondsPath 接受参考路径(例如 "$.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: ...

Step function Visualization