Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
605 views
in Technique[技术] by (71.8m points)

aws-lambda - 带有rds mysql DDL命令的AWS Lambda无法正常工作(aws lambda with rds mysql DDL command not working)

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

(我创建了lambda函数,当使用DML命令时,该函数已成功连接到数据库)

"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 .

(“选择”或“插入”,但是当我尝试“创建数据库”或“创建表”时,其返回成功,但未将表或数据库创建到RDS中。)

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

(in-short插入查询插入记录并选择返回相同的记录,因此连接没有问题,但是创建命令不起作用。)

Followings are my lambda policy

(以下是我的lambda政策)

在此处输入图片说明

 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..."
};
  ask by vaquar khan translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The lambda should wait for queries to complete.

(Lambda应该等待查询完成。)

Let's first fix that.

(首先解决这个问题。)

After that, check if the lambda reports back any errors when trying to create the database.

(之后,检查lambda在尝试创建数据库时是否报告任何错误。)

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
    }
  }
};

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.9k users

...