Создание RDS MySQL-инстанса с помощью Boto3

Предварительные требования
- AWS аккаунт (создайте при необходимости).
- Базовое понимание Amazon RDS и сетевых групп безопасности (VPC Security Groups).
- Установленный Python и pip на вашей машине.
- Установленная библиотека Boto3 (pip install boto3).
Важно: используйте профиль IAM с минимально необходимыми правами — например, права на rds:CreateDBInstance, ec2:DescribeSecurityGroups.
Что мы сделаем
- Установим зависимости.
- Разберёмся с методом create_db_instance.
- Запустим пример на Python и проверим инстанс в консоли AWS.
Установка зависимостей
Python обычно предустановлен в серверах Ubuntu. Чтобы проверить версии:
which python /usr/bin/python –version
ИЛИ
python –version
Если требуется pip в Ubuntu 18.04, обновите локальный репозиторий и установите pip:
sudo apt update sudo apt install python-pip
Проверка версии pip:
pip –version
Установка Boto3:
pip install boto3

Проверка установки Boto3:
pip show boto3

Основной метод: create_db_instance
Для создания инстанса RDS используется метод client.create_db_instance(). Ниже — полная сигнатура параметров, которые метод принимает. Для простого запуска требуется лишь часть из них. Полный список и описание параметров можно найти в официальной документации Boto3.
Request Syntax
response = client.create_db_instance(
DBName='string',
DBInstanceIdentifier='string',
AllocatedStorage=123,
DBInstanceClass='string',
Engine='string',
MasterUsername='string',
MasterUserPassword='string',
DBSecurityGroups=[
'string',
],
VpcSecurityGroupIds=[
'string',
],
AvailabilityZone='string',
DBSubnetGroupName='string',
PreferredMaintenanceWindow='string',
DBParameterGroupName='string',
BackupRetentionPeriod=123,
PreferredBackupWindow='string',
Port=123,
MultiAZ=True|False,
EngineVersion='string',
AutoMinorVersionUpgrade=True|False,
LicenseModel='string',
Iops=123,
OptionGroupName='string',
CharacterSetName='string',
PubliclyAccessible=True|False,
Tags=[
{
'Key': 'string',
'Value': 'string'
},
],
DBClusterIdentifier='string',
StorageType='string',
TdeCredentialArn='string',
TdeCredentialPassword='string',
StorageEncrypted=True|False,
KmsKeyId='string',
Domain='string',
CopyTagsToSnapshot=True|False,
MonitoringInterval=123,
MonitoringRoleArn='string',
DomainIAMRoleName='string',
PromotionTier=123,
Timezone='string',
EnableIAMDatabaseAuthentication=True|False,
EnablePerformanceInsights=True|False,
PerformanceInsightsKMSKeyId='string',
PerformanceInsightsRetentionPeriod=123,
EnableCloudwatchLogsExports=[
'string',
],
ProcessorFeatures=[
{
'Name': 'string',
'Value': 'string'
},
],
DeletionProtection=True|False,
MaxAllocatedStorage=123
)Ключевые параметры (кратко):
- DBName: имя базы данных внутри инстанса (поведение зависит от движка).
- DBInstanceIdentifier: обязательный идентификатор инстанса (строка в нижнем регистре).
- DBInstanceClass: обязательный параметр, задаёт вычислительную мощность и память (например, db.t2.micro).
- Engine: обязательный — название движка (например, mysql).
- MasterUsername: имя главного пользователя базы.
- MasterUserPassword: пароль главного пользователя.
- VpcSecurityGroupIds: список ID security group в VPC, разрешающих доступ к порту.
- Port: порт, на котором слушает база (по умолчанию 3306 для MySQL).
Создание RDS MySQL-инстанса с помощью Python Boto3
Создайте файл create-rds-instance.py и вставьте следующий код. Замените ACCESS-KEY-OF-THE-AWS-ACCOUNT и SECRETE-KEY-OF-THE-AWS-ACCOUNT на свои учётные данные или используйте профиль AWS CLI/переменные окружения для безопасного хранения.
import boto3
conn = boto3.client('rds', aws_access_key_id='ACCESS-KEY-OF-THE-AWS-ACCOUNT',
aws_secret_access_key='SECRETE-KEY-OF-THE-AWS-ACCOUNT',
region_name='eu-west-3')
response = conn.create_db_instance(
AllocatedStorage=10,
DBName="test",
DBInstanceIdentifier="my-first-rds-instance",
DBInstanceClass="db.t2.micro",
Engine="mysql",
MasterUsername="root",
MasterUserPassword="pass1234",
Port=3306,
VpcSecurityGroupIds=["sg-7fa4d512"],
)
print (response)
Запуск скрипта в терминале:
python create-rds-instance.py
Вы увидите JSON-ответ от AWS в терминале. Для проверки состояния инстанса можно перейти в RDS Dashboard в консоли AWS.

Практические советы по безопасности и надёжности
Важно: никогда не храните постоянные AWS Access Key/Secret в открытом коде. Используйте одно из безопасных решений:
- Профили AWS CLI (~/.aws/credentials) и параметр profile_name при создании сессии Boto3.
- Переменные окружения AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.
- Роли IAM для EC2 (если скрипт запускается с EC2) или AWS Secrets Manager для секретов баз данных.
Рекомендации безопасности:
- Включите StorageEncrypted=True и задайте KmsKeyId для шифрования диска.
- Включите BackupRetentionPeriod для автоматических бэкапов.
- Включите MultiAZ=True для критичных нагрузок по доступности.
- Отключите PubliclyAccessible или ограничьте доступ через Bastion/Proxy.
- Настройте мониторинг (EnableCloudwatchLogsExports, EnablePerformanceInsights).
Альтернативные подходы
- AWS CLI: aws rds create-db-instance — удобно в скриптах CI/CD.
- CloudFormation: описываете aws::rds::DBInstance в шаблоне и версионируете инфраструктуру.
- Terraform: ресурс aws_db_instance позволяет управлять жизненным циклом DB в коде.
- RDS Proxy: используйте для пуллинга подключений при большого количества краткоживущих подключений.
Короткий пример команды AWS CLI:
aws rds create-db-instance –db-instance-identifier my-first-rds-instance –allocated-storage 10 –db-instance-class db.t2.micro –engine mysql –master-username root –master-user-password pass1234 –vpc-security-group-ids sg-7fa4d512 –region eu-west-3
Когда это может не сработать (распространённые ошибки и решения)
- Ошибка «InsufficientDBInstanceCapacity» — в выбранном регионе нет доступных ресурсов выбранного класса инстансов. Решение: смените DBInstanceClass или регион.
- Ошибка прав IAM — убедитесь, что у пользователя есть права rds:CreateDBInstance.
- Неверный VpcSecurityGroupIds — укажите существующий security group в том же VPC/Subnet.
- Неверный формат пароля — MySQL и RDS имеют ограничения по длине и символам. Проверьте документацию.
- Порт заблокирован в Security Group — добавьте правило на входящий трафик для нужного порта.
План действий: мини-методология (шаги)
- Подготовить IAM-политику с минимумом прав.
- Подготовить VPC и security group с открытым портом для нужных хостов.
- Проверить локальную среду: Python, pip, boto3.
- Записать конфигурацию инстанса (имя, класс, хранилище, шифрование).
- Запустить create_db_instance и ждать статуса available.
- Протестировать подключение и настроить бэкапы/мониторинг.
Роли и чек-листы
DevOps:
- Подготовить IAM роль или ключи.
- Создать/проверить Security Group.
- Запустить скрипт создания и убедиться, что девайс доступен.
Разработчик:
- Проверить параметры подключения (host, port, dbname, user, password).
- Тестировать приложения на подключение к базе.
Инженер по безопасности:
- Включить шифрование на уровне хранилища.
- Проверить журналы CloudWatch и правила аудита.
Критерии приёмки
- Инстанс в консоли RDS имеет статус available.
- Инстанс соответствует заданным параметрам (класс, хранилище, движок).
- Доступность из допустимых IP/серверов согласно security group.
- Автоматические бэкапы и мониторинг включены, если это требовалось.
Тестовые случаи и проверка (acceptance)
- TC1: Запуск скрипта без прав → ожидается отказ и сообщение об ошибке прав.
- TC2: Запуск с неверным security group → инстанс не доступен извне.
- TC3: Создание с StorageEncrypted=True → диск зашифрован (проверить KMS).
- TC4: Подключение к инстансу с корректными учётными данными → успешное соединение.
Краткий глоссарий
- RDS: управляемый сервис баз данных от AWS.
- Boto3: официальная Python SDK для AWS.
- VPC Security Group: виртуальный брандмауэр для EC2/RDS.
Заключение
Мы рассмотрели создание RDS MySQL-инстанса через Boto3, разобрали обязательные параметры create_db_instance, привели рабочий пример и рекомендации по безопасности. Вы можете адаптировать пример под свои требования, автоматизировать процесс с помощью Terraform/CloudFormation или интегрировать запуск в конвейер CI/CD.
Важно: перед автоматическим созданием ресурсов в продакшене подготовьте политику безопасности, бэкап-стратегию и процесс управления секретами.
Краткое резюме:
- Используйте защищённые методы хранения ключей.
- Шифруйте хранилище и включайте бэкапы.
- Рассмотрите Infrastructure as Code для повторяемости.
Примечание: пример кода содержит демонстрационные учётные данные — замените их на безопасный метод аутентификации перед использованием в реальной среде.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone