作为 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.insert
is 返回一个 Promise 并且代码包含 await
【参考方案1】:
在我的情况下,问题出在googleapi
,通过删除配置选项解决:
google.options(
http2: true,
)
【讨论】:
以上是关于作为 SQS 事件处理程序的 Lambda 函数未运行部分代码并成功完成的主要内容,如果未能解决你的问题,请参考以下文章
在 SQS 消息触发的 Lambda 上跟踪 AWS API Gateway request_id
如何确保与 SQS 集成的 Lambda 调用的下游 API 在消息进入 DLQ 之前至少被调用 2 次?
使用 AWS 无服务器和 NodeJS 在接收器 lambda 处未接收到来自 SQS 的所有消息