带有rds mysql DDL命令的aws lambda无法正常工作 [英] aws lambda with rds mysql DDL command not working
问题描述
我创建了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屋!