无服务器 lambda - 函数未完全执行



我在nodejs中使用无服务器。我有 lambda 函数,其中有大约 6 个 API。 除一个 API 外,所有 API 都在工作。但是这个非工作 API 在本地无服务器离线中运行良好。在服务器中部署后,它的行为延迟。 这是我在 api 函数中所做的框架

let rec_list = await db.sequelize.query(query).spread(rec_list => { return rec_list; }).catch((e)=>{
console.log("error");
throw e;
})
let rec_list2= rec_list .map((rec_list_sub) => {
//some assignment here
//let new_var = {}; // just assignment - no db operation
return new_var;
});

let resultArr = await Promise.all(rec_list2).then((result) => {
return result;
}).catch((e) => {
throw e;
});
let tem_list = await db.mymodel.bulkCreate(resultArr).then(function (li) {
selectedIds = li.map(({ id }) => {
return {
reqId: id,
description: 'sent',
status: 0
}
});
return li;
}).catch(function (err) {
throw err;
});
//send fcm push
//triggering push notification to user
fcm_send_msg("success", "body-message-here",["fdsfdsfdsf-device-id"]); //*--> Push notification is not triggered. When i hit any of api from this same lambda function, then previously called apis' push notification triggered.*

如果我在批量创建调用之前放置了 aysnc(尝试/不使用等待(的推送通知函数调用,那么它正在工作但批量创建延迟。

lambda 函数的执行时间为 6 秒,但仅用了 108 毫秒。内存分配了 1024mb,但仅使用了 120mb。

我将做出很多假设,所以如果我完全偏离基础,请告诉我,我将删除此答案。 我假设您的 lambda 在 VPC 中运行,因为它正在访问数据库。 从您的问题中,我理解您是在说,当调用"bulkCreate"发生在调用"fcm_send_msg"之前时,那么您遇到了问题,但是当调用"fcm_send_msg"发生在调用"bulkCreate"之前时,您会收到通知,但批量创建仍然延迟。

我怀疑您可能有权限问题。 Lambda 对呼叫使用临时端口范围,因此您需要确保您的安全组和 NACL 允许 Lambda 可能从中发起呼叫的完整临时端口范围。 请参阅 https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#nacl-ephemeral-ports:

AWS Lambda 函数使用端口 1024-65535。

您可以检查 CloudWatch 日志中的 lambda(来自监控(以查看它正在执行的操作,如果您在日志中看到似乎出现故障的内容并且正在重试,则很可能表明由于安全组或 NACL 不允许通信,调用被阻止。

相关内容

  • 没有找到相关文章

最新更新