Lambda 不会将消息放入 dlq 中



我只是想测试我的 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 添加此项,

  1. 转到 lambda 函数
  2. 点击Add Destination按钮
  3. 选择流调用
  4. 选择故障条件
  5. 选择 SQS
  6. 队列作为目标,并将其指向要像 DLQ 一样使用的 SQS。

要通过 cloudformation 添加它,请按照以下文档.
我将提供您需要附加到 lambda 函数的触发器的基本示例:

LambdaTrigger:
Type: AWS::Lambda::EventSourceMapping
Properties:
FunctionName: !GetAtt Lambda.Arn
EventSourceArn: !GetAtt Kinesis.Arn
DestinationConfig:
OnFailure:
Destination: !GetAtt DLQ.Arn

相关内容

  • 没有找到相关文章

最新更新