AWS Lambda - 基于 Lambda 别名的不同死信队列
AWS Lambda - different dead letter queue based on Lambda alias
我有两个 SQS 队列,一个用于 test 阶段,一个用于 prod 阶段,还有一个带有 [=14= 的 Lambda 函数]test和prod别名,每个别名由相应队列的SQS事件触发。
我想知道是否有办法为 Lambda 的每个别名(我使用 SAM 模板定义 Lambda 函数)指定一个 DLQ,或者我想了解处理此类问题的最佳实践要求。
添加您的 DLQ 非常简单 - 而且您拥有的测试产品别名设置根本不会使事情复杂化。
将 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, not SQS sources. The docs warn about this的,但是很容易漏掉
我有两个 SQS 队列,一个用于 test 阶段,一个用于 prod 阶段,还有一个带有 [=14= 的 Lambda 函数]test和prod别名,每个别名由相应队列的SQS事件触发。
我想知道是否有办法为 Lambda 的每个别名(我使用 SAM 模板定义 Lambda 函数)指定一个 DLQ,或者我想了解处理此类问题的最佳实践要求。
添加您的 DLQ 非常简单 - 而且您拥有的测试产品别名设置根本不会使事情复杂化。
将 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, not SQS sources. The docs warn about this的,但是很容易漏掉