Я использую библиотеку 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, действителен только в течение короткого времени и не может использоваться для непрерывного восстановления соединений в пуле.
Я не вижу способа настроить ttl токена rds с помощью aws sdk.Таким образом, единственный другой вариант, который я могу придумать, - это полностью завершить и воссоздать пул через определенный фиксированный интервал.
Мне интересно, есть ли кто-нибудь, кто мог бы бороться с этим, и кто может иметькакое-нибудь понимание лучшего способа решения этой проблемы?Есть ли лучший способ использовать подписывающего rds в сочетании с пулами соединений?