【问题标题】:AWS Lambda missing events from S3 to SQSAWS Lambda 缺少从 S3 到 SQS 的事件
【发布时间】: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


【解决方案1】:

这就是 AWS 所说的。 'Amazon S3 事件通知设计为至少发送一次。通常,事件通知会在几秒钟内发送,但有时可能需要一分钟或更长时间。 https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html

您可能还想查看 cloudwatch 以确保 SQS 中已收到所有事件。

SQS Cloudwatch Monitoring

您可能要检查的下一步是在 Lambda 中进行节流。这也可能导致丢失事件。您可以尝试使用所需的值调整 lambda 并发。

【讨论】:

  • 如果超过 15k(12 小时以上)需要更长的时间,仍然可以接受。但是,如果缺少事件,它是无用的。我正在寻找消息可见性超时和批量大小的万无一失的设置,因为每条消息可能需要长达 45 秒的 lambda 处理。
猜你喜欢
  • 2019-09-05
  • 1970-01-01
  • 2020-05-28
  • 2020-01-18
  • 1970-01-01
  • 2021-02-12
  • 2020-10-23
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多