【问题标题】:My lambda function is not receiving events from the SQS service我的 lambda 函数没有从 SQS 服务接收事件
【发布时间】:2021-09-27 19:51:51
【问题描述】:

我已经设置了一个 lambda 函数和一个 SQS 服务。我希望来自 SQS 服务的事件被 lambda 函数使用。

SQS 配置

所有其他配置都设置为与默认值匹配。

Lambda 触发器

Lambda 配置

使用的代码来自sqs-poller 模板(以及配置)

代码配置

我正在使用following code 发送事件。我使用以下命令运行代码

AWS_SDK_LOAD_CONFIG=true AWS_SHARED_CREDENTIALS_FILE=./credentials node sqs.js

这很好,因为我在 SQS 服务的监控面板中看到了消息。

知道为什么我的 lambda 函数没有使用事件吗?

【问题讨论】:

  • 您是否检查了队列中是否确实有要接收的项目?
  • 你确定 lambda 没有被触发吗?也许可以,但它没有正确读取事件对象?
  • raupach 我可以在监控面板中看到正在接收的事件。 Nir Alfasi,如果是这样的话,我会在我的 lambda 的 Cloud Watch 窗格中看到日志。
  • 你能验证 lambda 权限,包括执行角色和调用吗?
  • 我错过了一个角色,谢谢!

标签: amazon-web-services aws-lambda amazon-sqs aws-sqs-fifo


【解决方案1】:

您的架构中似乎有两个相互竞争的概念。

Amazon SQS 和 AWS Lambda

当 Amazon SQS 队列配置为 AWS Lambda 函数的触发器时,AWS 服务会轮询 SQS 队列以查找消息。找到消息后,将调用 Lambda 函数,并通过 event 变量将消息传递给函数。

然后,Lambda 函数可以处理这些消息,从 event 变量中读取消息的详细信息。

如果 Lambda 函数完成且没有错误,AWS 服务将自动从 SQS 队列中删除消息。如果函数中出现错误,消息将在隐身期结束后自动重新出现在 SQS 队列中。

AWS Lambda 函数在任何时候都不会真正调用 Amazon SQS 服务来接收或删除消息。相反,它在被调用时会得到消息。

SQS 轮询器

您提到您正在使用sqs-poller 类。我不确定你指的是Receiving Messages Using the QueuePoller Class in Amazon SQS - AWS SDK for Ruby 还是@jishimi/sqs-poller - npm

尽管如此,轮询是一种传统方式,工作进程从 SQS 队列中检索消息,然后在处理完消息后将其删除。流程是:

  • 他们要求检查 SQS 队列中是否有可用的消息
  • 如果是这样,他们会调用一个工人
  • 工作人员完成后,他们会删除消息

您应该注意到,当 SQS 被配置为 AWS Lambda 函数的触发器时,这些步骤与 AWS Lambda 服务所执行的步骤相同。因此,使用轮询架构与使用 SQS 作为 AWS Lambda 函数的触发器是不兼容的

你应该选择一个或另一个,而不是两个。

【讨论】:

    猜你喜欢
    • 2022-08-26
    • 1970-01-01
    • 2020-05-28
    • 2021-05-01
    • 2020-12-09
    • 2017-06-03
    • 2021-11-06
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多