问题
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