# Подключение PostgreSQL, Lakebase и AlloyDB

Платформа dbt

Платформа dbt поддерживает подключение к PostgreSQL и базам данных, совместимым с Postgres (AlloyDB, Lakebase).

Платформа dbt поддерживает подключение к PostgresSQL и Postgres-совместимым базам данных (AlloyDB, Lakebase).

Следующие поля являются обязательными при создании подключения:

| Поле        | Описание                                                                                                                                                                                                                                            | Примеры                                 |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| Имя хоста   | Имя хоста базы данных, к которой нужно подключиться. Это может быть имя хоста или IP-адрес. Подробности для конкретного адаптера см. на [страницах настройки](https://docs.getdbt.tech/docs/local/connect-data-platform/about-dbt-connections.md). | Postgres: `xxx.us-east-1.amazonaws.com` |
| Порт        | Обычно 5432                                                                                                                                                                                                                                         | `5439`                                  |
| База данных | Логическая база данных, к которой нужно подключиться и в которой будут выполняться запросы.                                                                                                                                                         | `analytics`                             |

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

[![Настройка подключения к Postgres](/img/docs/dbt-platform/platform-configuring-dbt-platform/postgres-redshift-connection.png?v=2 "Настройка подключения к Postgres")](#)Настройка подключения к Postgres

Для аутентификации пользователи могут использовать **имя пользователя и пароль базы данных** для Postgres и Postgres-совместимых баз данных. Подробнее о поддерживаемых возможностях, ограничениях и полезных рекомендациях см. на странице настройки конкретной базы данных.

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

В следующей таблице приведены параметры подключения к базе данных с использованием пароля.

| Поле       | Описание                                            | Примеры      |
| ---------- | --------------------------------------------------- | ------------ |
| `user`     | Имя пользователя учетной записи для входа в кластер | myuser       |
| `password` | Пароль для аутентификации                           | \_password1! |

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

Используйте SSH-туннель, если ваш экземпляр Postgres или AlloyDB недоступен из общедоступной сети и доступ к нему должен осуществляться через [бастионный сервер](https://docs.getdbt.tech/docs/platform/connect-data-platform/connect-redshift.md#about-the-bastion-server-in-aws). Если эта функция включена, dbt platform подключается к вашей базе данных, сначала устанавливая защищённое соединение с бастионным сервером, который затем перенаправляет трафик в вашу базу данных.

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

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

[![Открытый ключ генерируется после сохранения](/img/docs/dbt-platform/platform-configuring-dbt-platform/postgres-redshift-ssh-tunnel.png?v=2 "Открытый ключ генерируется после сохранения")](#)Открытый ключ генерируется после сохранения

5. Нажмите **Save**. dbt platform сгенерирует и отобразит открытый ключ.

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

   important

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

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

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

Бастионный сервер в [Amazon Web Services (AWS)](https://aws.amazon.com/blogs/security/how-to-record-ssh-sessions-established-through-a-bastion-host/) — это хост, который позволяет dbt устанавливать SSH-соединение.

<br />

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

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

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

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

1. Убедитесь, что правила сетевой безопасности бастионного сервера разрешают подключения с [IP-адресов dbt](https://docs.getdbt.tech/docs/platform/about-platform/access-regions-ip-addresses.md) через настроенный вами порт.

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

   ```shell
   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 в качестве туннеля для подключения к среде Postgres.

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

## Частые вопросы

 Ошибка базы данных — не удалось подключиться к серверу: Connection timed out

При настройке подключения к базе данных через SSH-туннель необходимы следующие компоненты:

* Балансировщик нагрузки (например, ELB или NLB) для управления трафиком.
* Bastion host (или jump server), на котором работает SSH-протокол и который служит защищенной точкой входа.
* Сама база данных (например, кластер Postgres).

dbt использует SSH-туннель для подключения к базе данных через балансировщик нагрузки. Это соединение устанавливается в начале каждого запуска задания dbt. Если соединение через туннель обрывается, задание завершается с ошибкой.

* Демон SSH разрывает соединение, если оно слишком долго неактивно.
* Балансировщик нагрузки разрывает соединение, если оно неактивно.
* dbt пытается поддерживать соединение, отправляя проверочные запросы каждые 30 секунд, а система разрывает соединение, если служба SSH не отвечает в течение 300 секунд. Это помогает избежать разрывов из-за неактивности, если только тайм-аут балансировщика нагрузки не составляет менее 30 секунд.

Чтобы предотвратить преждевременные разрывы соединения, можно изменить настройки на bastion host:

* `ClientAliveCountMax` — определяет количество проверок перед тем, как клиент считается неактивным. Например, `ClientAliveCountMax 10` означает 10 проверок.
* `ClientAliveInterval` — определяет интервал проверки активности клиента. Например, `ClientAliveInterval 30` выполняет проверку каждые 30 секунд.

Эти примеры настроек обеспечивают отключение неактивных SSH-клиентов примерно через 300 секунд, снижая вероятность сбоев SSH-туннеля.
