node-mysql2, AWS.RDS.signer и пул соединений - PullRequest
0 голосов
/ 23 сентября 2019

Я использую библиотеку 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 в сочетании с пулами соединений?

...