gpt4 book ai didi

node.js - AWS Lambda : Sequelize acess denied error after accessing successfully the first time

转载 作者:行者123 更新时间:2023-12-03 22:27:38 25 4
gpt4 key购买 nike

我有一个 AWS Lambda 使用 Sequelize ORMAWS Aurora 对话。第一次访问时它工作正常,但在未知的几分钟后,Lambda 出错并显示 Sequelize 错误,提示 access denied for user@ip.address

async function connect() {
const signer = new AWS.RDS.Signer({
'region': region,
'username': dbUsername,
'hostname': dbEndpoint,
'port': dbPort
});

let token;
await signer.getAuthToken((error, result) => {
if (error) {
throw error;
}

token = result;
});

return token;
};

const sequelizeOptions = {
'host': dbEndpoint,
'port': dbPort,
'ssl': true,
'dialect': 'mysql',
'dialectOptions': {
'ssl': 'Amazon RDS',
'authSwitchHandler': (data, callback) => {
if (data.pluginName === 'mysql_clear_password') {
const password = token + '\0';
const buffer = Buffer.from(password);
callback(null, buffer);
}
}
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
};

let token;

exports.create = async () => {
token = await connect();
return new Sequelize(dbName, dbUsername, token, sequelizeOptions);
}

exports.buildResponse = resultsArray => {
return {
"statusCode": 200,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
},
"body": JSON.stringify(resultsArray),

"isBase64Encoded": false
};
};

引用: article

最佳答案

作为比我之前的评论更明确的答案发布。

简答

当您重用在 lambda 处理程序外部创建的 token 和数据库连接时,其中之一或两者都超时了。

更长的答案

Lambdas 在容器中运行,这些容器将被重用,直到由于不事件或代码更改而被终止,但是一旦容器运行,只有处理程序函数内部的代码在后续调用中运行。

这意味着在处理程序函数之外运行的代码仅在新容器启动时运行(因为没有正在运行的容器或接收到并发调用)。

如果处理程序之外的代码创建了一些有时间限制的东西,比如创建一个 db 连接或接收一个有时间限制的 token ,并且 lambda 被频繁调用而不会杀死容器,那么时间就会耗尽。

关于node.js - AWS Lambda : Sequelize acess denied error after accessing successfully the first time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51425143/

25 4 0