Eag*_*eak 11 amazon-sqs amazon-web-services amazon-dynamodb aws-lambda
我有一个AWS Lambda函数,它订阅DynamoDB流并配置了SQS死信队列(DLQ).我可以看到在管理控制台中配置了正确的队列.我也小心翼翼地sqs:SendMessage在我的DLQ上赋予我的功能权限.
订阅有效,但仍然"挂起"调用错误,就像没有配置DLQ一样.即,如果有消息导致未处理的异常,则该函数继续重试此消息,直到它从流中删除.我可以看到调用错误的数量增加,并且函数的Cloudwatch仪表板中没有显示DLQ错误.SQS队列保持为空.
我想要的是失败的消息转发到我的DLQ并且订阅继续到下一条消息.有任何想法吗?
正如Jonathan Seed在下面所说,DLQ目前不适用于基于流的订阅.AWS Support确认他们正在努力实现这一点.
Jon*_*eed 13
我相信这是因为DynamoDB流是基于流的事件源.lambda 文档指出,在处理基于流的事件源时"如果Lambda函数失败,AWS Lambda会尝试处理错误的一批记录,直到数据到期为止"
根据我的理解,lambda函数将重试,直到事件处理成功或者到期并从流中消失,事件永远不会被lambda函数"丢弃",因为它们在非基于流的事件源中.
如果您希望丢弃某些事件,手动将事件发布到队列/主题并成功返回,则可能必须将自己的故障处理实现为主lambda函数的一部分.
使用此功能,您可以配置失败时的目标。此目标可以是 SNS 主题、SQS 队列、另一个 lambda 函数或 EventBridge 事件总线。
要通过控制台 UI 添加此内容,
Add Destination按钮要通过 cloudformation 添加它,请遵循此文档。
我将为您需要附加到 lambda 函数的触发器提供一个基本示例:
LambdaTrigger:
Type: AWS::Lambda::EventSourceMapping
Properties:
FunctionName: !GetAtt Lambda.Arn
EventSourceArn: !GetAtt TableName.StreamArn
DestinationConfig:
OnFailure:
Destination: !GetAtt DLQ.Arn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2184 次 |
| 最近记录: |