Миграция данных из AWS RDS for PostgreSQL в Yandex Managed Service for PostgreSQL
Чтобы настроить перенос данных из базы Amazon RDS for PostgreSQL
- Подготовьте тестовые данные.
- Подготовьте и активируйте трансфер.
- Проверьте работоспособность трансфера.
Если созданные ресурсы вам больше не нужны, удалите их.
Перенос данных работает для версий PostgreSQL, начиная с 9.4. Версия PostgreSQL в Managed Service for PostgreSQL должна быть не старше, чем версия PostgreSQL в Amazon RDS.
Примечание
Использование сервисов Amazon не входит в условия использования Yandex Cloud
Перед началом работы
Подготовьте инфраструктуру:
-
Если у вас нет аккаунта AWS, создайте
его. -
В Amazon RDS создайте группу параметров
и установите в ней параметрrds.logical_replication
в значение1
. Остальные параметры можно оставить по умолчанию. -
Создайте инстанс Amazon RDS for PostgreSQL
(кластер-источник).При создании инстанса выполните необходимые настройки:
- Включите для инстанса публичный доступ.
- В группу безопасности инстанса добавьте правило, разрешающее входящий TCP-трафик с любых IP-адресов на порт инстанса PostgreSQL (по умолчанию —
5432
). - Назначьте инстансу созданную ранее группу параметров.
Примечание
Если вы изменили группу параметров существующего инстанса, перезагрузите инстанс, чтобы изменения вступили в силу. На время перезагрузки инстанс станет недоступен.
-
Создайте кластер-приемник Managed Service for PostgreSQL любой подходящей конфигурации с хостами в публичном доступе и следующими настройками:
- Имя БД —
mpg_db
. - Имя пользователя —
mpg_user
. - Пароль —
<пароль_приемника>
.
- Имя БД —
-
Убедитесь, что группа безопасности кластера Managed Service for PostgreSQL настроена правильно и допускает подключение к кластеру через интернет.
-
Настройте NAT-шлюз в интернет для подсети, в которой расположен кластер-приемник.
-
Скачайте сертификат AWS
для региона, в котором расположен инстанс Amazon RDS for PostgreSQL.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте AWS CLI
. Провайдер AWS для Terraform использует конфигурацию AWS CLI для доступа к сервису. -
Настройте провайдер Terraform. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
и поместите в отдельную рабочую директорию. -
Отредактируйте файл
provider.tf
:-
Укажите значения параметров для провайдера
yandex
. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Добавьте провайдер
aws
в блокrequired_providers
:required_providers { ... aws = { source = "hashicorp/aws" version = ">= 3.70" } }
-
Добавьте описание провайдера
aws
, указав в параметрах регион, в котором будет расположен инстанс Amazon RDS for PostgreSQL (в примереeu-north-1
):provider "aws" { region = "eu-north-1" }
-
-
Скачайте в ту же рабочую директорию файл конфигурации rds-pg-mpg.tf
.В этом файле описаны:
-
Инфраструктура, необходимая для работы инстанса Amazon RDS for PostgreSQL:
- группа подсетей;
- правило для группы безопасности;
- группа параметров.
Инстанс будет использовать сеть, подсети и группу безопасности, существующие по умолчанию.
-
Инстанс Amazon RDS for PostgreSQL (кластер-источник).
-
Инфраструктура, необходимая для работы кластера-приемника Managed Service for PostgreSQL:
- сеть и подсеть;
- NAT-шлюз для доступа кластера в интернет;
- группа безопасности.
-
Кластер-приемник Managed Service for PostgreSQL.
-
Эндпоинты для источника и приемника.
-
Трансфер.
-
-
Скачайте сертификат AWS
для региона, в котором будет расположен инстанс Amazon RDS for PostgreSQL. -
Укажите в файле
rds-pg-mpg.tf
:- Версии PostgreSQL для Amazon RDS for PostgreSQL и Managed Service for PostgreSQL.
- Семейство параметров для группы параметров
Amazon RDS. - Путь к скачанному ранее сертификату AWS.
- Пароли пользователей Amazon RDS for PostgreSQL и Managed Service for PostgreSQL.
-
Выполните команду
terraform init
в директории с конфигурационным файлом. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте тестовые данные
-
Установите утилиту
psql
:sudo apt update && sudo apt install --yes postgresql-client
-
Подключитесь к базе данных в кластере-источнике Amazon RDS for PostgreSQL:
psql "host=<URL_хоста> \ port=<порт_PostgreSQL> \ sslmode=verify-full \ sslrootcert=<путь_к_файлу_сертификата> \ dbname=<имя_БД> \ user=<имя_пользователя>"
По умолчанию порт PostgreSQL —
5432
.Примечание
Подключение к инстансу через интернет может стать доступно не сразу, а в течение часа с момента создания.
-
Наполните базу тестовыми данными. В качестве примера используется простая таблица, содержащая информацию, поступающую от некоторых датчиков автомобиля.
Создайте таблицу:
CREATE TABLE measurements ( device_id varchar(200) NOT NULL, datetime timestamp NOT NULL, latitude real NOT NULL, longitude real NOT NULL, altitude real NOT NULL, speed real NOT NULL, battery_voltage real, cabin_temperature real NOT NULL, fuel_level real, PRIMARY KEY (device_id) );
Наполните таблицу данными:
INSERT INTO measurements VALUES ('iv9a94th6rztooxh5ur2', '2022-06-05 17:27:00', 55.70329032, 37.65472196, 427.5, 0, 23.5, 17, NULL), ('rhibbh3y08qmz3sdbrbu', '2022-06-06 09:49:54', 55.71294467, 37.66542005, 429.13, 55.5, NULL, 18, 32);
Подготовьте и активируйте трансфер
-
Создайте эндпоинт-источник типа
PostgreSQL
и укажите в нем параметры подключения к кластеру:- Тип инсталляции —
Пользовательская инсталляция
. - Хост — URL хоста.
- Порт —
5432
. - Сертификат CA — выберите файл сертификата AWS.
- База данных —
postgres
. - Пользователь —
postgres
. - Пароль —
<пароль_пользователя>
.
- Тип инсталляции —
-
Создайте эндпоинт-приемник типа
PostgreSQL
и укажите в нем параметры подключения к кластеру:- Тип инсталляции —
Кластер Managed Service for PostgreSQL
. - Кластер Managed Service for PostgreSQL —
<имя_кластера_приемника>
из выпадающего списка. - База данных —
mpg_db
. - Пользователь —
mpg_user
. - Пароль —
<пароль_пользователя>
.
- Тип инсталляции —
-
Создайте трансфер типа Копирование и репликация, использующий созданные эндпоинты.
-
Активируйте трансфер и дождитесь его перехода в статус Реплицируется.
-
Укажите в файле
rds-pg-mpg.tf
значение1
для параметраtransfer_enabled
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Трансфер активируется автоматически. Дождитесь его перехода в статус Реплицируется.
Проверьте работоспособность трансфера
Чтобы убедиться в работоспособности трансфера, проверьте работу копирования и репликации.
Проверьте работу копирования
-
Подключитесь к базе данных в кластере-приемнике Managed Service for PostgreSQL.
-
Выполните запрос:
SELECT * FROM measurements;
Проверьте работу репликации
-
Подключитесь к базе данных в кластере-источнике Amazon RDS for PostgreSQL:
psql "host=<URL_хоста> \ port=<порт_PostgreSQL> \ sslmode=verify-full \ sslrootcert=<путь_к_файлу_сертификата> \ dbname=<имя_БД> \ user=<имя_пользователя>"
По умолчанию порт PostgreSQL —
5432
. -
Добавьте данные в таблицу
measurements
:INSERT INTO measurements VALUES ('iv7b74th678tooxdagrf', '2020-06-08 17:45:00', 53.70987913, 36.62549834, 378.0, 20.5, 5.3, 20, NULL);
-
Убедитесь, что добавленная строка появилась в базе данных приемника:
-
Подключитесь к базе данных в кластере-приемнике Managed Service for PostgreSQL.
-
Выполните запрос:
SELECT * FROM measurements;
Примечание
Репликация данных может занять несколько минут.
-
Удалите созданные ресурсы
Примечание
Перед тем как удалить созданные ресурсы, деактивируйте трансфер.
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-