作为 SQS 事件处理程序的 Lambda 函数未运行部分代码并成功完成

Posted

技术标签:

【中文标题】作为 SQS 事件处理程序的 Lambda 函数未运行部分代码并成功完成【英文标题】:Lambda function as SQS Event handler doesn't run a part of code and finishing successfully 【发布时间】:2022-01-09 09:18:24 【问题描述】:

我正在使用 SQS 和 NodeJS lambda(作为 SQS 事件处理程序)在 Google 日历中创建/更新事件。 代码类似这样

const  google  = require('googleapis')

google.options(
  http2: true,
)
...
export const handler = async (event) => 
const schemaEvent = getDataFromEvent(event)
console.log('schemaEvent', schemaEvent)
const  data  = await calendar.events.insert(
      calendarId: CALENDAR_ID,
      requestBody: schemaEvent,
      sendUpdates: 'all',
    )
console.log('data', data)


...

当 SQS 收到许多事件(例如:30)时,对于某些事件,我看不到最后一个 console.log('Data', data) 并且之后的代码不会执行。但是,如果并发设置为 1,它会按预期工作。 问题的原因可能是什么?

注意:

BatchSize = 1 处理程序 SQS 类型为FIFO 重复数据删除已禁用

日志(RequestId: e1c8a24b-8052-544e-8e44-f868b56273d5 直到最后才处理):

 
2021-12-02T22:56:15.211+02:00   START RequestId: 75dff3c9-26d5-5087-9110-a9ea13fba018 Version: $LATEST
2021-12-02T22:56:15.317+02:00   2021-12-02T20:56:15.299Z 75dff3c9-26d5-5087-9110-a9ea13fba018 INFO schemaEvent ... some data
2021-12-02T22:56:16.176+02:00   2021-12-02T20:56:16.176Z 75dff3c9-26d5-5087-9110-a9ea13fba018 INFO data  ...some data 
2021-12-02T22:56:16.238+02:00   END RequestId: 75dff3c9-26d5-5087-9110-a9ea13fba018
2021-12-02T22:56:16.238+02:00   REPORT RequestId: 75dff3c9-26d5-5087-9110-a9ea13fba018 Duration: 1712.34 ms Billed Duration: 1713 ms Memory Size: 256 MB Max Memory Used: 164 MB

2021-12-02T22:56:16.512+02:00   START RequestId: e1c8a24b-8052-544e-8e44-f868b56273d5 Version: $LATEST
2021-12-02T22:56:16.717+02:00   2021-12-02T20:56:16.700Z e1c8a24b-8052-544e-8e44-f868b56273d5 INFO schemaEvent ...some data
2021-12-02T22:56:18.225+02:00   END RequestId: e1c8a24b-8052-544e-8e44-f868b56273d5
2021-12-02T22:56:18.225+02:00   REPORT RequestId: e1c8a24b-8052-544e-8e44-f868b56273d5 Duration: 1710.32 ms Billed Duration: 1711 ms Memory Size: 256 MB Max Memory Used: 164 MB
...

【问题讨论】:

这能回答你的问题吗? My async/await function is not waiting in AWS Lambda. What am I missing? 它没有。 events.insertis 返回一个 Promise 并且代码包含 await 【参考方案1】:

在我的情况下,问题出在googleapi,通过删除配置选项解决:

google.options(
  http2: true,
)

【讨论】:

以上是关于作为 SQS 事件处理程序的 Lambda 函数未运行部分代码并成功完成的主要内容,如果未能解决你的问题,请参考以下文章

SQS DeleteMessage阻止并且不返回响应

在 SQS 消息触发的 Lambda 上跟踪 AWS API Gateway request_id

如何确保与 SQS 集成的 Lambda 调用的下游 API 在消息进入 DLQ 之前至少被调用 2 次?

使用 AWS 无服务器和 NodeJS 在接收器 lambda 处未接收到来自 SQS 的所有消息

当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数

带有graphql和sqs的lambda在nodejs中向sqs发送2条消息?