【发布时间】:2021-12-19 14:20:18
【问题描述】:
我有两个 SQS 队列,一个用于 test 阶段,一个用于 prod 阶段,还有一个带有 test 和 的 Lambda 函数prod 别名,每个别名由对应队列的一个 SQS 事件触发。
我想知道是否有办法为 Lambda 的每个别名(我使用 SAM 模板来定义 Lambda 函数)指定一个 DLQ,或者我想了解处理此类要求的最佳实践。
【问题讨论】:
标签: aws-lambda amazon-sqs
我有两个 SQS 队列,一个用于 test 阶段,一个用于 prod 阶段,还有一个带有 test 和 的 Lambda 函数prod 别名,每个别名由对应队列的一个 SQS 事件触发。
我想知道是否有办法为 Lambda 的每个别名(我使用 SAM 模板来定义 Lambda 函数)指定一个 DLQ,或者我想了解处理此类要求的最佳实践。
【问题讨论】:
标签: aws-lambda amazon-sqs
添加 DLQ 很简单 - 并且您拥有的 test-prod 别名设置根本不会使事情复杂化。
将RedrivePolicy 添加到您的两个队列定义中。这是代码的一半:
# template.yaml
# new: define a new queue to be the prod DLQ
MyProdDLQ:
Type: AWS::SQS::Queue
Properties:
QueueName: this-queue-captures-errors-sent-from-the-prod-queue
MyProdQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: this-queue-feeds-the-prod-alias-lambda
VisibilityTimeout: 60
# new: assign the DLQ
RedrivePolicy:
deadLetterTargetArn: !GetAtt MyProdDLQ.Arn
maxReceiveCount: 5
注意:您可能很想在 lambda 函数本身上定义 DLQ。令人困惑的是,lambda 函数上的 DLQ 是用于asynchronous (event-driven) invocations,而不是 SQS 源。 docs warn about this,不过很容易错过。
【讨论】: