Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Virtual Private Cloud
  • Начало работы
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Настройки DHCP для работы с корпоративным DNS-сервером
    • Установка виртуального роутера Cisco CSR 1000v
    • Установка виртуального роутера Mikrotik CHR
    • Соединение с облачной сетью при помощи OpenVPN
    • Настройка Cloud DNS для доступа к кластеру Managed Service for ClickHouse® из других облачных сетей
    • Защищенный доступ пользователей к облачным ресурсам на основе WireGuard VPN
    • Создание и настройка шлюза UserGate в режиме прокси-сервера
    • Создание и настройка шлюза UserGate в режиме межсетевого экрана
    • Реализация отказоустойчивых сценариев для сетевых виртуальных машин
    • Создание туннеля между двумя подсетями при помощи OpenVPN Access Server
    • Создание бастионного хоста
    • Миграция кластера Yandex Data Processing с файловой системой HDFS в другую зону доступности
    • Настройка сети для Yandex Data Processing
    • Сеть между каталогами
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
    • Сегментация облачной инфраструктуры с помощью решения Check Point Next-Generation Firewall
    • Подключение к Object Storage из Virtual Private Cloud
    • Подключение к Container Registry из Virtual Private Cloud
    • Использование модулей Yandex Cloud в Terraform
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Организация доступа через Cloud Interconnect к облачным сетям, размещенным за NGFW
    • Автоматизация задач с помощью Managed Service for Apache Airflow™
    • Настройка сетевой связности между подсетями BareMetal и Virtual Private Cloud
  • DDoS Protection
  • Управление доступом
  • Справочник Terraform
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте сервисный аккаунт
  • Создайте облачную сеть и подсети
  • Подготовьте бакет в Object Storage
  • Создайте бакет
  • Настройте ACL для бакета
  • Настройте NAT для доступа в интернет
  • Создайте NAT-шлюз
  • Создайте таблицу маршрутизации
  • Привяжите таблицу маршрутизации к подсети
  • Создайте кластер Managed Service for Apache Airflow™
  • Подготовьте DAG-файл и запустите граф
  • Проверьте результат
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Автоматизация задач с помощью Managed Service for Apache Airflow™

Автоматизация задач Yandex Query с помощью Yandex Managed Service for Apache Airflow™

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте сервисный аккаунт
  • Создайте облачную сеть и подсети
  • Подготовьте бакет в Object Storage
    • Создайте бакет
    • Настройте ACL для бакета
  • Настройте NAT для доступа в интернет
    • Создайте NAT-шлюз
    • Создайте таблицу маршрутизации
    • Привяжите таблицу маршрутизации к подсети
  • Создайте кластер Managed Service for Apache Airflow™
  • Подготовьте DAG-файл и запустите граф
  • Проверьте результат
  • Удалите созданные ресурсы

Managed Service for Apache Airflow™ — это популярный инструмент для автоматизации операций с данными. Yandex Query поддерживает интеграцию с Managed Service for Apache Airflow™ с помощью pip-пакета apache-airflow-providers-yandex.

Чтобы создать инфраструктуру для автоматизации задач Yandex Query c помощью Managed Service for Apache Airflow™, выполните следующие шаги:

  1. Подготовьте облако к работе.
  2. Создайте сервисный аккаунт.
  3. Создайте облачную сеть и подсети.
  4. Подготовьте бакет в Object Storage.
  5. Настройте NAT для доступа в интернет.
  6. Создайте кластер Managed Service for Apache Airflow™.
  7. Подготовьте DAG-файл и запустите граф.
  8. Проверьте результат.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки создаваемой инфраструктуры входит:

  • плата за использование бакета (см. тарифы Yandex Object Storage);
  • плата за использование NAT-шлюза (см. тарифы Yandex Virtual Private Cloud);
  • плата за объем считанных данных (см. тарифы Yandex Query);
  • плата за использование кластера Yandex Managed Service for Apache Airflow™ (см. тарифы Managed Service for Apache Airflow™).

Создайте сервисный аккаунтСоздайте сервисный аккаунт

Создайте сервисный аккаунт airflow-sa с ролью editor на каталог, в котором будет создан кластер Managed Service for Apache Airflow™:

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта: airflow-sa.
  5. Нажмите Добавить роль и выберите роль editor.
  6. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Создайте сервисный аккаунт airflow-sa:

    yc iam service-account create airflow-sa
    

    Результат:

    id: nfersamh4sjq********
    folder_id: b1gc1t4cb638********
    created_at: "2023-09-21T10:36:29.726397755Z"
    name: airflow-sa
    

    Сохраните идентификатор сервисного аккаунта airflow-sa (id) и каталога, в котором его создали (folder_id).

  2. Назначьте сервисному аккаунту роль editor на каталог, указав сохраненные ранее идентификаторы каталога и сервисного аккаунта:

    yc resource-manager folder add-access-binding <идентификатор_каталога> \
      --role editor \
      --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.

Чтобы назначить сервисному аккаунту роль editor на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.

Создайте облачную сеть и подсетиСоздайте облачную сеть и подсети

Все ресурсы, созданные в руководстве, будут относиться к одной облачной сети.

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог.
  2. В списке сервисов выберите Virtual Private Cloud.
  3. Нажмите кнопку Создать сеть.
  4. В поле Имя укажите yq-network.
  5. В поле Дополнительно выберите опцию Создать подсети.
  6. Нажмите кнопку Создать сеть.
  1. Создайте сеть yq-network:

    yc vpc network create yq-network
    

    Результат:

    id: enptrcle5q3d********
    folder_id: b1g9hv2loamq********
    created_at: "2022-04-04T05:25:03Z"
    name: yq-network
    default_security_group_id: enpbsnnop4ak********
    

    Подробнее о команде yc vpc network create см. в справочнике CLI.

  2. Создайте подсети:

    • В зоне доступности ru-central1-a:

      yc vpc subnet create yq-network-ru-central1-a \
        --zone ru-central1-a \
        --network-name yq-network \
        --range 10.1.0.0/16
      

      Результат:

      id: b0c3pte4o2kn********
      folder_id: b1g9hv2loamq********
      created_at: "2022-04-04T09:28:08Z"
      name: yq-network-ru-central1-a
      network_id: enptrcle5q3d********
      zone_id: ru-central1-a
      v4_cidr_blocks:
      - 10.1.0.0/16
      
    • В зоне доступности ru-central1-b:

      yc vpc subnet create yq-network-ru-central1-b \
        --zone ru-central1-b \
        --network-name yq-network \
        --range 10.2.0.0/16
      
    • В зоне доступности ru-central1-d:

      yc vpc subnet create yq-network-ru-central1-d \
        --zone ru-central1-d \
        --network-name yq-network \
        --range 10.3.0.0/16
      

    Подробнее о команде yc vpc subnet create см. в справочнике CLI.

  1. Чтобы создать сеть, воспользуйтесь методом REST API create для ресурса Network или вызовом gRPC API NetworkService/Create.

  2. Чтобы создать подсети, воспользуйтесь методом REST API create для ресурса Subnet или вызовом gRPC API SubnetService/Create.

Подготовьте бакет в Object StorageПодготовьте бакет в Object Storage

Создайте бакетСоздайте бакет

Консоль управления
AWS CLI
API
  1. В консоли управления выберите каталог.
  2. В списке сервисов выберите Object Storage.
  3. Нажмите кнопку Создать бакет.
  4. В поле Имя укажите уникальное имя бакета, например airflow-bucket.
  5. В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
  6. Нажмите кнопку Создать бакет.

Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.

  1. Создайте бакет, указав для него уникальное имя:

    aws --endpoint-url https://storage.yandexcloud.net \
      s3 mb s3://<имя_бакета>
    

    Результат:

    make_bucket: s3://airflow-bucket
    
  2. Включите публичный доступ к чтению объектов и списка объектов в созданном бакете:

    aws --endpoint-url https://storage.yandexcloud.net \
      s3api put-bucket-acl \
      --bucket <имя_бакета> \
      --acl public-read
    

Чтобы создать бакет, воспользуйтесь методом REST API create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.

Настройте ACL для бакетаНастройте ACL для бакета

Отредактируйте ACL созданного бакета так, чтобы у сервисного аккаунта airflow-sa было разрешение READ.

Настройте NAT для доступа в интернетНастройте NAT для доступа в интернет

Создайте NAT-шлюзСоздайте NAT-шлюз

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог.
  2. В списке сервисов выберите Virtual Private Cloud.
  3. На панели слева выберите Шлюзы.
  4. Нажмите кнопку Создать шлюз и в открывшемся окне:
    1. В поле Имя укажите имя yq-nat.
    2. В поле Тип выберите NAT-шлюз.
    3. Нажмите кнопку Сохранить.

Создайте NAT-шлюз в каталоге по умолчанию:

yc vpc gateway create \
  --name yq-nat

Результат:

id: enpkq1sb7hed********
folder_id: b1g681qpemb4********
created_at: "2024-05-19T13:20:36Z"
name: yq-nat
shared_egress_gateway: {}

Подробнее о команде yc vpc gateway create см. в справочнике CLI.

Сохраните идентификатор (id) NAT-шлюза, он понадобится при создании таблицы маршрутизации.

Чтобы создать NAT-шлюз, воспользуйтесь методом REST API create для ресурса Gateway или вызовом gRPC API GatewayService/Create.

Создайте таблицу маршрутизацииСоздайте таблицу маршрутизации

Консоль управления
Yandex Cloud CLI
API
  1. На панели слева выберите Таблицы маршрутизации.
  2. Нажмите кнопку Создать таблицу маршрутизации и введите параметры таблицы маршрутизации:
    1. Введите имя yq-route-table.
    2. Выберите сеть yq-network.
    3. Нажмите кнопку Добавить маршрут.
      • В поле Next hop выберите Шлюз.
      • В поле Шлюз выберите NAT-шлюз yq-nat. Префикс назначения заполнится автоматически.
    4. Нажмите кнопку Добавить.
  3. Нажмите кнопку Создать таблицу маршрутизации.

Создайте таблицу маршрутизации с NAT-шлюзом yq-nat в качестве next hop и префиксом назначения 0.0.0.0/0:

yc vpc route-table create \
  --name=yq-route-table \
  --network-name=yq-network \
  --route destination=0.0.0.0/0,gateway-id=<идентификатор_NAT-шлюза>

Результат:

id: enp4v8foko6s********
folder_id: b1g681qpemb4********
created_at: "2024-05-19T13:22:47Z"
name: yq-route-table
network_id: enppoggov6ub********
static_routes:
  - destination_prefix: 0.0.0.0/0
    gateway_id: enpkq1sb7hed********

Подробнее о команде yc vpc route-table create см. в справочнике CLI.

Чтобы создать таблицу маршрутизации, воспользуйтесь методом REST API create для ресурса RouteTable или вызовом gRPC API RouteTableService/Create.

Привяжите таблицу маршрутизации к подсетиПривяжите таблицу маршрутизации к подсети

Привяжите таблицу маршрутизации к одной из подсетей, чтобы направить трафик подсети через NAT-шлюз:

Консоль управления
Yandex Cloud CLI
API
  1. На панели слева выберите Подсети.
  2. В строке подсети yq-network-ru-central1-a нажмите кнопку .
  3. Нажмите Привязать таблицу маршрутизации и выберите таблицу yq-route-table.
  4. Нажмите кнопку Привязать.

Выполните команду:

yc vpc subnet update yq-network-ru-central1-a \
  --route-table-name=yq-route-table

Результат:

id: e9b6n3jj3gh6********
folder_id: b1g681qpemb4********
created_at: "2024-05-19T13:24:58Z"
name: yq-network-ru-central1-a
network_id: enppoggov6ub********
zone_id: ru-central1-a
v4_cidr_blocks:
  - 10.1.0.0/16
route_table_id: enp4v8foko6s********
dhcp_options: {}

Подробнее о команде yc vpc subnet update см. в справочнике CLI.

Чтобы привязать таблицу маршрутизации к подсети, воспользуйтесь методом REST API update для ресурса Subnet или вызовом gRPC API SubnetService/Update.

Важно

Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре updateMask (одной строкой через запятую).

Создайте кластер Managed Service for Apache Airflow™Создайте кластер Managed Service for Apache Airflow™

Консоль управления
  1. В консоли управления выберите каталог, в котором нужно создать кластер.

  2. Выберите сервис Managed Service for Apache Airflow™.

  3. Нажмите кнопку Создать кластер.

  4. В блоке Базовые параметры укажите имя кластера. Имя должно быть уникальным в рамках каталога.

  5. В блоке Настройки доступа задайте пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:

    • одну заглавную букву;
    • одну строчную букву;
    • одну цифру;
    • один специальный символ.

    Примечание

    Сохраните пароль локально или запомните его. Сервис не показывает пароли после создания.

  6. В блоке Сетевые настройки выберите:

    • зону доступности ru-central1-a;

    • облачную сеть yq-network;

    • подсеть yq-network-ru-central1-a;

    • группу безопасности по умолчанию.

      Настройки группы безопасности не влияют на доступ к веб-интерфейсу Apache Airflow™.

  7. В блоке Зависимости укажите название pip-пакета и ограничение на его версии:

    apache-airflow-providers-yandex>=3.10
    
  8. В блоке Хранилище DAG-файлов выберите созданный ранее бакет.

  9. Нажмите кнопку Создать.

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

Ниже используется направленный ациклический граф (DAG) с двумя вершинами:

  • yq_operator — выполняет простой запрос к Yandex Query;
  • output_operator — выводит результат выполнения вершины yq_operator.

Чтобы подготовить DAG:

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

    yq_dag.py
    import datetime
    
    from airflow.models.dag import DAG
    from airflow.providers.yandex.operators.yq import YQExecuteQueryOperator
    from airflow.operators.python_operator import PythonOperator
    
    with DAG(
        dag_id="yq_hello_world_operator",
        schedule_interval="@hourly",
        start_date=datetime.datetime.now(),
    ) as dag:
    
        yq_operator = YQExecuteQueryOperator(
            task_id="yq_operator", sql="SELECT 'Hello, world!'"
        )
    
        def print_context(ds=None, **kwargs):
            ti = kwargs["ti"]
            print(ti.xcom_pull(task_ids="yq_operator"))
    
        output_operator = PythonOperator(
            task_id="output_operator", provide_context=True, python_callable=print_context
        )
    
        yq_operator >> output_operator
    
    if __name__ == "__main__":
        dag.test()
    
  2. Загрузите DAG в кластер Managed Service for Apache Airflow™. Для этого создайте в бакете airflow-bucket папку files/dags и загрузите в нее файл yq_dag.py.

  3. Откройте веб-интерфейс Apache Airflow™.

  4. Убедитесь, что в разделе DAGs появился новый DAG yq_hello_world_operator.

    Примечание

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

  5. Чтобы запустить DAG, в строке с его именем сначала нажмите кнопку image, затем — Trigger DAG.

Проверьте результатПроверьте результат

  1. В разделе DAGs откройте граф yq_hello_world_operator.
  2. Перейдите в раздел Grid.
  3. Выберите задание yq_operator.
  4. Перейдите в раздел XCom.
  5. Убедитесь, что в строке return_value есть элемент 'rows': [['Hello, world!']]. Это значит, что запрос выполнен успешно.

Удалите созданные ресурсыУдалите созданные ресурсы

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

  1. Удалите бакет Object Storage.
  2. Отвяжите и удалите таблицу маршрутизации.
  3. Удалите NAT-шлюз.
  4. Удалите кластер Apache Airflow™.
  5. При необходимости удалите подсети, сеть и сервисный аккаунт.

Была ли статья полезна?

Предыдущая
Организация доступа через Cloud Interconnect к облачным сетям, размещенным за NGFW
Следующая
Настройка сетевой связности между подсетями BareMetal и Virtual Private Cloud
Проект Яндекса
© 2025 ООО «Яндекс.Облако»