Ответ
В Apache Airflow Connections — это централизованный и безопасный способ хранения учетных данных (логинов, паролей, токенов, хостов) для подключения к внешним системам, таким как базы данных, облачные сервисы или API.
Они хранятся в зашифрованном виде в метабазе Airflow и управляются через UI, CLI или переменные окружения, что позволяет избежать жесткого кодирования секретов в коде DAG.
Ключевые преимущества
- Безопасность: Секреты не хранятся в коде и не попадают в системы контроля версий.
- Централизованное управление: Все подключения настраиваются в одном месте, что упрощает их обновление и аудит.
- Переиспользование: Одно и то же подключение может использоваться в множестве DAG.
- Абстракция: Разработчикам DAG не нужно знать конкретные учетные данные; они просто ссылаются на соединение по его
Conn Id
.
Пример использования в DAG
Сначала подключение создается в UI Airflow (Admin -> Connections) с Conn Id
= my_postgres_db
.
Затем в коде DAG оно используется для выполнения запроса с помощью хука:
from airflow.providers.postgres.hooks.postgres import PostgresHook
from airflow.decorators import task
@task
def get_data_from_postgres():
"""Извлекает данные из PostgreSQL, используя предопределенное подключение."""
# Хук автоматически подтягивает креды из Connection с ID 'my_postgres_db'
postgres_hook = PostgresHook(postgres_conn_id="my_postgres_db")
connection = postgres_hook.get_conn()
cursor = connection.cursor()
cursor.execute("SELECT * FROM users LIMIT 10;")
records = cursor.fetchall()
for record in records:
print(record)