【问题标题】:Serverless lamba - Function not executing completely无服务器 lambda - 函数未完全执行
【发布时间】:2019-12-20 12:55:55
【问题描述】:

我在 nodejs 中使用无服务器。我有 lambda 函数,其中有大约 6 个 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.*

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

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

【问题讨论】:

  • 这与您的问题无关,但看到将 Promise.then 使用与 async await 混合使用很奇怪

标签: node.js aws-lambda sequelize.js bulkinsert serverless


【解决方案1】:

我将做出很多假设,所以如果我完全偏离基础,请告诉我,我会删除这个答案。我假设您的 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。

您可以检查 lambda 的 CloudWatch 日志(来自监控)以查看它在做什么,如果您在日志中看到似乎失败并且正在重试的内容,则很可能表明调用正在由于安全组或 NACL 不允许通信而被阻止。

【讨论】:

  • 感谢您的回答。在 cloudwatch 日志中,没有抛出错误。无论我添加什么,只有与请求、响应和控制台日志相关的数据。
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2017-02-17
  • 2020-04-03
  • 2018-12-11
相关资源
最近更新 更多