SQLAlchemy обновляемые учетные данные для аутентификации IAM с Boto3 - PullRequest
1 голос
/ 08 апреля 2020

Я подключаюсь к Amazon RDS с помощью Sqlalchemy, используя сгенерированный Boto3 аутентификационный токен:

self.client = boto3.client("rds", region_name="eu-central-1")
self.token = self.client.generate_db_auth_token(
   self.endpoint, self.port, self.user
)

connection_string = (
   f"postgresql://{urlquote(self.user)}:"
   f"{urlquote(self.token)}@{self.endpoint}:{self.port}/dummy"
)

self.engine = db.create_engine(connection_string)

Проблема в том, что предоставленный токен действителен только в течение 15 минут (я хочу использовать временные учетные данные!) и теперь я не знаю, как заставить SQLAlchemy автоматически создавать новый токен аутентификации по истечении срока действия старого.

Я нашел аргумент создателя, но эта функция, кажется, не вызывается, когда токен становится недействительным:

def get_new_connection(self):
    self.token = self.client.generate_db_auth_token(
        self.endpoint, self.port, self.user
    )
    conn = psycopg2.connect(
        f"dbname='dummy' user='{self.user}' host='{self.endpoint}' password='{self.token}'"
    )
    return conn


 self.engine = db.create_engine(
 connection_string, creator=self.get_new_connection
 )

Есть ли встроенная функция для этого или более элегантный способ решить эту проблему?

...