Гид по технологиям

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

5 min read AWS Обновлено 26 Nov 2025
Создание RDS MySQL через Boto3
Создание RDS MySQL через Boto3

Обзор процесса создания RDS MySQL через Boto3

Предварительные требования

  • AWS аккаунт (создайте при необходимости).
  • Базовое понимание Amazon RDS и сетевых групп безопасности (VPC Security Groups).
  • Установленный Python и pip на вашей машине.
  • Установленная библиотека Boto3 (pip install boto3).

Важно: используйте профиль IAM с минимально необходимыми правами — например, права на rds:CreateDBInstance, ec2:DescribeSecurityGroups.

Что мы сделаем

  1. Установим зависимости.
  2. Разберёмся с методом create_db_instance.
  3. Запустим пример на 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 и её вывод

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

pip show 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)

Пример создания RDS-инстанса через Boto3 — вывод команды

Запуск скрипта в терминале:

python create-rds-instance.py

Вы увидите JSON-ответ от AWS в терминале. Для проверки состояния инстанса можно перейти в RDS Dashboard в консоли AWS.

Состояние успешно созданной базы данных в консоли AWS RDS

Практические советы по безопасности и надёжности

Важно: никогда не храните постоянные 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 — добавьте правило на входящий трафик для нужного порта.

План действий: мини-методология (шаги)

  1. Подготовить IAM-политику с минимумом прав.
  2. Подготовить VPC и security group с открытым портом для нужных хостов.
  3. Проверить локальную среду: Python, pip, boto3.
  4. Записать конфигурацию инстанса (имя, класс, хранилище, шифрование).
  5. Запустить create_db_instance и ждать статуса available.
  6. Протестировать подключение и настроить бэкапы/мониторинг.

Роли и чек-листы

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 для повторяемости.

Примечание: пример кода содержит демонстрационные учётные данные — замените их на безопасный метод аутентификации перед использованием в реальной среде.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство