Errors
Apache Airflow

Apache Airflow: Airflow s3 connection using UI

Ты заходишь в Airflow UI, чтобы добавить S3 коннектор, и понимаешь — интерфейс намекает, что ты должен уже знать, как он работает. Поля Host, Schema, Login смот

Ты заходишь в Airflow UI, чтобы добавить S3 коннектор, и понимаешь — интерфейс намекает, что ты должен уже знать, как он работает. Поля Host, Schema, Login смотрят на тебя пустотой, а в документации лишь намёки. Знакомо? Это обычный день.

Дело не в тебе. UI для коннекторов и правда сделан для тех, кто уже в теме. Но разобраться — дело пяти минут.

Быстрый ответ (TLDR)

Создаёшь новый коннектор. Заполняешь так:

Conn Id: my_conn_S3 (или любое имя, которое будешь использовать в коде) Conn Type: S3 Extra: Всё самое важное летит сюда одним JSON-объектом.

{"aws_access_key_id":"_your_aws_access_key_id_", "aws_secret_access_key": "_your_aws_secret_access_key_"}

Поля Host, Schema, Login, Port — оставляешь пустыми. Сохраняешь. Работает.

Подробно и по шагам

Идёшь в Admin -> Connections. Жмёшь +.

В форме вводишь Conn Id. Это твой уникальный ключ для доступа к этому коннекту из дага. Выбираешь S3 из выпадающего списка Conn Type.

А теперь главный трюк. Поле Extra — это не просто текстовое поле. Это JSON, куда складываются все специфичные для коннекта параметры. Для S3 это твои AWS ключи.

Копируешь JSON из примера выше, подставляешь свои aws_access_key_id и aws_secret_access_key. Всё остальное в форме можно игнорировать.

А как это потом использовать?

В коде дага просто ссылаешься на conn_id. Например, в сенсоре или операторе.

from airflow.providers.amazon.aws.sensors.s3 import S3KeySensor

s3_sensor = S3KeySensor(
    task_id='check_s3_for_file',
    bucket_name='my-data-bucket',
    bucket_key='data/*.csv',
    aws_conn_id='my_conn_S3',  # Вот он, наш conn_id
    timeout=18*60*60,
    poke_interval=120,
)

Запускаешь даг — он будет использовать ключи из коннектора для доступа к бакету.

Но это же небезопасно?

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

Поэтому лучший путь — использовать поля Login и Password в той же форме коннектора. В Login кладёшь aws_access_key_id, в Passwordaws_secret_access_key. Поле Extra оставляешь пустым или используешь для других параметров, например {"region_name": "us-east-1"}.

Система так же сработает, но это уже чуть безопаснее, так как поле Password в интерфейсе маскируется. В идеале — использовать внешние системы для секретов, вроде HashiCorp Vault или облачных KMS, но это уже тема для отдельного разговора.

Итог

S3-коннектор настраивается через поле Extra или через связку Login/Password. UI недружелюбен, но логичен. Главное — понять принцип: общие данные в основные поля, специфичные для провайдера — в Extra JSON.

Проверяешь коннекцию простым дагом-сенсором. Если не работает — смотри логи шедулера. И помни про безопасность — открытый секретный ключ в базе это как оставить ключи от склада под ковриком.