Подключите dbt к Postgres с помощью SSH-бастиона

Мы хотим подключить dbt к Postgres с помощью SSH-бастиона. Я следил за комментариями, оставленными под этой проблемой, но получаю ошибку тайм-аута.

Несколько вопросов:

  1. Как следует profiles.ymlнастроить подключение через SSH? я добавил ssh-host но это не помогло.
  2. Есть ли другие конфигурации, которые мне нужно настроить?

2 ответа

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

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

На Github есть полезное руководство, как это сделать: https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it . -to-the-ssh-agent
Добавить ключи в ~/.ssh/config: добавление ключа RSA без перезаписи .
Мне также пришлось добавить IgnoreUnknown UseKeychain в ~/.ssh/config

Вы используете инструмент командной строки (например, ssh, autossh) для «переадресации» локального порта в удаленное место (хост-бастион).

Чтобы перенаправить локальный порт на хост-бастион, сохраните своего пользователя/хост-бастион/хост базы данных в переменных среды. Я использовал Postgres, поэтому это выглядело так.

      ssh -l $BASTION_USER $BASTION_HOST -p 22 -N -C -L "5432:${POSTGRES_HOST}:5432";

В profiles.yml вместо хоста/порта удаленной базы данных вы указываете локальный хост и номер «пересылающего» порта

Затем в моем ~/.dbt/profiles.yml выглядит это:

      dev:
    type: postgres
    threads: 1
    host: localhost 
    port: 5432
    user: POSTGRES_USER
    pass: POSTGRES_PWD
    dbname: POSTGRES_DB_NAME
    schema: dbt_tmp

Вуаля! Ваше соединение перенаправляется на хост-бастион, аутентифицируется через SSH и передается в базу данных.

В этот момент я побежалdbt debugпротив моей цели, и это связано со всеми пройденными проверками.

Я думаю, вам нужно следовать инструкциям Джереми из этого комментария:

Основная идея, насколько я ее помню:

  • Вы регистрируете открытый SSH-ключ с удаленным местоположением, привязанным к закрытому ключу, который находится на вашем компьютере.
  • Вы используете инструмент командной строки (например, ssh,autossh) для «переадресации» локального порта в удаленное место (хост-бастион).
  • В profiles.yml вместо хоста/порта удаленной базы данных вы указываете локальный хост и номер «пересылающего» порта
  • Вуаля! Ваше соединение перенаправляется на хост-бастион, аутентифицируется через SSH и передается в базу данных.

Справедливости ради, он также просил окончательные пошаговые руководства и предупредил, что это имело разный уровень успеха в зависимости от особенностей клиента, хоста, среды и т. д.

Другие вопросы по тегам