Error handling 如何通过AWS Step函数传递AWS SNS通知中的AWS Lambda错误?

Error handling 如何通过AWS Step函数传递AWS SNS通知中的AWS Lambda错误?,error-handling,aws-lambda,amazon-sns,aws-step-functions,Error Handling,Aws Lambda,Amazon Sns,Aws Step Functions,我创建了一个AWS Step函数,该函数触发Lambda python代码,如果Lambda成功,则终止,否则调用SNS主题,在Lambda失败时向订阅的用户发送消息。它正在运行,但消息已修复。步骤函数JSON如下所示: { "StartAt": "Lambda Trigger", "States": { "Lambda Trigger": { "Type": &quo

我创建了一个AWS Step函数,该函数触发Lambda python代码,如果Lambda成功,则终止,否则调用SNS主题,在Lambda失败时向订阅的用户发送消息。它正在运行,但消息已修复。步骤函数JSON如下所示:

{
  "StartAt": "Lambda Trigger",
  "States": {
    "Lambda Trigger": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-2:xxxxxxxxxxxx:function:helloworldTest",
      "End": true,
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "ResultPath": "$.error",
          "Next": "Notify Failure"
        }
      ]
    },
    "Notify Failure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Message": "Batch job submitted through Step Functions failed with the following error, $.error",
        "TopicArn": "arn:aws:sns:us-east-2:xxxxxxxxxxxx:lambda-execution-failure"
      },
      "End": true
    }
  }
}
唯一的问题是,我想将失败错误消息附加到我的消息字符串中,我尝试了,但没有按预期工作

但我收到的邮件如下:

{
  "StartAt": "Lambda Trigger",
  "States": {
    "Lambda Trigger": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-2:xxxxxxxxxxxx:function:helloworldTest",
      "End": true,
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "ResultPath": "$.error",
          "Next": "Notify Failure"
        }
      ]
    },
    "Notify Failure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Message": "Batch job submitted through Step Functions failed with the following error, $.error",
        "TopicArn": "arn:aws:sns:us-east-2:xxxxxxxxxxxx:lambda-execution-failure"
      },
      "End": true
    }
  }
}


如何操作?

此行已将异常对象附加到“错误”路径

 "ResultPath": "$.error"
我们只需要将“$”传递给消息。$传递给SNS任务,输入和错误详细信息都将发送给SNS

{
   "TopicArn":"${SnsTopic}",
   "Message.$":"$"
}
如果我们不想在电子邮件中追加Lambda的输入,我们应该跳过ResultPath或将“$”作为ResultPath,输入对象将被忽略

"ResultPath": "$"

我可以使用“Error.$”:“$.Cause”解决此问题

以下是状态机故障部分的工作示例:

"Job Failure": {
              "Type": "Task",
              "Resource": "arn:aws:states:::sns:publish",
              "Parameters": {
                "Subject": "Lambda Job Failed",
                "Message": {
                  "Alarm": "Lambda Job Failed",
                  "Error.$": "$.Cause"
                },
                "TopicArn": "arn:aws:sns:us-east-2:xxxxxxxxxxxx:Job-Run-Notification"
              },
              "End": true
            }

希望这有帮助

这是代码的完整版本

{
  "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXXX:function:StepFunctionTest",
      "End": true,
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "Next": "NotifyFailure"
        }
      ]
    },
    "NotifyFailure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Subject": "[ERROR]: Task failed",
        "Message": {
          "Alarm": "Batch job submitted through Step Functions failed with the following error",
          "Error.$": "$.Cause"
        },
        "TopicArn": "arn:aws:sns:us-east-1:XXXXXXXXXXXXX:Notificaiton"
      },
      "End": true
    }
  }
}

我也在尝试做同样的事情,你找到正确的方法了吗?将静态字符串添加到路径值是的,我知道了。我会在某个时候发布一个答案。如果你能在解决问题后发布答案,那就太好了。我也有同样的问题。当然,我会的,它已经解决了,现在工作正常了。@carpa_jo检查我的答案。请原谅我耽搁了。