0

我有以下 AWS lambda 处理程序:

exports.handler = async (event, data) => {
  var AWS = require('aws-sdk/global');
  const awsParamStore = require('aws-param-store');
  const {
    Pool
  } = require('pg');
  var host;


  await awsParamStore.getParameter('testing-main-rds-url', { //get database host from AWS
      region: 'us-east-1'
    })
    .then((parameter) => {
      host = parameter.Value
    });

  var signer = await new AWS.RDS.Signer({
    region: 'us-east-1',
    username: 'developer',
    hostname: host,
    port: 5432
  });

  var token = await signer.getAuthToken({}); //get token from AWS


  const db = await new Pool({
    user: "developer",
    host: host,
    database: "main",
    password: token,
    port: 5432,
    ssl: true,
  });


  const query = `INSERT INTO crm.user_crm
   (u_id,username)
   VALUES ($1,$2)`;
  const values = [event.u_id, event.username];


db.connect((err, client, release) => {
  if (err) {
    throw("Error acquiring client.", err.stack);
  } else {
    client.query(query, values, (err, result) => {
      release();
      if (err) {
        throw("Error executing query.", err.stack);
        return ;
      } else {
        console.log("INSERT DONE");
        db.end()
        return {
            statusCode: 200
        };
      }
    })
  }
})
};

此代码将接收数据并将其添加到数据库中。当我在我的计算机上运行它时,console.log(require('./index').handler(data));它可以完美运行并插入记录。当我从 lambda 运行它时,它什么也不返回,也不插入记录。任何帮助,将不胜感激。

4

1 回答 1

0

async/awaitcallback风格混合。您的 lambda 函数将在查询完成之前完成。

作为pg 文档中的示例,它支持async/await:而不是db.connect((err, client, release) => {...

const res = await pool.query(query, values);
console.log("INSERT DONE");
await pool.end()
return {
  statusCode: 200
};
于 2020-12-18T01:57:41.197 回答