AWS Lambda 不断收到空的 SQS 事件消息

AWS Lamba constantly receiving empty SQS event messages

我是 AWS 的亲戚 n00b,如果这是一个愚蠢的问题,请见谅。

我有一个用 Java 编写的 AWS Lambda。我还有一个接收 AWS S3 事件消息的 SQS 队列。然后我针对 SQS 队列创建了一个 Lambda 触发器,以便我的 Lambda 接收 S3 事件作为 SQS 消息并适当地处理它们。

一切正常。我遇到的唯一问题是 Lambda 似乎每 2 分钟接收一次 SQS 事件消息通知,即使 SQS 队列中没有消息也是如此。

Java 代码如下所示:

public class SQSEventHandler implements RequestHandler<SQSEvent, Void> {
    @Override
    public Void handleRequest(SQSEvent sqsEvent, Context context) {
        if (sqsEvent != null) {
            LOGGER.debug("Received SQS event: {}", sqsEvent.toString());
            ... do stuff...

如果我查看 CloudWatch 日志(我使用 SLF4J 记录),我可以看到 Lambda 每 2 分钟被不同的 SQS 消息触发,即使在没有要处理的 S3 事件消息期间也是如此:

02:54:16 START RequestId: d5454080-8ea3-4c44-93e9-caa5bd903599 Version: $LATEST
02:54:16 [2020-02-13 02:54:16.220] - [d5454080-8ea3-4c44-93e9-caa5bd903599] DEBUG <package>.SQSEventHandler - Received SQS event: {}
02:54:16 END RequestId: d5454080-8ea3-4c44-93e9-caa5bd903599
02:54:16 REPORT RequestId: d5454080-8ea3-4c44-93e9-caa5bd903599 Duration: 1.05 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 161 MB
02:56:16 START RequestId: 9d5acbba-b96c-47e9-81c2-2d448e4ca6e9 Version: $LATEST
02:56:16 [2020-02-13 02:56:16.386] - [9d5acbba-b96c-47e9-81c2-2d448e4ca6e9] DEBUG <package>.SQSEventHandler - Received SQS event: {}
02:56:16 END RequestId: 9d5acbba-b96c-47e9-81c2-2d448e4ca6e9
02:56:16 REPORT RequestId: 9d5acbba-b96c-47e9-81c2-2d448e4ca6e9 Duration: 1.23 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 161 MB
02:58:16 START RequestId: 54bc4fa4-bcaf-4834-9185-09c9c7e2d757 Version: $LATEST
02:58:16 [2020-02-13 02:58:16.451] - [54bc4fa4-bcaf-4834-9185-09c9c7e2d757] DEBUG <package>.SQSEventHandler - Received SQS event: {}
02:58:16 END RequestId: 54bc4fa4-bcaf-4834-9185-09c9c7e2d757
02:58:16 REPORT RequestId: 54bc4fa4-bcaf-4834-9185-09c9c7e2d757 Duration: 1.01 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 161 MB

没有其他 SQS 队列触发此 Lambda。

如您所见,SQS 事件对象不为空,但在 toString() 调用中未生成任何内容。

我无法弄清楚是什么问题 - 如果您能提供任何帮助,我们将不胜感激。

您的 Lambda 函数对 SQS 消息做了什么?

如果它处理完它们,那么您必须将它们从 SQS 队列中删除,否则它们将在 Visibility Timeout 过期后重新出现。这是 SQS 如何处理应用程序接收消息然后在它们完成对这些消息的处理之前死亡的设计。

我不知道,有一个 CloudWatch 规则设置为每两分钟向我的 Lambda 发送一条消息。找到它后,我禁用了规则,Lambda 不再被触发。