我将node-mysql2 库与AWS.RDS.signer结合使用。
我有以下函数,它为重用连接创建了一个连接池:
const createPool = () => new Promise((resolve, reject) => {
signer.getAuthToken({
region: '...',
hostname: '...',
port: '...',
username: '...'
}, (err, token) => {
if (err) reject(err)
const pool = mysql.createPool({
host: '...',
port: '...',
user: '...',
database: '...',
password: token,
ssl: 'Amazon RDS'
authSwitchHandler: (data, cb) => {
if (data.pluginName === 'mysql_clear_password') cb(null, Buffer.from(token + '\0'))
}
})
resolve(pool)
})
})
它工作得很好......一段时间。然后我突然开始收到这个错误:
错误:用户 '...'@'...' 的访问被拒绝(使用密码:是)
所以,我认为正在发生的事情是,aws 签名者返回的令牌仅在短时间内有效,不能用于在池中不断地重新建立连接。
我可以看到,无法使用 aws sdk 配置 rds 令牌的 ttl。因此,我能想到的唯一其他选择是以某个固定间隔完全结束并重新创建池。
我想知道是否有人可能已经为此苦苦挣扎,并且谁可能对解决此问题的最佳方法有所了解?有没有更好的方法将 rds 签名器与连接池结合使用?