Сначала необходимо создать политику IAM и пользователя БД, как описано здесь:
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
Затем необходимо создать роль IAM для вашей функции Lambda и подключить IAMполитика, созданная выше к нему.Ваша функция Lambda должна быть выполнена с этой ролью, чтобы иметь возможность создать временный пароль БД для пользователя БД.
Наконец, вы можете сгенерировать временный пароль для вашего пользователя БД (создан выше) в вашей Lambda.используя следующий фрагмент кода:
from urllib.parse import quote_plus
import boto3
def get_password(rds_hostname, db_user, aws_region=None, url_encoded=True):
if (not aws_region):
aws_region = boto3.session.Session().region_name
if (not aws_region):
raise Exception("Error: no aws_region given and the default region is not set!")
rds_port = 5432
if (":" in rds_hostname):
split_hostname = rds_hostname.split(":")
rds_hostname = split_hostname[0]
rds_port = int(split_hostname[1])
rds_client = boto3.client("rds")
password = rds_client.generate_db_auth_token( Region=aws_region,
DBHostname=rds_hostname,
Port=rds_port,
DBUsername=db_user)
if url_encoded:
return quote_plus( password )
else:
return password
Не назначайте пароль для переменной.Получайте новый пароль при каждом запуске, так как срок действия пароля ограничен, и ваш Lambda-контейнер не может быть переработан до истечения срока его действия ...
Наконец, создайте строку подключения к БД для любого пакета Python, который вы используете (япредложил бы некоторую чистую реализацию Python, такую как pg8000) из вашего имени хоста RDS, порта, имени пользователя и временного пароля, полученного с помощью функции выше (<user>:<password>@<hostname>:<port>/<db_name>
).
Подключение к RDS может быть немного сложным.Если вы не знаете, как правильно настроить VPC, я бы посоветовал вам запустить Lambda вне VPC и подключиться к RDS по общедоступному IP-адресу.
Кроме того, вам, вероятно, потребуется установить SSL-соединение и, возможно,включите файл CA RDS в ваш пакет развертывания Lambda.Точный способ, как это сделать, зависит от того, что вы используете для подключения (я мог бы описать, как это сделать с помощью pymysql и sqlalchemy).
Каждый из этих шагов можно описать в отдельном учебном пособии, нознания о них должно быть достаточно, чтобы вы начали.
Удачи!