【问题标题】:How to pass output of previous Lambda function to next Lambda function when current Lambda function fails当前 Lambda 函数失败时如何将前一个 Lambda 函数的输出传递给下一个 Lambda 函数
【发布时间】:2018-11-21 02:58:37
【问题描述】:

当前 Lambda 函数失败时,如何将前一个 Lambda 函数的输出传递给下一个 Lambda 函数?

我有三个 Lambda 函数 L01、L02 和 L03。

以下是我的阶梯函数定义

{
  "Comment": "Recovery Plan",
  "StartAt": "L01",
  "States": {
    "L01": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:XXXXX:function:Lambda01",
      "Next": "L02"
    },

    "L02": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:XXXXX:function:lambda02",
      "Retry": [
        {
          "ErrorEquals": ["States.TaskFailed"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3,
          "BackoffRate": 2
        }
      ],
      "Catch": [ {
      "ErrorEquals": [ "States.TaskFailed" ],
      "ResultPath":"$",
      "Next": "L03"
       } ],

      "Next": "L03"
    },
    "L03": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:XXXXX:function:lambda03",
      "End": true
    }
  }
}

以下是 Lambda 函数的输入和输出

L01 的输出是

{
    "k01": "v01"
}

L02 的输入来自 L01,即

{
    "k01": "v01"
}

输出到 L02 是

{
    "k01": "v01",
    "k02": "v02"
}

L02 的输入来自 L01,即

{
    "k01": "v01",
    "k02": "v02"
}

L03 的输出是

{
    "k01": "v01",
    "k02": "v02",
    "k03": "v03"
}

我的 Lambda 函数 L02 失败。我也想在失败的情况下执行状态机。我想在 L02 失败时将 L02 函数的输入传递给 L03 函数的输入,并想添加一个键为error,值为custom error

有人可以帮助我吗?

【问题讨论】:

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


    【解决方案1】:

    在错误捕获器中指定ResultPath 属性。默认情况下它是$(并且您明确指定它),这意味着失败状态的输出将只是错误信息(带有代码和可选原因)。但是,如果您将 Catcher 中的 ResultPath 设置为,例如 $.error_info,那么您将保留状态,并且可以在 error_info 属性下访问错误数据(其他属性不会被修改)。

    更多详情,您可能对https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html(错误处理)感兴趣。

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多