【发布时间】:2021-11-06 06:22:33
【问题描述】:
我有 S3 创建对象 -> SQS -> Lambda。在大多数情况下它可以工作(少于 100 个新对象)。当在 S3 中创建 1K+ 对象时,大约 10% 的事件不会进入 SQS。作为函数 (Java) 的第一步,我们让 lambda 记录所有事件,但这些事件永远不会出现!
AWS Lambda 配置为 Batch Size 10 和 Batch Window 10。
trigger 和 sqs 中的可见性超时均为 30 分钟。 lambda 中的每个事件处理需要 35 秒。我是否需要配置任何其他 sqs/trigger/lambda 设置以不丢失事件?处理需要几个小时也没关系。
public String handleRequest(SQSEvent sqsEvent, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("\rProcessing Event: " + sqsEvent.toString());
sqsEvent.getRecords().stream().forEach(
sqsRecord -> {
S3EventNotification s3EventNotification = S3EventNotification.parseJson(sqsRecord.getBody());
logger.log("\rReceived S3EventRecords: " + s3EventNotification.getRecords().size());
s3EventNotification.getRecords().forEach(
s3Record -> {
logger.log("\rProcessing s3: " + s3Record.getS3());
【问题讨论】:
-
您是否绝对确定 Lambda 函数正在记录它接收的所有 SQS 消息,因为您已将其配置为每次调用最多接收 10 条消息?
-
是的,在原始问题中添加了代码。另外,我添加了有关可见性超时的其他信息
-
什么“原始问题”?我在您的问题中没有看到任何代码。
-
刚刚更新了更多信息。
-
澄清一下,您的意思是 SQS 缺少 10% 的已创建 S3 对象,而 Lambda 通过记录 SQS 队列上 100% 可用的任何内容按预期工作?
标签: amazon-s3 aws-lambda amazon-sqs