Перейти к основному содержимому

Подключение Redshift Совместимо с dbt v2

dbt platform поддерживает подключение к Redshift.

Права доступа к хранилищу данных для dbt v2​

Пользователь базы данных Redshift, которого использует dbt v2, должен иметь возможность выполнять рабочие нагрузки dbt и читать метаданные каталога, используемые для интроспекции.

Необходимые объекты Redshift​

Перед подключением следующие объекты должны существовать или быть доступны:

ОбъектНазначение
Кластер (provisioned) или рабочая группа (serverless)Вычислительный ресурс
База данныхЦелевая база данных
СхемаЦелевая схема в базе данных
ПользовательПользователь базы данных для аутентификации
Роль или профиль IAM (необязательно)Для аутентификации на основе IAM

Основные разрешения​

Для базовых функций dbt необходимы следующие разрешения:

РазрешениеОбъектНазначение
USAGEСхемаДоступ к схеме
CREATEСхемаСоздание таблиц и представлений в схеме
SELECTТаблицы или представленияЧтение данных
INSERTТаблицыВставка данных
UPDATEТаблицыОбновление данных
DELETEТаблицыУдаление данных
DROPТаблицы или представленияУдаление или замена объектов
TRUNCATEТаблицыОчистка таблиц

Операции с метаданными​

dbt v2 запрашивает следующие системные отношения Redshift:

Системное отношениеНазначениеНеобходимое разрешение
SVV_ALL_COLUMNSМетаданные столбцовSELECT для системного представления
pg_classПолучение списка отношенийДоступ к системному каталогу
pg_namespaceИнформация о схемахДоступ к системному каталогу
sys_query_detailПроверка актуальности источников (время последней вставки)SELECT для системного представления
svv_table_infoПолучение списка материализованных представлений, если они есть в проектеSELECT для системного представления
svv_mv_infoПолучение списка материализованных представлений, если они есть в проектеSELECT для системного представления

Управление схемами​

Разрешения для управления схемами, необходимые при определённых условиях

РазрешениеОбъектКогда требуется
CREATE SCHEMAБаза данныхАвтоматическое создание схем

Примеры SQL-команд для предоставления прав доступа в Redshift см. в разделе Права доступа в Redshift.

Поля подключения​

При создании подключения используйте следующие поля:

ПолеОбязательное?ОписаниеПримеры
Server HostnameДаИмя хоста базы данных, к которой нужно подключиться. Это может быть имя хоста или IP-адрес. Чтобы найти имя хоста, см. раздел Поиск кластера.Redshift: hostname.region.redshift.amazonaws.com
PortДаОбычно 5439 (Redshift)5439
DatabaseНетЛогическая база данных, к которой нужно подключиться и в которой будут выполняться запросы.analytics
RetriesНетКоличество повторных попыток (для каждой SQL-инструкции). Если не задано, по умолчанию используется 3. Максимальное значение — 10.4

Примечание: При настройке подключения к Redshift в dbt параметры SSL недоступны для ввода.

Настройка подключения к RedshiftНастройка подключения к Redshift
Настройка подключения к RedshiftНастройка подключения к Redshift

Ниже приведены поддерживаемые способы аутентификации для Redshift:

  • Имя пользователя и пароль

  • SSH-туннелирование

  • Identity Center через external Oauth

  • Аутентификация IAM User через extended attributes

  • Имя пользователя и пароль

  • SSH-туннелирование

  • AWS IAM Identity Center через внешний OAuth (Okta или Entra ID) для подключений в среде разработки

  • Аутентификация пользователя IAM через расширенные атрибуты

На dbt platform аутентификация пользователя IAM в настоящее время поддерживается только через расширенные атрибуты. После создания проекта среды разработки и развертывания можно настроить на использование расширенных атрибутов для передачи описанных ниже полей, поскольку некоторые из них не поддерживаются при вводе через текстовые поля.

  • для кластера — в поле user должен быть указан пользователь базы данных. IAM User используется только для аутентификации, а пользователь базы данных — для авторизации
  • для Serverless — выдать IAM User разрешения в Redshift. Поле user игнорируется (но всё равно является обязательным)
  • в обоих случаях поле password будет игнорироваться.
Profile fieldExampleDescription
methodIAMИспользуйте IAM для аутентификации от имени пользователя IAM
cluster_idCLUSTER_IDТребуется для аутентификации IAM только для выделенного кластера, но не для Serverless
userusernameПользователь, выполняющий запросы к базе данных; игнорируется для Serverless (но по-прежнему обязателен)
regionus-east-1Регион вашего экземпляра Redshift
access_key_idACCESS_KEY_IDИдентификатор ключа доступа пользователя IAM
secret_access_keySECRET_ACCESS_KEYСекретный ключ доступа пользователя IAM

Пример Extended Attributes для IAM User в Redshift Serverless​

Чтобы не вставлять секреты напрямую в extended attributes, используйте переменные окружения:

~/.dbt/profiles.yml
host: my-production-instance.myregion.redshift-serverless.amazonaws.com
method: iam
region: us-east-2
access_key_id: '{{ env_var(''DBT_ENV_ACCESS_KEY_ID'') }}'
secret_access_key: '{{ env_var(''DBT_ENV_SECRET_ACCESS_KEY'') }}'

И DBT_ENV_ACCESS_KEY_ID, и DBT_ENV_SECRET_ACCESS_KEY должны быть заданы для каждой среды, использующей extended attributes таким образом.

Подключение через SSH-туннель​

Используйте SSH-туннель, если ваш экземпляр Redshift недоступен из общедоступной сети и доступ к нему должен осуществляться через бастионный сервер. Если эта функция включена, dbt platform подключается к вашей базе данных, сначала устанавливая защищённое соединение с бастионным сервером, который затем перенаправляет трафик в вашу базу данных.

Чтобы настроить подключение через SSH-туннель:

  1. Перейдите в Account settings (нажав на название своей учётной записи в левом боковом меню) и выберите Connections.
  2. Выберите существующее подключение для редактирования или нажмите + New connection.
  3. В разделе Connection settings убедитесь, что установлен флажок SSH Tunnel Enabled.
  4. Введите имя хоста, имя пользователя и порт бастионного сервера.
Открытый ключ генерируется после сохраненияОткрытый ключ генерируется после сохранения
  1. Нажмите Save. dbt platform сгенерирует и отобразит открытый ключ.

  2. Скопируйте новый открытый ключ на бастионный сервер и добавьте его в файл authorized_keys сервера, чтобы разрешить dbt platform подключаться через бастионный сервер. Если новый ключ не добавлен, установить соединение через SSH-туннель не удастся.

    important

    Каждый раз, когда вы создаёте и сохраняете новое подключение через SSH-туннель, dbt platform генерирует уникальную пару SSH-ключей, даже если параметры подключения полностью совпадают с параметрами существующего подключения.

О бастионном сервере в AWS​

Что такое бастионный сервер?

Бастионный сервер в Amazon Web Services (AWS) — это хост, который позволяет dbt устанавливать SSH-соединение.


dbt только отправляет запросы и не передаёт большие объёмы данных. Это означает, что бастионный сервер может работать на инстансе AWS любого размера, например t2.small или t2.micro.

Убедитесь, что инстанс расположен в той же Virtual Private Cloud (VPC), что и экземпляр Redshift, и что для группы безопасности bastion‑сервера настроены правила, позволяющие подключаться к порту хранилища данных.

Настройка bastion‑сервера в AWS​

Чтобы настроить SSH-туннель в dbt, вам потребуется указать имя хоста или IP-адрес вашего бастионного сервера, имя пользователя и выбранный вами порт, к которому будет подключаться dbt. Выполните следующие действия:

  1. Убедитесь, что правила сетевой безопасности бастионного сервера разрешают подключения с IP-адресов dbt через настроенный вами порт.

  2. Настройте учетную запись пользователя с помощью интерфейса командной строки (CLI) экземпляра бастионного сервера. В следующем примере используется имя пользователя dbtcloud:

    sudo groupadd dbtcloud
    sudo useradd -m -g dbtcloud dbtcloud
    sudo su - dbtcloud
    mkdir ~/.ssh
    chmod 700 ~/.ssh
    touch ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
  3. Скопируйте открытый ключ, сгенерированный dbt, и вставьте его в файл authorized_keys.

Теперь бастионный сервер должен быть готов к использованию dbt в качестве туннеля для подключения к среде Redshift.

Конфигурация​

Чтобы оптимизировать производительность с помощью настроек, специфичных для платформы данных, в dbt, обратитесь к разделу Конфигурация для Redshift.

FAQs​

 Ошибка базы данных - не удалось подключиться к серверу: время ожидания подключения истекло

Нашли ошибку?

0
Loading