重试两次之间的AWS StepFunction通知

时间:2020-07-07 13:51:41

标签: amazon-web-services aws-lambda aws-step-functions

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

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

2 个答案:

答案 0 :(得分:0)

恐怕步进功能重试逻辑未提供您要查找的功能。我可以想到两种可能的解决方法。

选项1

具有一个lambda,该lambda由错误的WatchWatch日志从您的步进函数lambda中触发(您可以在this示例之后创建订阅过滤器)。该lambda将获取您的step函数的所有正在运行的执行,并警告是否有任何运行的时间超过了指定时间。

选项2

在您的步进函数lambda中,将错误日志与步进函数arn&执行ID打包在一起(将其放入lambda的一种方法是通过context object)。有一个单独的lambda,该lambda由来自您的步进函数lambda的错误CloudWatch日志触发。通过使用步进函数arn和执行ID,此lambda可以根据步进函数执行处于运行状态的时间执行警报。

示例客户呼叫(其他客户端也应提供类似的方法)

  • Boto3 method,您可以用来获取所有正在运行的步进功能的执行情况

*不幸的是,用于获取步骤函数执行的客户端方法仅返回start DATE(而不是时间)。如果可以为步进函数执行创建命名标准,则可以从执行本身的名称推断出开始时间。 (这也可能是避免在尝试使用重复的执行名称调用步骤函数时遇到错误的好方法)

希望这会有所帮助!

答案 1 :(得分:0)

我花了大约 4 个小时才找到与您类似的问题的解决方案。

我需要在第一次尝试失败后发送电子邮件通知。这是我为使其工作所做的工作:

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

在你的 lambda 函数中你写下这样的东西:

export const handler = (event) => {
  if (event.retryCount) {
    // send email notification
  }
};

我从 AWS 文档中获取信息:https://docs.aws.amazon.com/step-functions/latest/dg/input-output-contextobject.html