我正在使用AWS CDK部署以下Lambda代码。它不会调用lambda和安全组配置中的任何更改。但这在一个月前还是有用的。现在是连接到DB后的计时。
它连接到数据库,但随后不执行create database
查询。然后打印超时异常。
const client = require("mysql2");
exports.handler = async (event) => {
const fn = new Promise((resolve, reject) => {
const con = client.createConnection({
host: process.env.host,
user: process.env.user,
password: process.env.password,
port: 3306,
});
con.connect(function (err) {
if (err) {
console.error(
`Could not connect to db; host -> ${process.env.host} , user -> ${process.env.user}.`
);
return err;
} else {
console.log("Connected!");
con.query(
`CREATE DATABASE IF NOT EXISTS ${process.env.dbName} CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
function (err, result) {
if (err) {
console.error(`DB not created: ${process.env.dbName}.`);
console.log(result);
return err;
}
console.log(`Database created: ${process.env.dbName}.`);
}
);
}
});
});
return fn
.then((e) => {
console.log("successful");
console.log(e);
})
.catch((e) => {
console.error(e);
throw e;
});
};
以日志形式输出
INIT_START Runtime Version: nodejs:16.v14 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:699b51cc1e44cad9b43e446b3b6f7e0834a78366955dc81cc7b459b0aa3f9175
START RequestId: 983e51b1-0d2f-4d6f-874b-cedf02e5c273 Version: 1
2023-06-16T07:50:04.340Z 983e51b1-0d2f-4d6f-874b-cedf02e5c273 INFO Connected!
2023-06-16T07:50:04.379Z 983e51b1-0d2f-4d6f-874b-cedf02e5c273 ERROR DB not created: 9e58a85f07a54784bc7f6542d29d9343.
2023-06-16T07:50:04.380Z 983e51b1-0d2f-4d6f-874b-cedf02e5c273 INFO undefined
2023-06-16T07:51:04.065Z 983e51b1-0d2f-4d6f-874b-cedf02e5c273 Task timed out after 60.06 seconds
END RequestId: 983e51b1-0d2f-4d6f-874b-cedf02e5c273
REPORT RequestId: 983e51b1-0d2f-4d6f-874b-cedf02e5c273 Duration: 60062.80 ms Billed Duration: 60000 ms Memory Size: 128 MB Max Memory Used: 75 MB Init Duration: 268.90 ms
可能是什么原因造成的?
1条答案
按热度按时间p5fdfcr11#
这是我的错但这实际上可能发生在任何人身上,因此我对自己的问题给出了答案。在我把这个问题贴在这里之后,一个队友指出了这一点。
MySQL允许字母数字DB名称,只要它不应该以数字开头。我们以编程方式生成dbname,这里生成的随机名称开头有一个数字。这就造成了麻烦。
现在我们在每个生成的名称前面加上一个字母前缀字符串。