Захват изменений из PostgreSQL и поставка в Yandex Data Streams
Вы можете отслеживать изменения данных в кластере-источнике Managed Service for PostgreSQL и отправлять их в кластер-приемник Data Streams с помощью технологии Change Data Capture (CDC).
Чтобы настроить CDC с использованием сервиса Data Transfer:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте кластер-источник Managed Service for PostgreSQL любой подходящей конфигурации с хостами в публичном доступе и следующими настройками:
- Имя БД —
db1
. - Имя пользователя —
pg-user
.
- Имя БД —
-
Настройте группы безопасности и убедитесь, что они допускают подключение к кластеру.
-
Выдайте роль
mdb_replication
пользователюpg-user
. -
Создайте базу данных Managed Service for YDB с именем
ydb-example
любой подходящей конфигурации. -
Создайте сервисный аккаунт с именем
yds-sa
и рольюyds.editor
. Трансфер будет использовать его для доступа к Data Streams.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации postgresql-yds.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности, необходимая для подключения к кластеру;
- кластер-источник Managed Service for PostgreSQL;
- база данных Managed Service for YDB;
- сервисный аккаунт, который будет использоваться для доступа к Data Streams;
- эндпоинт для источника;
- трансфер.
-
Укажите в файле
postgresql-yds.tf
пароль пользователя PostgreSQL. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте трансфер
-
Создайте поток данных Data Streams с именем
mpg-stream
. -
Подключитесь к кластеру Managed Service for PostgreSQL, создайте в базе данных
db1
таблицуmeasurements
и заполните ее данными: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 ('iv9a94th6rzt********', '2022-06-05 17:27:00', 55.70329032, 37.65472196, 427.5, 0, 23.5, 17, NULL), ('rhibbh3y08qm********', '2022-06-06 09:49:54', 55.71294467, 37.66542005, 429.13, 55.5, NULL, 18, 32);
-
Создайте эндпоинт-приемник типа
Data Streams
со следующими настройками:- База данных —
ydb-example
. - Поток —
mpg-stream
. - Сервисный аккаунт —
yds-sa
.
- База данных —
-
Создайте эндпоинт-источник и трансфер:
ВручнуюTerraform-
Создайте эндпоинт-источник типа
PostgreSQL
и укажите в нем параметры подключения к кластеру:- Тип инсталляции —
Кластер Managed Service for PostgreSQL
. - Кластер Managed Service for PostgreSQL —
<имя_кластера-источника_PostgreSQL>
из выпадающего списка. - База данных —
db1
. - Пользователь —
pg-user
. - Пароль — пароль пользователя
pg-user
.
- Тип инсталляции —
-
Создайте трансфер типа Репликация, использующий созданные эндпоинты.
-
Укажите в файле
postgresql-yds.tf
переменные:yds_endpoint_id
— значение идентификатора эндпоинта для приемника;transfer_enabled
– значение1
для создания трансфера.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Активируйте трансфер
-
Активируйте трансфер и дождитесь его перехода в статус Реплицируется.
-
Проверьте, что в поток данных Data Streams перенеслись данные из источника:
Консоль управленияAWS CLI- В консоли управления
выберите сервис Data Streams. - Выберите поток-приемник из списка и перейдите в раздел
Просмотр данных. - Убедитесь, что в сегменте
shard-000000
появились сообщения, содержащие строки таблицы из источника. Чтобы рассмотреть сообщения подробнее, нажмите на значок .
-
Настройте окружение для Data Streams.
-
Прочитайте данные из потока с помощью:
- В консоли управления
Проверьте работу репликации
-
Подключитесь к кластеру-источнику.
-
Добавьте в таблицу
measurements
новую строку:INSERT INTO measurements VALUES ('ad02l5ck6sdt********', '2022-06-05 17:27:00', 55.70329032, 37.65472196, 427.5, 0, 23.5, 19, 45);
-
Убедитесь, что новая строка отобразилась в потоке данных Data Streams.
Удалите созданные ресурсы
Примечание
Перед тем как удалить созданные ресурсы, деактивируйте трансфер.
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
Остальные ресурсы удалите в зависимости от способа их создания:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-