无服务器lamba-功能未完全执行

时间:2019-12-20 12:55:55

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

我在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(尝试/不等待)的推送通知函数调用,则它正在工作,但批量创建被延迟。

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

1 个答案:

答案 0 :(得分:0)

我要作一个很多个假设,所以如果我完全不了解,请告诉我,我将删除此答案。我假设您的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不允许通信而被阻止。