Перенос данных в Yandex Managed Service for PostgreSQL с использованием Yandex Data Transfer
Примечание
В регионе Казахстан доступна только зона доступности kz1-a
.
Примечание
В регионе Казахстан доступна только зона доступности kz1-a
.
Примечание
Функциональность загрузки данных из Object Storage в сервисе Data Transfer находится на стадии Preview. Чтобы получить доступ, обратитесь в техническую поддержку
Вы можете перенести данные из Yandex Object Storage в таблицу Managed Service for PostgreSQL с помощью сервиса Data Transfer. Для этого:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте кластер-приемник Managed Service for PostgreSQL любой подходящей конфигурации со следующими настройками:
- Выделен публичный доступ к хостам кластера.
- Имя БД —
db1
. - Имя пользователя —
pg-user
. - Пароль —
<пароль_пользователя>
.
-
Если вы используете группы безопасности в кластере, убедитесь, что они настроены правильно и допускают подключение к нему.
-
Создайте сервисный аккаунт с именем
storage-viewer
и рольюstorage.viewer
. Трансфер будет использовать его для доступа к бакету. -
Создайте статический ключ доступа для сервисного аккаунта
storage-viewer
.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации objstorage-to-postgres.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности, необходимая для подключения к кластеру;
- сервисный аккаунт, который будет использоваться для создания бакета и дальнейшего доступа к нему;
- секрет Yandex Lockbox, в котором будет храниться статический ключ сервисного аккаунта для настройки эндпоинта-источника;
- бакет-источник Object Storage;
- кластер-приемник Managed Service for PostgreSQL;
- эндпоинт для приемника;
- трансфер.
-
Укажите в файле
objstorage-to-postgres.tf
:folder_id
— идентификатор облачного каталога, такой же, как в настройках провайдера.bucket_name
— имя бакета в соответствии с правилами именования.pg_password
— пароль пользователя PostgreSQL.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте тестовые данные
-
Создайте на рабочей машине
demo_data.csv
и наполните его тестовыми данными:1,Anna 2,Robert 3,Umar 4,Algul 5,Viktor
-
Загрузите подготовленный файл в бакет Object Storage.
Подготовьте трансфер
-
Создайте эндпоинт-источник типа
Object Storage
со следующими настройками:-
Тип базы данных —
Object Storage
. -
Бакет — имя бакета в Object Storage.
-
Идентификатор ключа доступа AWS — открытая часть статического ключа сервисного аккаунта. Если вы создали инфраструктуру с помощью Terraform, скопируйте значение ключа из секрета Yandex Lockbox.
-
Секретный ключ доступа AWS — закрытая часть статического ключа сервисного аккаунта. Если вы создали инфраструктуру с помощью Terraform, скопируйте значение ключа из секрета Yandex Lockbox.
-
Эндпоинт —
https://storage.yandexcloud.kz
. -
Регион —
ru-central1
. -
Формат данных —
CSV
. -
Разделитель — знак запятой
,
. -
Таблица — имя CSV-файла в бакете, например
demo_data.csv
. -
Схема результирующей таблицы — выберите
Вручную
и укажите имена полей и тип данных:Id
:Int64
;Name
:UTF8
.
Остальные параметры оставьте по умолчанию.
-
-
Создайте эндпоинт-приемник и трансфер:
ВручнуюTerraform-
Создайте эндпоинт-приемник типа
PostgreSQL
и укажите в нем параметры подключения к кластеру:- Тип инсталляции —
Кластер Managed Service for PostgreSQL
. - Кластер Managed Service for PostgreSQL — имя кластера-источника PostgreSQL из выпадающего списка.
- База данных —
db1
. - Пользователь —
pg-user
. - Пароль —
<пароль_пользователя>
.
- Тип инсталляции —
-
Создайте трансфер типа Копирование, использующий созданные эндпоинты.
-
Укажите в файле
objstorage-to-postgres.tf
переменные:source_endpoint_id
— значение идентификатора эндпоинта для источника;transfer_enabled
– значение1
для создания трансфера.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Активируйте трансфер
-
Активируйте трансфер и дождитесь его перехода в статус Завершен.
-
Подключитесь к базе данных в кластере-приемнике Managed Service for PostgreSQL.
-
Выполните запрос:
SELECT * FROM public."demo_data.csv";
Пример ответа
__file_name | __row_index | Id | Name --------------+-------------+----+-------- demo_data.csv | 1 | 1 | Anna demo_data.csv | 2 | 2 | Robert demo_data.csv | 3 | 3 | Umar demo_data.csv | 4 | 4 | Algul demo_data.csv | 5 | 5 | Viktor
Данные успешно перенесены.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Объекты из бакета.
-
Остальные ресурсы удалите в зависимости от способа их создания:
ВручнуюTerraform-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
-