При использовании аутентификации базы данных IAM срок действия пароля истекает примерно через 15 минут. Поэтому в идеале мне нужно обновить соединение с базой данных до истечения срока действия пароля. Я установил таймер при первой инициализации базы данных и запрашивал прошедшее время для каждого запроса. Как я могу обновить пароль подключения до истечения срока действия пароля? Или как я могу уничтожить старый объект базы данных и при необходимости обновить объект?
Сообщение об ошибке: «Ошибка аутентификации PAM для пользователя iam_user».
код для получения пароля IAM:
const pgp = require('pg-promise')();
const AWS = require('aws-sdk');
const ca =
'-----BEGIN CERTIFICATE-----\nMIID9DCCAtyg...
...wZfTUU=\n-----END CERTIFICATE-----\n';
const signer = new AWS.RDS.Signer({
region: process.env.REGION,
username: process.env.DATABASE_USER,
hostname: process.env.DATABASE_HOST,
port: parseInt(`${process.env.DATABASE_PORT}`, 10),
});
module.exports = pgp({
host: process.env.DATABASE_HOST,
port: process.env.DATABASE_PORT,
database: process.env.DATABASE_NAME,
user: process.env.DATABASE_USER,
ssl: { ca },
dialectOptions: { ssl: { require: true } },
password: signer.getAuthToken(),
});
инъекция объекта db в graphql:
const db = require('../db/init');
server.use(
mount(
'/graphql',
graphqlHTTP( () => ({
schema: schema,
context: { startTime: Date.now(), db },
graphiql: true
})),
),
);
Использование базы данных в резольверах.
Я мог бы запросить время создания соединения с базой данных. Есть ли возможность обновить пароль при необходимости? Или каков наилучший способ уничтожить старый объект базы данных и создать новый объект базы данных?
const resolvers = {
Query: {
Post: (root, args, {db}) => {
console.log(args.id);
console.log(db.$config.options)
const postQuery = new PQ({
text:
'SELECT post_id as id FROM tbl_post where post_id = $1',
values: [parseInt(args.id, 10)],
});
return db.one(postQuery).catch((err) => console.log(err));
}
}