Хранение подключений и переменных Apache Airflow™ в Yandex Lockbox
При работе с Yandex Managed Service for Apache Airflow™ вы можете использовать Yandex Lockbox для хранения артефактов, которые могут использоваться в DAG-файлах: подключений, переменных и конфигурационных данных. Yandex Lockbox интегрируется в Managed Service for Apache Airflow™ через провайдер Yandex Lockbox Secret Backend
Ниже рассматривается направленный ациклический граф (DAG), выполняющий SQL-запрос SELECT 1;
к БД в кластере Yandex Managed Service for PostgreSQL. Данные для подключения к БД хранятся в Yandex Lockbox и автоматически подставляются в граф.
Чтобы использовать конфигурационные данные из секрета Yandex Lockbox в графе:
- Подготовьте инфраструктуру.
- Создайте секрет Yandex Lockbox.
- Подготовьте DAG-файл и запустите граф.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте инфраструктуру
-
Создайте сервисный аккаунт
airflow-sa
с ролями:managed-airflow.integrationProvider
;lockbox.payloadViewer
.
Роль
lockbox.payloadViewer
не обязательно выдавать на весь каталог. Достаточно назначить ее на конкретный секрет Yandex Lockbox после его создания. -
Создайте бакет Object Storage с произвольными настройками.
-
Отредактируйте ACL созданного бакета так, чтобы у сервисного аккаунта
airflow-sa
было разрешениеREAD
. -
Создайте кластер Managed Service for Apache Airflow™ с параметрами:
- Сервисный аккаунт —
airflow-sa
; - Имя бакета — имя созданного бакета.
- Использовать Lockbox Secret Backend — убедитесь, что эта опция включена.
- Сервисный аккаунт —
-
Создайте кластер Managed Service for PostgreSQL с параметрами:
- Имя БД —
db1
; - Имя пользователя —
user1
; - Пароль —
user1-password
.
- Имя БД —
Создайте секрет Yandex Lockbox
Для корректной работы кластера Apache Airflow™ секрет в Yandex Lockbox должен иметь имя в формате airflow/<тип_артефакта>/<идентификатор_артефакта>
, где:
<тип_артефакта>
— тип артефакта, который будет храниться в секрете. Доступны следующие типы:connections
— подключения;variables
— переменные;config
— данные конфигурации.
<идентификатор_артефакта>
— идентификатор, который будет использован для обращения к артефакту в Apache Airflow™.
Создайте секрет Yandex Lockbox с параметрами:
-
Имя —
airflow/connections/pg
. -
Тип секрета —
Пользовательский
. -
Ключ —
airflow/connections/pg
. -
Значение — выберите Текст и укажите следующее содержимое:
{ "conn_type": "postgres", "host": "<FQDN_хоста_кластера_PostgreSQL>", "port": 6432, "schema": "db1", "login": "user1", "password": "user1-password" }
В секрете будут сохранены данные для подключения к БД в кластере Managed Service for PostgreSQL.
Подробнее о том, как узнать FQDN хоста кластера PostgreSQL, см. в документации.
Подготовьте DAG-файл и запустите граф
-
Создайте локально файл с именем
test_lockbox_connection.py
и скопируйте в него скрипт:from airflow import DAG from airflow.providers.postgres.operators.postgres import PostgresOperator from datetime import datetime with DAG( dag_id='test_lockbox_connection', start_date=datetime(2024, 4, 19), schedule="@once", catchup=False, ) as dag: check_conn = PostgresOperator( task_id="check_conn", postgres_conn_id='pg', sql="SELECT 1;", )
-
Загрузите DAG-файл
test_lockbox_connection.py
в созданный ранее бакет. В результате одноименный граф появится в веб-интерфейсе Apache Airflow™ автоматически. -
Убедитесь, что в разделе DAGs появился новый граф
test_lockbox_connection
.Загрузка DAG-файла из бакета может занять несколько минут.
-
Чтобы запустить граф, в строке с его именем нажмите кнопку .
Проверьте результат
Чтобы проверить результат в веб-интерфейсе Apache Airflow™:
- В разделе DAGs откройте граф
test_lockbox_connection
. - Перейдите в раздел Graph.
- Выберите задание check_conn.
- Перейдите в раздел Logs.
- Убедитесь, что в логах есть строка
Rows affected: 1
. Это значит, что запрос выполнен успешно.
Удалите созданные ресурсы
Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них: