【问题标题】:Lambda does not put message in dlqLambda 不会将消息放入 dlq
【发布时间】:2020-08-22 10:12:46
【问题描述】:

我只是想为 Lambda 测试我的 DLQ,但我不明白为什么没有消息放在上面。我的代码只做一件事throw new Exception("Test");

第一个错误是可以理解的,我尝试使用按钮Test 同步执行此操作。之后我设置了Kinesis 并开始在上面发送消息,但没有任何改变。在CloudWatch metrics 的监控页面上,我看到Errors, Availability 有几个错误,但DeadLetterErrors 没有错误。

至于创建的 DLQ,这只是简单的标准队列,配置没有任何变化。

提前感谢您的帮助

【问题讨论】:

  • 也许这是一个答案,只需要有人会说这是真的docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html。据我了解,这不适用于KinesisDynamoDB。 Lambda 将尝试处理消息,直到消息过期。我说的对吗?
  • 你能分享你的 lambdas 声明的 sn-p 吗?什么是触发器?

标签: amazon-web-services amazon-s3 aws-lambda dead-letter


【解决方案1】:

使用 AWS SDK 异步调用 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

【讨论】:

    【解决方案2】:

    使用此功能,您可以在发生故障时配置目标。此目标可以是 SNS 主题、SQS 队列、另一个 lambda 函数或 EventBridge 事件总线。

    要通过控制台 UI 添加它,

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

    要通过 cloudformation 添加它,请关注documentation
    我将为您需要附加到 lambda 函数的触发器提供一个基本示例:

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

    【讨论】:

    • 不太清楚的是如何获取消息正文(据我所知,这些消息仅包含元数据)。你知道我该怎么做吗?
    猜你喜欢
    • 2019-01-24
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2020-09-28
    • 2014-01-01
    • 2012-01-08
    相关资源
    最近更新 更多