带有rds mysql DDL命令的aws lambda无法正常工作 [英] aws lambda with rds mysql DDL command not working

查看:92
本文介绍了带有rds mysql DDL命令的aws lambda无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了lambda函数,当使用

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

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

"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插入查询插入记录并选择返回相同的记录,因此连接没有问题,但是创建命令不起作用.

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

以下是我的lambda政策

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

推荐答案

lambda应该等待查询完成.首先解决这个问题.之后,检查lambda在尝试创建数据库时是否报告任何错误.

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

这篇关于带有rds mysql DDL命令的aws lambda无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆