[Документация Yandex Cloud](../../index.md) > [Yandex Lockbox](../index.md) > [Практические руководства](index.md) > Хранение подключений и переменных Apache Airflow™ в Yandex Lockbox

# Хранение подключений и переменных Apache Airflow™ в Yandex Lockbox

# Хранение подключений и переменных Apache Airflow™ в Yandex Lockbox

При работе с Yandex Managed Service for Apache Airflow™ вы можете использовать [Yandex Lockbox](../index.md) для хранения артефактов, которые могут использоваться в DAG-файлах: подключений, переменных и конфигурационных данных. Yandex Lockbox интегрируется в Managed Service for Apache Airflow™ через провайдер [Yandex Lockbox Secret Backend](https://airflow.apache.org/docs/apache-airflow-providers-yandex/stable/secrets-backends/yandex-cloud-lockbox-secret-backend.html). В результате доступ к хранилищу секретов настраивается автоматически.

Ниже рассматривается [направленный ациклический граф (DAG)](../../managed-airflow/concepts/index.md#about-the-service), выполняющий SQL-запрос `SELECT 1;` к БД в кластере Yandex Managed Service for PostgreSQL. Данные для подключения к БД хранятся в Yandex Lockbox и автоматически подставляются в граф.

Чтобы использовать конфигурационные данные из секрета Yandex Lockbox в графе:

1. [Подготовьте инфраструктуру](#create-infrastracture).
1. [Создайте секрет Yandex Lockbox](#create-lockbox-secret).
1. [Подготовьте DAG-файл и запустите граф](#dag).
1. [Проверьте результат](#check-result).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).


## Необходимые платные ресурсы {#paid-resources}

В стоимость поддержки описываемого решения входят:

* Плата за кластер Managed Service for PostgreSQL: вычислительные ресурсы и дисковое пространство ([тарифы Managed Service for PostgreSQL](../../managed-postgresql/pricing.md)).
* Плата за кластер Managed Service for Apache Airflow™: вычислительные ресурсы и дисковое пространство ([тарифы Apache Airflow™](../../managed-airflow/pricing.md)).
* Плата за бакет Object Storage: хранение данных и выполнение операций с ними ([тарифы Object Storage](../../storage/pricing.md)).
* Плата за использование секрета Yandex Lockbox: ([тарифы Yandex Lockbox](../pricing.md)).
* Плата за использование публичных IP-адресов, если для хостов кластеров включен публичный доступ ([тарифы Virtual Private Cloud](../../vpc/pricing.md)).


## Подготовьте инфраструктуру {#create-infrastracture}

1. [Создайте сервисный аккаунт](../../iam/operations/sa/create.md#create-sa) `airflow-sa` с ролями:

   * `managed-airflow.integrationProvider`;
   * `lockbox.payloadViewer`.

   {% note info }

   Роль `lockbox.payloadViewer` не обязательно выдавать на весь каталог. Достаточно [назначить ее на конкретный секрет Yandex Lockbox](../operations/secret-access.md) после [его создания](#create-lockbox-secret).

   {% endnote %}

1. [Создайте бакет Object Storage](../../storage/operations/buckets/create.md) с произвольными настройками.

1. [Отредактируйте ACL](../../storage/operations/buckets/edit-acl.md) созданного бакета так, чтобы у сервисного аккаунта `airflow-sa` было разрешение `READ`.

1. [Создайте кластер Managed Service for Apache Airflow™](../../managed-airflow/operations/cluster-create.md#create-cluster) с параметрами:

   * **Сервисный аккаунт** — `airflow-sa`;
   * **Имя бакета** — имя созданного бакета.
   * **Использовать Lockbox Secret Backend** — убедитесь, что эта опция включена.

1. [Создайте кластер Managed Service for PostgreSQL](../../managed-postgresql/operations/cluster-create.md#create-cluster) с параметрами:

   * **Имя БД** — `db1`;
   * **Имя пользователя** — `user1`;
   * **Пароль** — `user1-password`.

## Создайте секрет Yandex Lockbox {#create-lockbox-secret}

Для корректной работы кластера Apache Airflow™ секрет в Yandex Lockbox должен иметь имя в формате `airflow/<тип_артефакта>/<идентификатор_артефакта>`, где:

   * `<тип_артефакта>` — тип артефакта, который будет храниться в секрете. Доступны следующие типы:
     * `connections` — подключения;
     * `variables` — переменные;
     * `config` — данные конфигурации.
   * `<идентификатор_артефакта>` — идентификатор, который будет использован для обращения к артефакту в Apache Airflow™.

[Создайте секрет Yandex Lockbox](../operations/secret-create.md) с параметрами:

   * **Имя** — `airflow/connections/pg`.
   * **Тип секрета** — `Пользовательский`.
   * **Ключ** — `airflow/connections/pg`.
   * **Значение** — выберите **Текст** и укажите следующее содержимое:

      ```json
      {
        "conn_type": "postgres",
        "host": "<FQDN_хоста_кластера_PostgreSQL>",
        "port": 6432,
        "schema": "db1",
        "login": "user1",
        "password": "user1-password"
      }
      ```

В секрете будут сохранены данные для подключения к БД в кластере Managed Service for PostgreSQL.

Подробнее о том, как узнать FQDN хоста кластера PostgreSQL, смотрите в [документации](../../managed-postgresql/operations/connect/index.md#fqdn).

## Подготовьте DAG-файл и запустите граф {#dag}

1. Создайте локально файл с именем `test_lockbox_connection.py` и скопируйте в него скрипт:

   ```python
   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;",
     )
   ```

1. Загрузите DAG-файл `test_lockbox_connection.py` в созданный ранее бакет. В результате одноименный граф появится в веб-интерфейсе Apache Airflow™ автоматически.

1. [Откройте веб-интерфейс Apache Airflow™](../../managed-airflow/operations/af-interfaces.md#web-gui).

1. Убедитесь, что в разделе **DAGs** появился новый граф `test_lockbox_connection`.

   Загрузка DAG-файла из бакета может занять несколько минут.

1. Чтобы запустить граф, в строке с его именем нажмите кнопку ![image](../../_assets/managed-airflow/trigger-dag.png =18x).

## Проверьте результат {#check-result}

Чтобы проверить результат в веб-интерфейсе Apache Airflow™:

1. В разделе **DAGs** откройте граф `test_lockbox_connection`.
1. Перейдите в раздел **Graph**.
1. Выберите задание **check_conn**.
1. Перейдите в раздел **Logs**.
1. Убедитесь, что в логах есть строка `Rows affected: 1`. Это значит, что запрос выполнен успешно.

## Удалите созданные ресурсы {#clear-out}

Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них:

1. [Сервисный аккаунт](../../iam/operations/sa/delete.md).
1. [Бакет Object Storage](../../storage/operations/buckets/delete.md).
1. [Секрет Yandex Lockbox](../operations/secret-delete.md).
1. [Кластер Managed Service for Apache Airflow™](../../managed-airflow/operations/cluster-delete.md#delete).
1. [Кластер Managed Service for PostgreSQL](../../managed-postgresql/operations/cluster-delete.md#delete).