我只是想测试我的 Lambda DLQ,我不明白为什么消息没有放在上面。我的代码只是做一件事throw new Exception("Test");
.
第一个错误是可以理解的,我试图使用按钮Test
同步执行此操作。之后,我设置了Kinesis
并开始在其上发送消息,但没有任何变化。在CloudWatch metrics
的监控页面上,我看到Errors, Availability
中有几个错误,但DeadLetterErrors
中没有错误。
至于创建的DLQ,这只是简单的标准队列,配置没有变化。
提前感谢您的帮助
使用 AWS 开发工具包异步调用 lambda,如下所示。
$ aws lambda invoke --function-name my-function --invocation-type Event --payload '{ "key": "value" }' response.json
{
"StatusCode": 202
}
文档 - https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html
- 使用 Kinesis 流触发 lambda 意味着您正在使用同步调用。 但是,DLQ 仅适用于异步调用。
- 好消息是,AWS 在 2019 年 11 月发布了针对 Kinesis 和 DynamoDB 事件源的新错误处理机制。
使用此功能,您可以在发生故障时配置目标。此目标可以是 SNS 主题、SQS 队列、另一个 lambda 函数或事件桥事件总线。
要通过控制台 UI 添加此项,
- 转到 lambda 函数
- 点击
Add Destination
按钮 - 选择流调用
- 选择故障条件 选择 SQS
- 队列作为目标,并将其指向要像 DLQ 一样使用的 SQS。
要通过 cloudformation 添加它,请按照以下文档.
我将提供您需要附加到 lambda 函数的触发器的基本示例:
LambdaTrigger:
Type: AWS::Lambda::EventSourceMapping
Properties:
FunctionName: !GetAtt Lambda.Arn
EventSourceArn: !GetAtt Kinesis.Arn
DestinationConfig:
OnFailure:
Destination: !GetAtt DLQ.Arn