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

How to add dynamic TimeoutSeconds for activity in AWS Step Functions?

我有一个 activity 步进函数 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

但不幸的是,它没有用。

编辑: 我想 calculate/define 在使用 python 执行步进函数之前的时间 myTimeout。类似的东西:

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

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

因为找不到动态超时的解决方法。

我使用 AWS Choice state

做了一个解决方法

我需要等待微服务的答复,时间取决于我发送给它的对象的数量。 每个对象的处理平均花费 3 分钟,因此超时可能为 3 分钟或更长时间。

所有的结果,我的微服务已经写入了DB。 所以我创建了一个 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: ...

此功能现已可用。有一个 TimeoutSecondsPath 参数可以用来代替 TimeoutSecondsTimeoutSecondsPath 接受参考路径(例如 "$.myTimeout"