Error handling 如何通过AWS Step函数传递AWS SNS通知中的AWS Lambda错误?
我创建了一个AWS Step函数,该函数触发Lambda python代码,如果Lambda成功,则终止,否则调用SNS主题,在Lambda失败时向订阅的用户发送消息。它正在运行,但消息已修复。步骤函数JSON如下所示: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
{
"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检查我的答案。请原谅我耽搁了。