obi*_*bie 5 amazon-sqs amazon-web-services aws-lambda
我尝试遵循有关在 AWS 上为我的 Lambda 设置 SQS 死信队列的文档,但我似乎无法将错误传递给它。
我有一个 Lambdaeu-west-2
exports.handler = async (event) => {
if (event.desire === 'error') {
throw new Error('dutifully throw an error');
}
const response = {
statusCode: 200,
body: JSON.stringify('Complete the lambda!'),
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
将异步调用设置为我的 sqs 队列test-dlq
我在角色中添加了以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:eu-west-2:123456789:test-dlq"
}
]
}
Run Code Online (Sandbox Code Playgroud)
(我之前已经这样设置过,"Action": "sqs:SendMessage"但为了简洁起见,我让它更加宽松)
我已经设置了 SQS 队列来接收消息:
我的测试用例有效负载是:
{
"desire": "error"
}
Run Code Online (Sandbox Code Playgroud)
这会导致 lambda 出错并将错误添加到 CloudWatch 日志,但不会传递到 DLQ。
我是否需要采取任何措施将错误路由到队列,或者我是否配置错误?
DLQ 不起作用的原因是使用Test按钮或调用函数:
aws lambda invoke --function-name testFunction --payload '{"desire":"error"}' /tmp/out.json
Run Code Online (Sandbox Code Playgroud)
导致同步调用,而不是异步调用。
要异步调用函数,您必须在 CLI 中使用Event type :
aws lambda invoke --function-name testFunction --invocation-type Event --payload '{"desire":"error"}' /tmp/out.json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3332 次 |
| 最近记录: |