如何在 Step 函数调用的 Lambda 函数中抛出 TaskFailed 错误
How do you throw a TaskFailed error inside a Lambda function called by a Step function
我有一个由步进函数调用的 lambda 函数。在内部,lambda 调用 api 并捕获错误。
但是,如果 api 调用失败,我想向 step 函数抛出/ return 一个 TaskFailed 错误,以便稍后重试。我该怎么做? (或者是否有其他方法让步骤稍后重试?)
按照这个定义,如果lambda抛出确切的错误MY_CUSTOM_ERROR
,它会被重试,同样对于Lambda错误,它也会被重试。我们可以针对不同的错误类型设置不同的重试机制。
{
"StartAt": "invoke-lambda",
"States": {
"invoke-lambda": {
"End": true,
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
},
{
"ErrorEquals": [
"MY_CUSTOM_ERROR"
],
"IntervalSeconds": 2
}
],
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:111122223333:function:HelloWorld"
}
}
}
这是Lambda代码,我们只需要将错误对象传递给回调
exports.handler = (event, context, callback) => {
console.log('event',event)
let e = new Error();
e.name = 'MY_CUSTOM_ERROR';
callback(e)
}
我有一个由步进函数调用的 lambda 函数。在内部,lambda 调用 api 并捕获错误。
但是,如果 api 调用失败,我想向 step 函数抛出/ return 一个 TaskFailed 错误,以便稍后重试。我该怎么做? (或者是否有其他方法让步骤稍后重试?)
按照这个定义,如果lambda抛出确切的错误MY_CUSTOM_ERROR
,它会被重试,同样对于Lambda错误,它也会被重试。我们可以针对不同的错误类型设置不同的重试机制。
{
"StartAt": "invoke-lambda",
"States": {
"invoke-lambda": {
"End": true,
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
},
{
"ErrorEquals": [
"MY_CUSTOM_ERROR"
],
"IntervalSeconds": 2
}
],
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:111122223333:function:HelloWorld"
}
}
}
这是Lambda代码,我们只需要将错误对象传递给回调
exports.handler = (event, context, callback) => {
console.log('event',event)
let e = new Error();
e.name = 'MY_CUSTOM_ERROR';
callback(e)
}