aws lambda with rds mysql DDL command not working

心已入冬 提交于 2020-01-13 06:52:35

问题


I have created lambda function which is successfully connected to database when using DML command like

"Select" or "insert" but when i am try to "created database" or "create table" its return success but table or database not created into RDS .

in-short insert query insert records and select return same records so no issue in connection but create commands not working.

Followings are my lambda policy

 const mysql = require('mysql');

const con = mysql.createConnection({
  host     : process.env.RDS_HOSTNAME,
  user     : process.env.RDS_USERNAME,
  password : process.env.RDS_PASSWORD,
  port     : process.env.RDS_PORT,
    connectionLimit : 10,// max number of connections before your pool starts waiting for a release
    multipleStatements : true,// Prevent nested sql statements
    connectionLimit : 1000,
    connectTimeout  : 60 * 60 * 1000,
    acquireTimeout  : 60 * 60 * 1000,
    timeout         : 60 * 60 * 1000,
    debug    : true 
   // ,database:'testdb1'
});


exports.handler = async (event) => {

  con.query('CREATE DATABASE testdb1', function (err, result) {
    if (err){
          console.log("Error->"+err);
       throw err;
    }
  });

  return "Completed..."
};

回答1:


The lambda should wait for queries to complete. Let's first fix that. After that, check if the lambda reports back any errors when trying to create the database.

const mysql = require('mysql');

const con = mysql.createConnection({
  host: process.env.RDS_HOSTNAME,
  user: process.env.RDS_USERNAME,
  password: process.env.RDS_PASSWORD,
  port: process.env.RDS_PORT,
  connectionLimit: 10,
  multipleStatements: true,// Prevent nested sql statements
  connectionLimit: 1000,
  connectTimeout: 60 * 60 * 1000,
  acquireTimeout: 60 * 60 * 1000,
  timeout: 60 * 60 * 1000,
  debug: true
  // ,database:'testdb1'
});

exports.handler = async (event) => {
  try {
    const data = await new Promise((resolve, reject) => {
      con.connect(function (err) {
        if (err) {
          reject(err);
        }
        con.query('CREATE DATABASE testdb1', function (err, result) {
          if (err) {
            console.log("Error->" + err);
            reject(err);
          }
          resolve(result);
        });
      })
    });

    return {
      statusCode: 200,
      body: JSON.stringify(data)
    }

  } catch (err) {
    return {
      statusCode: 400,
      body: err.message
    }
  }
};


来源:https://stackoverflow.com/questions/59122710/aws-lambda-with-rds-mysql-ddl-command-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!