【问题标题】:Detect updates to AWS StepFunctions State Machine definition inside a Choice state检测选择状态内 AWS StepFunctions 状态机定义的更新
【发布时间】:2021-03-24 03:23:08
【问题描述】:

这是一个非常好的模式,可以根据迭代计数重新启动长时间运行的状态机执行,因此我们不会违反 1 年执行时间和 25k 事件的标准配额 - https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-continue-new.html

我的问题:是否可以在选择状态下检测状态机定义是否已更改(自执行开始以来)?例如,在上面的 IsCountReached 状态。

我们计划使用 AWS CDK 处理状态机的创建和更新。这将使我们能够完全自动化部署到状态机,而不是在更改状态机后手动终止执行并重新启动它。

【问题讨论】:

    标签: amazon-web-services aws-lambda continuous-deployment aws-cdk aws-step-functions


    【解决方案1】:

    据我所知,没有这样的事情。这也没有任何意义,因为状态机是在您的状态机定义的“版本”上运行的。当您更改定义(新版本)时,您通常不希望正在运行的进程受到影响,因为这可能会产生意想不到的后果。

    也就是说,您应该能够相当容易地构建这样的东西:构建一个 Lambda 函数,该函数可以找到当前正在运行的状态机,停止它们并重新启动它们。如果您的定义发生更改,您可以在部署过程中调用此 Lambda 函数。

    这样,如果您的部署包含对状态机的更改,您当前运行的所有状态机都将重新启动,然后使用新定义。

    【讨论】:

    • 我认为能够发现当前“版本”是否已经过时对于运行几个月(通常是循环)的状态机非常有帮助。
    • 您在部署过程中停止执行并重新启动的建议很有趣。但在某些情况下,我们可能不想突然调用 StopExecution;而是让状态机自己做。
    • @NaveenKumar 也许吧。但通常你想要separation of concerns。这就是为什么我宁愿有一个外部“控制器”(例如 Lambda 等)来跟踪并处理这些情况,而不是处理这些情况的步骤函数。
    • @NaveenKumar 如果您不想立即停止执行并将责任移交给 step 函数,您可以在布尔 SSM 参数中设置一个简单的标志(例如 should_restart = true)。然后 step 函数有一个步骤来检查这个参数,如果它设置为true,它会在“它认为”是正确的时间时“重新启动”自己。可以在部署期间使用 AWS CLI 设置此标志。
    • @NaveenKumar 是的,如果外部阶跃函数仅关注控制或“协调”子阶跃函数。
    【解决方案2】:

    DescribeStateMachine 不返回 updateDate 但 DescribeStateMachineForExecution 返回它:

    https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeStateMachineForExecution.html

    【讨论】:

    • 感谢您的建议。我正在考虑解析和查找 DescribeStateMachine 和 DescribeStateMachineForExecution 返回的整个定义之间的差异。向 cmets 添加元数据要简单得多。
    • 我想知道为什么 DescribeStateMachine 不返回 updatedDate。真是个无赖。
    • @NaveenKumar 我宁愿使用定义的哈希 (sha1(myDefinition.json)) 而不是做差异。一旦你改变了定义,哈希值就会改变,你就知道有更新了。这应该比 diff 容易得多。
    • 我会向 AWS Step Functions 团队提出这个问题。
    • Naveen Kumar,@Jens:我更新了我的答案。 DescribeStateMachineForExecution 有 updateDate 数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多