Ответ
В 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) Ответ 18+ 🔞
А, слушай, про эти ваши коннекшены в Airflow! Это ж, блядь, просто гениальная штука, чтобы не выносить себе мозг и не серить секретами по всему коду. Представь: у тебя куча DAG'ов, и каждому надо в базу данных ткнуться. И что, ты в каждый скрипт пароль впишешь? Да ты ж потом, когда его менять надо будет, обосрёшься, блядь, с этими поисками! А если в гит зальёшь — вообще писец, тебя хакеры разденут как липку.
Вот для этого и придумали Connections. Это такая, понимаешь, центральная сберкасса для твоих логинов, паролей, токенов и прочей конфиденциальной хуйни. Всё это дело шифруется и прячется в метабазу Airflow. Управлять можно через веб-морду, через командную строку или даже переменными окружения. Главное — в коде DAG'а этой ерунды уже нет!
Ну и в чём, блядь, профит?
- Не спалишься: Секреты не болтаются в коде, который ты потом в гит суёшь. Никаких
password = 'qwerty123'на всеобщее обозрение, ёпта! - Всё в одном месте: Не надо бегать по ста DAG'ам, когда сменился пароль от продовой базы. Зашёл в админку, ткнул пару раз — и все твои задачи уже используют новые данные. Красота, блядь!
- Одна настройка — много пользы: Создал подключение к своей PostgreSQL раз — и двадцать разных DAG'ов могут на него ссылаться. Не нужно двадцать раз одно и то же вбивать.
- Абстракция, мать её: Разработчик пишет DAG и думает: "Мне надо в базу
my_postgres_db". А какая там база, на каком хосте и под каким юзером — его вообще не ебёт! Это уже забота админа или девопса. Идеальное разделение труда, в рот меня чих-пых!
Как этим пользоваться, на живом примере
Допустим, ты в интерфейсе 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)
Видишь? Никаких паролей в коде! Только этот самый conn_id. Всё чисто, безопасно и удобно. Вообще, ебать, как же это упрощает жизнь, когда проектов много. Раньше бы в каждом скрипте конфиги правил, а теперь — раз и готово. Умные люди придумали, чёрт возьми!