首页 > 解决方案 > 重试尝试之间的 Aws StepFunction 通知

问题描述

Aws Step 函数,假设我们有一个具有以下重试逻辑的任务,它将在 10 秒、1 分钟、6 分钟、36 分钟、3.6 小时后重试 6 次,最后在 21.6 小时后重试。但是,我想在 4 次尝试后重试失败时直接向 SNS 发送通知或设置警报,以采取措施并解决后端问题。步骤重试可以吗?我尝试查看步骤和 Lambda 的 Cloudwatch 日志,以查看日志中是否有任何差异,以确定它失败了多长时间或尝试了多少次尝试等来创建过滤器。我还没有找到任何好的解决方案。有什么我可以尝试的吗?

{
   "Type":"Task",
   "Resource":"${MyLambda}",
   "End":true,
   "Retry":[
      {
         "ErrorEquals":[
            "States.ALL"
         ],
         "IntervalSeconds":10,
         "MaxAttempts":6,
         "BackoffRate":6
      }
   ]
},

标签: amazon-web-servicesaws-lambdaaws-step-functions

解决方案


恐怕步进函数重试逻辑中没有提供您正在寻找的功能。我可以想到两种潜在的解决方法。

选项1

有一个 lambda,该 lambda 由步骤函数 lambda 中的错误 CloudWatch 日志触发(您可以按照示例创建订阅过滤器)。此 lambda 将获取您的 step 函数的所有正在运行的执行,并在任何运行时间超过指定时间时发出警报。

选项 2

在您的 step function lambdas 中,使用 step function arn & execution id 包装您的错误日志(在您的 lambda 中获取这些错误日志的一种方法是通过context object)。有一个单独的 lambda,该 lambda 由您的步骤函数 lambda 中的错误 CloudWatch 日志触发。使用步进函数 arn 和执行 ID,此 lambda 可以根据步进函数执行处于运行状态的时间长短执行警报。

示例客户端调用(其他客户端也应该提供类似的方法)

  • Boto3方法可用于获取所有正在运行的步骤函数执行

*可悲的是,获取步进函数执行的客户端方法仅返回开始日期(而不是时间)。如果您可以为步进函数执行创建命名标准,那么您可以从执行本身的名称推断开始时间。(这也可能是避免在尝试调用具有重复执行名称的步进函数时遇到错误的好方法)

希望这可以帮助!


推荐阅读