微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误处理程序未捕获 Aws 步骤函数超时

如何解决错误处理程序未捕获 Aws 步骤函数超时

我有以下状态,其中超时未被捕获,但有“States.ALL”捕获。根据这里https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html 它应该是。你能告诉我有什么问题吗?

   "PublishIotCmd&WaitTask": {
      "Next": "SuccedTask","Retry": [
        {
      [..]
        }
      ],"Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],"ResultPath": "$.error","Next": "ErrorHandlerTask"
        }
      ],"Type": "Task","TimeoutSeconds": 600,"ResultPath": "$.cmdResult","Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken","Parameters": {
        "FunctionName": "xx","Payload": {
          "token.$": "$$.Task.Token","request.$": "$.detail"
        }
      }
    },

在特定情况下,超时是由于任务未通过 sendTaskSuccess 获取令牌。错误当然是这个,但是没有调用“ErrorHandlerTask”,状态机就挂了。

const publishIot = new tasks.LambdaInvoke(this,'PublishIotCmd&WaitTask',{
  lambdaFunction: iotSendCommandFn,payload: sfn.TaskInput.fromObject({
    token: sfn.JsonPath.taskToken,//request: sfn.JsonPath.entirePayload,request: sfn.JsonPath.stringAt('$.detail'),}),resultPath: '$.cmdResult',integrationPattern: sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,timeout: Duration.minutes(TIMEOUT_WAIT_REPLY_SECONDS),

提前致谢

解决方法

对于任务令牌,我相信您应该使用心跳超时而不是一般超时。

在文档中,它指出““HeartbeatSeconds”:600 字段将心跳超时间隔设置为 10 分钟。并且“如果等待的任务在这 10 分钟内没有收到有效的任务令牌,任务将失败并显示 States.Timeout 错误名称。”

我认为Heartbeat在这里工作是一种不同的服务集成。

https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。