Настройка совместных подключений к базе данных

с помощью Amazon RDS Proxy

Amazon RDS Proxy представляет собой полностью управляемый высокодоступный прокси‑сервер для Amazon Relational Database Service (Amazon RDS), повышающий масштабируемость и безопасность приложений, а также их устойчивость к сбоям в базе данных.

Многие приложения, включая построенные на современных бессерверных архитектурах с помощью AWS Lambda, могут поддерживать значительное количество открытых подключений к серверу базы данных, а также быстро открывать и закрывать эти подключения, расходуя память и вычислительные ресурсы базы данных. Amazon RDS Proxy позволяет приложениям объединять подключения к базе данных в пул и предоставлять к ним совместный доступ, повышая эффективность базы данных и масштабируемость приложений. С RDS Proxy снижение времени обработки отказа для баз данных Aurora и RDS достигает 66 %, а интеграция с AWS Secrets Manager и AWS Identity and Access Management (IAM) позволяет управлять данными для доступа к базе данных, аутентификацией и настройками доступа.

Amazon RDS Proxy можно использовать с большинством приложений без каких‑либо изменений в коде, работать с дополнительной инфраструктурой также не требуется. Цены будут понятными и предсказуемыми: оплачивается каждый виртуальный ЦПУ инстанса базы данных, к которому подключен прокси‑сервер. Amazon RDS Proxy поддерживает Amazon RDS for MySQL и версию Amazon Aurora, совместимую с MySQL.

В этом учебном пособии мы расскажем, как создать прокси‑сервер Amazon RDS Proxy и подключить его к существующей базе данных Amazon RDS MySQL. Для подключения к базе данных RDS MySQL через RDS Proxy используется клиент MySQL на инстансе Amazon EC2. Такой подход применим и к бессерверной архитектуре с Amazon RDS.

Требования

Для использования Amazon RDS Proxy необходим определенный набор сетевых ресурсов, а именно:

  • виртуальное облако Amazon Virtual Private Cloud (Amazon VPC);
  • не менее двух подсетей в различных зонах доступности;
  • база данных Amazon RDS и инстансы Amazon EC2 в том же VPC;
  • Интернет‑шлюз.

Если ранее вы подключались к существующим инстансам баз данных RDS MySQL, все необходимые ресурсы уже готовы к работе. Для данного учебного пособия необходим аккаунт с настроенным инстансами EC2 и RDS MySQL в одном VPC. Если вы еще не настроили их, следуйте инструкциям по подготовке инстансов RDS и EC2 в VPC по умолчанию.

Подробнее об этом учебном пособии
Время 10 минут      
Стоимость Менее 1 USD
Пример использования Базы данных
Продукты Amazon RDS, AWS Secrets Manager
Аудитория Администраторы баз данных, разработчики
Уровень Средний
Последнее обновление 16 марта 2020 г.

Шаг 1. Проверка групп безопасности и подключения к базе данных

На этом шаге вы проверите правила групп безопасности для входящих и исходящих подключений, затем проверить возможность подключения текущего инстанса EC2 к существующему инстансу базы данных RDS.  

1.1. Откройте панель управления Amazon VPC и войдите в систему, используя учетные данные аккаунта AWS. Если у вас нет аккаунта AWS, создайте новый, чтобы приступить к работе.

1.2. Нажмите раскрывающийся список регионов и выберите регион AWS, в котором расположены существующие инстансы RDS и EC2. В качестве примера используется регион Восток США (Огайо).

1.3. В левой навигационной панели выберите Группы безопасности.

В качестве примера используется две группы безопасности VPC.

  • EC2-sg: эта группа безопасности закреплена за инстансом EC2; она разрешает выполнять входящие подключения к инстансу EC2 только по SSH и любые исходящие подключения.
  • RDS-sg: эта группа безопасности закреплена за инстансом RDS; она разрешает выполнять с инстанса EC2 только TCP‑подключения через порт 3306 (отображается как EC2-sg) и любые исходящие подключения.

1.4. Выберите группу безопасности EC2-sg.

  • Выберите вкладку Inbound Rules (Правила входящих подключений) и убедитесь, что установлен тип SSH.
  • Выберите вкладку Outbound Rules (Правила исходящих подключений) и убедитесь, что для параметра Type (Тип) установлено значение All traffic (Весь трафик).

1.5. Выберите группу безопасности RDS-sg.

  • Выберите вкладку Inbound Rules (Правила входящих подключений) и убедитесь, что для параметра Source (Источник) установлено значение EC2-sg.
  • Выберите вкладку Outbound Rules (Правила исходящих подключений) и убедитесь, что для параметра Type (Тип) установлено значение All traffic (Весь трафик).

1.6. Перейдите в консоль RDS, выберите Databases (Базы данных), затем выберите существующий инстанс БД RDS MySQL. На вкладке Connectivity & security (Подключение и безопасность) обратите внимание на значение Endpoint (Адрес) инстанса.

1.7. Перейдите в консоль EC2, выберите Running instances (Работающие инстансы), затем выберите инстанс EC2, с которого требуется проверить подключение к инстансу БД RDS. Выберите Connect (Подключиться).

1.8. В окне подключения к инстансу выберите EC2 Instance Connect (browser‑based SSH connection) (Подключение к инстансу EC2 (по SSH через браузер)). Откроется окно браузера с интерфейсом командной строки (CLI) инстанса EC2.

1.9. В CLI инстанса EC2 проверьте подключение к инстансу БД RDS, выполнив следующую команду:

mysql -h <RDS DB endpoint> -P 3306 -u <username> -p

При появлении запроса введите пароль и нажмите ввод.

CLI вернет сообщение об успешном подключении к инстансу БД RDS. Если подключение инстанса EC2 к инстансу RDS не удалось, проверьте, что оба инстанса расположены в одном VPC и группы безопасности настроены правильно.

Шаг 2. Хранение данных для доступа к базе данных в AWS Secrets Manager

На этом этапе вы сохраните данные для доступа к базе данных в AWS Secrets Manager. Каждый аккаунт пользователя базы данных, к которому прокси‑сервер получает доступ, требует наличия соответствующих конфиденциальных данных в AWS Secrets Manager. Amazon RDS Proxy использует эти конфиденциальные данные для поддержания пула подключений к базе данных.

2.1. Перейдите в раздел Secrets Manager в Консоли управления AWS и выберите Store a new secret (Сохранить новые конфиденциальные данные).

2.2. В поле Select secret type (Выбор типа конфиденциальных данных) выберите Credentials for RDS database (Данные для доступа к БД RDS). Затем введите имя пользователя и пароль, использованные при создании базы данных.

2.3. Выберите DefaultEncryptionKey, затем укажите базу данных RDS, к которой относятся конфиденциальные данные. Нажмите Next (Далее).  

2.4. В поле Secret name and description (Имя и описание конфиденциальных данных) укажите имя и описание конфиденциальных данных, чтобы их было удобно находить в дальнейшем. Затем выберите Next (Далее).

2.5. AWS Secrets Manager позволяет настроить автоматическую ротацию конфиденциальных данных. Это эффективный и простой способ повысить безопасность приложения. Подробнее см. в разделе Rotating Your AWS Secrets Manager Secrets.

Настройка ротации конфиденциальных данных не рассматривается в данном учебном пособии, поэтому выберите вариант Disable automatic rotation option (Выключить автоматическую ротацию), затем нажмите Next (Далее).

2.6. В консоли Secrets Manager приведены параметры конфигурации конфиденциальных данных и пример кода с использованием конфиденциальных данных. Прокрутите до конца страницы и выберите Store (Сохранить), чтобы сохранить конфиденциальные данные.

2.7. После создания конфиденциальных данных они отображаются на странице Secrets Manager. Выберите созданные конфиденциальные данные.

В поле Secret details (Дополнительные сведения о конфиденциальных данных) показано значение ARN конфиденциальных данных. Скопируйте это значение, поскольку оно еще будет использоваться в этом учебном пособии.

Шаг 3. Создание роли и политики IAM

В этом шаге вы создадите роль и политику AWS Identity and Access Management (IAM), которая разрешит RDS Proxy доступ к конфиденциальным данным, созданным вами в AWS Secrets Manager.

3.1. Перейдите к панели IAM в Консоли управления AWS. В панели навигации IAM выберите Roles (Роли), затем Create Role (Создать роль).

3.2. Для пункта Select type of trusted entity (Выбор типа доверенного объекта) выберите AWS service (Сервис AWS). В пункте Choose a use case (Выберите пример использования) выберите RDS.

3.3. В пункте Select your use case (Выберите свой пример использования) выберите RDS – Add Role to Database (RDS – Добавить роль для базы данных) и нажмите Next: Permissions (Далее: Разрешения).

3.4. Выберите Create policy (Создать политику), затем выберите вкладку JSON. Удалите существующие положения политики.

3.5. Добавьте новое положение политики, заменив свое текущее значение ARN конфиденциальных данных на значение, приведенное ниже. Затем выберите Review policy (Просмотр политики).

(Это положение политики описано в разделе Setting Up AWS Identity and Access Management (IAM) Policies Руководства пользователя Amazon RDS.)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:CreateSecret",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": [
                     "your_secret_ARN"
            ]
        }
    ]
}

3.6. В разделе Review policy (Просмотр политики) задайте для политики имя и описание, которые упростят ее поиск в дальнейшем. Затем выберите Create policy (Создать политику).

3.7. Выберите Roles (Роли), а затем Refresh (Обновить).

3.8. В поле поиска введите tutorial и выберите значение tutorial‑policy. Выберите Next: Tags (Далее: теги).

3.9. Пропустите раздел тегов и выберите Next: Review (Далее: просмотр).

3.10. В разделе Review (Просмотр) укажите имя и описание роли, которые упростят ее поиск в дальнейшем. Затем выберите Create role (Создать роль).

3.11. Подтвердите, что роль создана.

Шаг 4. Создание сервера RDS Proxy

На этом шаге вы создадите прокси‑сервер RDS и настроите его для использования группы безопасности, которую проверяли в шаге 1, конфиденциальных данных, созданных в шаге 2, и роли, созданной в шаге 3.

4.1. Перейдите в консоль RDS. В панели навигации RDS выберите Proxies (Прокси‑серверы), затем Create proxy (Создать прокси).

4.2. В разделе Proxy configuration (Конфигурация прокси‑сервера) выполните следующие действия.

  • В поле Proxy identifier (Идентификатор прокси‑сервера) укажите легко идентифицируемое имя.
  • Снимите флажок Require Transport Layer Security (Требовать протокол TLS).
  • Оставьте в поле Idle client connection timeout (Тайм‑аут неиспользуемого подключения клиента) значение по умолчанию 30 минут.

4.3. В разделе Target group configuration (Конфигурация целевой группы) для пункта Database (База данных) выберите инстанс RDS MySQL DB, который нужно связать с этим прокси‑сервером RDS. (Это должен быть тот же инстанс базы данных RDS, который вы верифицировали в шаге 1.) В поле Connection pool maximum connections (Максимальное количество подключений в пуле) оставьте значение по умолчанию 100.

4.4. В разделе Connectivity (Подключение) выполните следующие действия.

  • В поле Secrets Manager secret (Конфиденциальные данные Secrets Manager) выберите конфиденциальные данные, созданные в шаге 2.
  • В поле IAM role(Роль IAM) выберите роль, созданную в шаге 3.
  • В поле IAM Authentication (Аутентификации IAM) оставьте настройку по умолчанию Disabled (Отключено). (В этом учебном пособии для подключения к RDS Proxy используются учетные данные БД, поэтому аутентификация IAM не требуется.)
  • В поле Subnets (Подсети) выберите как минимум две подсети в разных зонах доступности.
  • Разверните раздел Additional connectivity configuration (Дополнительные настройки подключения) и в поле VPC security group (Группа безопасности VPC) выберите существующую группу безопасности RDS-sg.

4.5. В разделе Advanced Configuration (Расширенная настройка) оставьте в поле Enhanced logging (Расширенное ведение журнала) значение по умолчанию. Установите флажок в поле соглашения об обслуживании и выберите Create proxy (Создать прокси).

4.6. Подождите, пока статус прокси‑сервера изменится с Creating (Создается) на Available (Доступен), затем выберите этот прокси‑сервер.

4.7. В разделе Proxy configurations (Конфигурация прокси‑сервера) сохраните для себя Proxy endpoint (Адрес прокси‑сервера) и проверьте, что все остальные параметры верны.

Шаг 5. Подключение к базе данных RDS DB через RDS Proxy

На этом этапе вы научитесь подключаться к инстансу RDS DB из своего инстанса EC2. Однако вместо прямого подключения инстанс EC2 будет подключаться к инстансу RDS DB через прокси‑сервер RDS Proxy.

5.1. Перейдите в консоль EC2. В панели навигации EC2 выберите Running instances (Работающие инстансы), затем выберите инстанс EC2, подключение к которому тестировали в шаге 1. Выберите Connect (Подключиться).

5.2. В окне Connect to your instance (Подключение к инстансу) выберите EC2 Instance Connect (browser‑based SSH connection) (Подключение к инстансу EC2 (по SSH через браузер)), затем выберите Connect (Подключиться).

5.3. В интерфейсе командной строки инстанса EC2 используйте следующую команду для подключения к инстансу RDS через адрес RDS Proxy:

mysql -h <proxy endpoint> -P 3306 -u <username> -p

При появлении запроса введите пароль и нажмите ввод.

Интерфейс командной строки вернет сообщение об успешном подключении к инстансу БД RDS через адрес RDS Proxy.

Шаг 6. Мониторинг подключения к прокси‑серверу RDS Proxy

На этом шаге вы научитесь использовать Amazon CloudWatch для мониторинга таких метрик прокси‑сервера, как клиентские подключения и подключения к базе данных.

6.1. Перейдите вконсоль CloudWatch. В панели навигации CloudWatch выберите Метрики (Metrics), затем RDS и Per‑Proxy Metrics (Метрики отдельных прокси‑серверов).  

6.2. В поле Search (Поиск) введите имя вашего прокси‑сервера.

6.3. В списке метрик выберите ClientConnections и DatabaseConnections. В качестве параметра для отображения выберите Number (Количество).

Метрика ClientConnections показывает текущее количество клиентских подключений к RDS Proxy, измеряемое каждую минуту. Метрика DatabaseConnections показывает текущее количество подключений к базе данных со стороны RDS Proxy, измеряемое каждую минуту. Для получения подробной информации обо всех метриках см. раздел Monitoring RDS Proxy.

Полученный график показывает, что в данный момент есть одно клиентское подключение (со стороны EC2 к RDS Proxy) и одно подключение к базе данных (со стороны инстанса RDS Proxy к инстансу базы данных RDS). Эти данные подтверждают существование соединения, которое было создано вами в шаге 5.

Шаг 7. Очистка

Ниже приведена процедура по очистке ресурсов, созданных в рамках этого учебного пособия.

Удаление RDS Proxy

7.1. Перейдите в консоль RDS и в панели с левой стороны выберите Proxies (Прокси‑серверы).

7.2. Выберите прокси‑сервер, созданный в рамках этого учебного пособия.

7.3. Выберите Actions (Действия), затем Delete (Удалить).

7.4. В диалоговом окне введите delete me и выберите Delete (Удалить).

Статус прокси‑сервера сменится на Deleting (Удаляется). По окончании процедуры прокси‑сервер будет удален из списка.

Удаление конфиденциальных данных

7.5. Перейдите в консоль Secrets Manager.

7.6. Выберите конфиденциальные данные, созданные в рамках этого учебного пособия.

7.7. Выберите Actions (Действия), затем Delete secret (Удалить конфиденциальные данные).

7.8. В целях безопасности Secrets Manager требует выждать определенное время перед полным удалением конфиденциальных данных. Используйте период по умолчанию 30 дней и выберите Schedule deletion (Запланировать удаление).

Удаление роли и политики IAM

7.9. Перейдите в консоль IAM и в панели навигации выберите Roles (Роли).

7.10. Найдите роль tutorial‑role и установите рядом с ней флажок.

7.11. В верхней части страницы выберите Delete role (Удалить роль).

7.12. В окне подтверждения выберите Yes, Delete (Да, удалить).  

7.12. В панели навигации IAM выберите Policies (Политики).

7.13. Найдите политику tutorial‑policy и установите рядом с ней флажок.  

7.14. Выберите Policy actions (Действия с политикой), затем выберите Delete (Удалить).

7.15. Подтвердите, что вы хотите удалить политику, а затем выберите Delete (Удалить).

Удаление прочих ресурсов

Если в рамках этого учебного пособия был создан новый инстанс EC2, новый инстанс RDS и соответствующие группы безопасности для них, удалите и эти ресурсы.

Поздравляем!

Вы создали прокси‑сервер Amazon RDS Proxy для объединения и совместного использования подключений к базе данных, отследили метрики и проверили работу подключений.

Была ли полезной информация, представленная в этом учебном пособии?

Спасибо!
Укажите, что вам понравилось.
Close
Приносим извинения за причиненные неудобства
Вы обнаружили устаревшую, неточную или неподходящую информацию? Оставьте свой отзыв, чтобы мы могли улучшить качество предоставляемых услуг.
Close

Подробнее о возможностях Amazon RDS

Подробнее о возможностях Amazon RDS см. в руководстве пользователя Amazon RDS.

Рекомендации по работе с Amazon RDS

Ознакомьтесь с общими рекомендациями и вариантами работы с Amazon RDS.

Подробнее об Amazon RDS Proxy

Дополнительные сведения можно найти в публикации Using Amazon RDS Proxy with AWS Lambda в блоге и в руководстве Managing Connections with Amazon RDS Proxy.