Создание кластера Apache Airflow™
Каждый кластер Managed Service for Apache Airflow™ состоит из набора компонентов Apache Airflow™, каждый из которых может быть представлен в нескольких экземплярах. Экземпляры могут находиться в разных зонах доступности.
Роли для создания кластера
Для создания кластера Managed Service for Apache Airflow™ вашему аккаунту в Yandex Cloud нужны роли:
- managed-airflow.editor — чтобы создать кластер;
- vpc.user — чтобы работать с сетью кластера;
- iam.serviceAccounts.user — чтобы привязать сервисный аккаунт к кластеру.
Сервисному аккаунту кластера должна быть назначена роль managed-airflow.integrationProvider. Это даст кластеру нужные права для работы с пользовательскими ресурсами. Подробнее см. в разделе Имперсонация.
О назначении ролей читайте в документации Yandex Identity and Access Management.
Создать кластер
-
В консоли управления
выберите каталог, в котором нужно создать кластер. -
Выберите сервис Managed Service for Apache Airflow™.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
- Введите имя кластера. Имя должно быть уникальным в рамках каталога.
- (Опционально) Введите описание кластера.
- (Опционально) Создайте метки:
- Нажмите кнопку Добавить метку.
- Введите метку в формате
ключ: значение. - Нажмите Enter.
-
В блоке Настройки доступа:
-
Задайте пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:
- одну заглавную букву;
- одну строчную букву;
- одну цифру;
- один специальный символ.
Примечание
Сохраните пароль локально или запомните его. Сервис не показывает пароли после создания.
-
Выберите существующий сервисный аккаунт или создайте новый.
Сервисному аккаунту должна быть назначена роль
managed-airflow.integrationProvider.
-
-
В блоке Сетевые настройки выберите:
-
Зоны доступности для размещения кластера.
-
Облачную сеть.
-
Подсеть в каждой из выбранных зон доступности.
Чтобы только кластер Apache Airflow™ мог подключаться к вашим ресурсам, создайте для кластера отдельные подсети и не размещайте в них какие-либо другие ресурсы.
Убедитесь, что выполняются следующие условия для подсетей:
- Диапазон IP-адресов каждой подсети в сети кластера (включая подсети, не назначенные кластеру) не пересекается с диапазоном адресов 10.248.0.0/13 служебной сети.
- Диапазон каждой подсети кластера включает не менее
2 × Nсвободных IP-адресов, гдеN— это суммарное количество экземпляров всех компонентов: веб-сервера, планировщика, воркеров и службы Triggerer.
Подробнее см. в разделе Требования к подсетям кластера.
-
Группу безопасности для сетевого трафика кластера.
Настройки группы безопасности не влияют на доступ к веб-интерфейсу Apache Airflow™.
-
-
Задайте количество экземпляров и конфигурацию вычислительных ресурсов для компонентов Managed Service for Apache Airflow™:
-
веб-сервера;
-
планировщика;
-
воркеров;
Примечание
Если очередь задач пуста, количество воркеров будет равно минимальному значению. При появлении задач количество воркеров будет увеличиваться вплоть до максимального значения.
-
dag-процессора;
Важно
Компонент DAG-процессор доступен в версии Apache Airflow™ 3.0 и выше.
-
(опционально) службы Triggerer.
-
-
(Опционально) В блоке Зависимости укажите названия pip- и deb-пакетов, чтобы установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов.
Чтобы указать более одного пакета, нажмите кнопку Добавить.
При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
pandas==2.0.2 scikit-learn>=1.0.0 clickhouse-driver~=0.2.0Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов.Важно
Для установки pip- и deb-пакетов из публичных репозиториев необходимо в блоке Сетевые настройки указать сеть с настроенным NAT в интернет.
-
В блоке Хранилище DAG-файлов выберите существующий бакет или создайте новый. В этом бакете будут храниться DAG-файлы.
Сервисному аккаунту кластера должно быть предоставлено разрешение
READдля этого бакета. -
(Опционально) В блоке Дополнительные настройки:
-
Выберите время технического обслуживания кластера:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Включите защиту кластера от удаления.
-
-
(Опционально) В блоке Конфигурация Airflow:
-
Задайте дополнительные свойства Apache Airflow™
, например: ключ —api.maximum_page_limit, значение —150.Заполните поля вручную или загрузите конфигурацию из файла (см. пример конфигурационного файла
). -
Включите опцию Использовать Lockbox Secret Backend, чтобы использовать секреты в сервисе Yandex Lockbox для хранения конфигурационных данных, переменных и параметров подключений Apache Airflow™.
Чтобы извлечь нужную информацию из секрета, сервисный аккаунт кластера должен иметь роль
lockbox.payloadViewer.Эту роль можно назначить как на уровне всего каталога, так и на уровне отдельного секрета.
-
-
(Опционально) В блоке Логирование включите запись логов. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Задайте параметры логирования:
-
В поле Назначение укажите, куда будут записываться логи:
- Каталог — выберите каталог. Логи будут записываться в лог-группу по умолчанию для этого каталога.
- Лог-группа — выберите пользовательскую лог-группу или создайте новую.
-
Выберите минимальный уровень логирования:
TRACE,DEBUG,INFO(значение по умолчанию),WARN,ERRORилиFATAL.
-
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать кластер Managed Service for Apache Airflow™:
-
Посмотрите описание команды CLI для создания кластера:
yc managed-airflow cluster create --help -
Укажите параметры кластера в команде создания (в примере приведены не все доступные параметры):
yc managed-airflow cluster create \ --name <имя_кластера> \ --description <описание_кластера> \ --labels <список_меток> \ --admin-password <пароль_администратора> \ --service-account-id <идентификатор_сервисного_аккаунта> \ --subnet-ids <идентификаторы_подсетей> \ --security-group-ids <идентификаторы_групп_безопасности> \ --webserver count=<количество_экземпляров>,` `resource-preset-id=<идентификатор_ресурсов> \ --scheduler count=<количество_экземпляров>,` `resource-preset-id=<идентификатор_ресурсов> \ --worker min-count=<минимальное_количество_экземпляров>,` `max-count=<максимальное_количество_экземпляров>,` `resource-preset-id=<идентификатор_ресурсов> \ --triggerer count=<количество_экземпляров>,` `resource-preset-id=<идентификатор_ресурсов> \ --dag-processor count=<количество_экземпляров>,` `resource-preset-id=<идентификатор_ресурсов> \ --deb-packages <список_deb-пакетов> \ --pip-packages <список_pip-пакетов> \ --dags-bucket <имя_бакета> \ --maintenance-window type=<тип_технического_обслуживания>,` `day=<день_недели>,` `hour=<час_дня> \ --deletion-protection \ --lockbox-secrets-backend \ --airflow-config <список_свойств> \ --log-enabled \ --log-folder-id <идентификатор_каталога> \ --log-min-level <уровень_логирования>Где:
-
--name— имя кластера. -
--description— описание кластера. -
--labels— список меток. Метки задаются в формате<ключ>=<значение>. -
--admin-password— пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:- одну заглавную букву;
- одну строчную букву;
- одну цифру;
- один специальный символ.
-
--service-account-id— идентификатор сервисного аккаунта.
-
--subnet-ids— список идентификаторов подсетей.Чтобы только кластер Apache Airflow™ мог подключаться к вашим ресурсам, создайте для кластера отдельные подсети и не размещайте в них какие-либо другие ресурсы.
Убедитесь, что выполняются следующие условия для подсетей:
- Диапазон IP-адресов каждой подсети в сети кластера (включая подсети, не назначенные кластеру) не пересекается с диапазоном адресов 10.248.0.0/13 служебной сети.
- Диапазон каждой подсети кластера включает не менее
2 × Nсвободных IP-адресов, гдеN— это суммарное количество экземпляров всех компонентов: веб-сервера, планировщика, воркеров и службы Triggerer.
Подробнее см. в разделе Требования к подсетям кластера.
-
--security-group-ids— список идентификаторов групп безопасности. -
--webserver,--scheduler,--worker,--triggerer,--dag-processor— конфигурация компонентов Managed Service for Apache Airflow™:-
count— количество экземпляров в кластере для веб-сервера, планировщика, DAG-процессора и Triggerer. -
min-count,max-count— минимальное и максимальное количество экземпляров в кластере для воркера. -
resource-preset-id— идентификатор вычислительных ресурсов веб-сервера, планировщика, DAG-процессора, воркера и службы Triggerer. Возможные значения:c1-m2— 1 vCPU, 2 ГБ RAM.c1-m4— 1 vCPU, 4 ГБ RAM.c2-m4— 2 vCPU, 4 ГБ RAM.c2-m8— 2 vCPU, 8 ГБ RAM.c4-m8— 4 vCPU, 8 ГБ RAM.c4-m16— 4 vCPU, 16 ГБ RAM.c8-m16— 8 vCPU, 16 ГБ RAM.c8-m32— 8 vCPU, 32 ГБ RAM.
Важно
Компонент DAG-процессор доступен в версии Apache Airflow™ 3.0 и выше.
-
-
--deb-packages,--pip-packages— списки deb- и pip-пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов.При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
--pip-packages "pandas==2.0.2,scikit-learn>=1.0.0,clickhouse-driver~=0.2.0"Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
--dags-bucket— имя бакета, в котором будут храниться DAG-файлы. -
--maintenance-window— настройки времени технического обслуживания (в т. ч. для выключенных кластеров), гдеtype— тип технического обслуживания:anytime(по умолчанию) — в любое время.weekly— по расписанию. Для этого значения дополнительно укажите:day— день недели:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC: от1до24.
-
--deletion-protection— включает защиту кластера от непреднамеренного удаления.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
--lockbox-secrets-backend— включает использование секретов в сервисе Yandex Lockbox для хранения конфигурационных данных, переменных и параметров подключений Apache Airflow™. -
--airflow-config— дополнительные свойства Apache Airflow™ . Задаются в формате<раздел_конфигурации>.<ключ>=<значение>, например:--airflow-config core.load_examples=False -
Параметры логирования:
-
--log-enabled— включает логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. -
--log-folder-id— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога. -
--log-group-id— идентификатор пользовательской лог-группы. Логи будут записываться в нее.Укажите один из двух параметров:
--log-folder-idлибо--log-group-id. -
--log-min-level— минимальный уровень логирования. Возможные значения:TRACE,DEBUG,INFO(значение по умолчанию),WARN,ERRORиFATAL.
-
-
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for Apache Airflow™:
-
Опишите в конфигурационном файле создаваемые ресурсы:
-
Кластер Managed Service for Apache Airflow™ — описание кластера.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_airflow_cluster" "<имя_кластера>" { name = "<имя_кластера>" description = "<описание_кластера>" labels = { <список_меток> } admin_password = "<пароль_администратора>" service_account_id = "<идентификатор_сервисного_аккаунта>" subnet_ids = ["<список_идентификаторов_подсетей>"] security_group_ids = ["<список_идентификаторов_групп_безопасности>"] webserver = { count = <количество_экземпляров> resource_preset_id = "<идентификатор_ресурсов>" } scheduler = { count = <количество_экземпляров> resource_preset_id = "<идентификатор_ресурсов>" } worker = { min_count = <минимальное_количество_экземпляров> max_count = <максимальное_количество_экземпляров> resource_preset_id = "<идентификатор_ресурсов>" } triggerer = { count = <количество_экземпляров> resource_preset_id = "<идентификатор_ресурсов>" } dag_processor = { count = <количество_экземпляров> resource_preset_id = "<идентификатор_ресурсов>" } pip_packages = ["список_pip-пакетов"] deb_packages = ["список_deb-пакетов"] code_sync = { s3 = { bucket = "<имя_бакета>" } } maintenance_window = { type = "<тип_технического_обслуживания>" day = "<день_недели>" hour = <час_дня> } deletion_protection = <защита_от_удаления> lockbox_secrets_backend = { enabled = <использование_секретов> } airflow_config = { <раздел_конфигурации> = { <ключ> = "<значение>" } } logging = { enabled = <использование_логирования> folder_id = "<идентификатор_каталога>" min_level = "<уровень_логирования>" } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }Где:
-
name— имя кластера. -
description— описание кластера. -
labels— список меток. Метки задаются в формате<ключ> = "<значение>". -
admin_password— пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:- одну заглавную букву;
- одну строчную букву;
- одну цифру;
- один специальный символ.
-
service_account_id— идентификатор сервисного аккаунта.
-
subnet_ids— список идентификаторов подсетей.Чтобы только кластер Apache Airflow™ мог подключаться к вашим ресурсам, создайте для кластера отдельные подсети и не размещайте в них какие-либо другие ресурсы.
Убедитесь, что выполняются следующие условия для подсетей:
- Диапазон IP-адресов каждой подсети в сети кластера (включая подсети, не назначенные кластеру) не пересекается с диапазоном адресов 10.248.0.0/13 служебной сети.
- Диапазон каждой подсети кластера включает не менее
2 × Nсвободных IP-адресов, гдеN— это суммарное количество экземпляров всех компонентов: веб-сервера, планировщика, воркеров и службы Triggerer.
Подробнее см. в разделе Требования к подсетям кластера.
-
security_group_ids— список идентификаторов групп безопасности. -
webserver,scheduler,worker,triggerer,dag_processor— конфигурация компонентов Managed Service for Apache Airflow™:-
count— количество экземпляров в кластере для веб-сервера, планировщика, DAG-процессора и Triggerer. -
min_count,max_count— минимальное и максимальное количество экземпляров в кластере для воркера. -
resource_preset_id— идентификатор вычислительных ресурсов веб-сервера, планировщика, DAG-процессора, воркера и Triggerer. Возможные значения:c1-m2— 1 vCPU, 2 ГБ RAM.c1-m4— 1 vCPU, 4 ГБ RAM.c2-m4— 2 vCPU, 4 ГБ RAM.c2-m8— 2 vCPU, 8 ГБ RAM.c4-m8— 4 vCPU, 8 ГБ RAM.c4-m16— 4 vCPU, 16 ГБ RAM.c8-m16— 8 vCPU, 16 ГБ RAM.c8-m32— 8 vCPU, 32 ГБ RAM.
Важно
Компонент DAG-процессор доступен в версии Apache Airflow™ 3.0 и выше.
-
-
deb_packages,pip_packages— списки deb- и pip-пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов.При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
pip_packages = ["pandas==2.0.2","scikit-learn>=1.0.0","clickhouse-driver~=0.2.0"]Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
code_sync.s3.bucket— имя бакета, в котором будут храниться DAG-файлы. -
maintenance_window— настройки времени технического обслуживания (в т. ч. для выключенных кластеров):type— тип технического обслуживания. Принимает значения:ANYTIME— в любое время.WEEKLY— по расписанию.
day— день недели для типаWEEKLY:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC для типаWEEKLY: от1до24.
-
deletion_protection— позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения:trueилиfalse.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
lockbox_secrets_backend.enabled— включает использование секретов в сервисе Yandex Lockbox для хранения конфигурационных данных, переменных и параметров подключений Apache Airflow™. Возможные значения:trueилиfalse. -
airflow_config— дополнительные свойства Apache Airflow™ , например: раздел конфигурации —core, ключ —load_examples, значение —False. -
logging— параметры логирования:-
enabled— позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения:trueилиfalse. -
folder_id— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога. -
log_group_id— идентификатор пользовательской лог-группы. Логи будут записываться в нее.Укажите один из двух параметров:
folder_idлибоlog_group_id. -
min_level— минимальный уровень логирования. Возможные значения:TRACE,DEBUG,INFO(значение по умолчанию),WARN,ERRORиFATAL.
-
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер Managed Service for Apache Airflow™.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "description": "<описание_кластера>", "labels": { <список_меток> }, "config": { "versionId": "<версия_Apache Airflow™>", "airflow": { "config": { <список_свойств> } }, "webserver": { "count": "<количество_экземпляров>", "resources": { "resourcePresetId": "<идентификатор_ресурсов>" } }, "scheduler": { "count": "<количество_экземпляров>", "resources": { "resourcePresetId": "<идентификатор_ресурсов>" } }, "triggerer": { "count": "<количество_экземпляров>", "resources": { "resourcePresetId": "<идентификатор_ресурсов>" } }, "worker": { "minCount": "<минимальное_количество_экземпляров>", "maxCount": "<максимальное_количество_экземпляров>", "resources": { "resourcePresetId": "<идентификатор_ресурсов>" } }, "dependencies": { "pipPackages": [ <список_pip-пакетов> ], "debPackages": [ <список_deb-пакетов> ] }, "lockbox": { "enabled": <использование_секретов> }, "dagProcessor": { "count": "<количество_экземпляров>", "resources": { "resourcePresetId": "<идентификатор_ресурсов>" } } }, "network": { "subnetIds": [ <список_идентификаторов_подсетей> ], "securityGroupIds": [ <список_идентификаторов_групп_безопасности> ] }, "codeSync": { "s3": { "bucket": "<имя_бакета>" } }, "maintenanceWindow": { "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час>" } }, "deletionProtection": <защита_от_удаления>, "serviceAccountId": "<идентификатор_сервисного_аккаунта>", "logging": { "enabled": <использование_логирования>, "minLevel": "<уровень_логирования>", "folderId": "<идентификатор_каталога>" }, "adminPassword": "<пароль_администратора>" }Где:
-
folderId— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
description— описание кластера. -
labels— список меток. Метки задаются в формате"<ключ>": "<значение>". -
config— конфигурация кластера:-
versionId— версия Apache Airflow™. -
airflow.config— дополнительные свойства Apache Airflow™ . Задаются в формате"<раздел_конфигурации>.<ключ>": "<значение>", например:"airflow": { "config": { "core.load_examples": "False" } } -
webserver,scheduler,triggerer,worker,dagProcessor— конфигурация компонентов Managed Service for Apache Airflow™:-
count— количество экземпляров в кластере для веб-сервера, планировщика, DAG-процессора и Triggerer. -
minCount,maxCount— минимальное и максимальное количество экземпляров в кластере для воркера. -
resources.resourcePresetId— идентификатор вычислительных ресурсов веб-сервера, планировщика, DAG-процессора, воркера и Triggerer. Возможные значения:c1-m2— 1 vCPU, 2 ГБ RAM.c1-m4— 1 vCPU, 4 ГБ RAM.c2-m4— 2 vCPU, 4 ГБ RAM.c2-m8— 2 vCPU, 8 ГБ RAM.c4-m8— 4 vCPU, 8 ГБ RAM.c4-m16— 4 vCPU, 16 ГБ RAM.c8-m16— 8 vCPU, 16 ГБ RAM.c8-m32— 8 vCPU, 32 ГБ RAM.
Важно
Компонент DAG-процессор доступен в версии Apache Airflow™ 3.0 и выше.
-
-
dependencies— списки пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов:pipPackages— список pip-пакетов.debPackages— список deb-пакетов.
При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
"dependencies": { "pipPackages": [ "pandas==2.0.2", "scikit-learn>=1.0.0", "clickhouse-driver~=0.2.0" ] }Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
lockbox.enabled— позволяет использовать секреты в сервисе Yandex Lockbox для хранения конфигурационных данных, переменных и параметров подключений Apache Airflow™. Возможные значения:trueилиfalse.
-
-
network— сетевые настройки:-
subnetIds— список идентификаторов подсетей.Чтобы только кластер Apache Airflow™ мог подключаться к вашим ресурсам, создайте для кластера отдельные подсети и не размещайте в них какие-либо другие ресурсы.
Убедитесь, что выполняются следующие условия для подсетей:
- Диапазон IP-адресов каждой подсети в сети кластера (включая подсети, не назначенные кластеру) не пересекается с диапазоном адресов 10.248.0.0/13 служебной сети.
- Диапазон каждой подсети кластера включает не менее
2 × Nсвободных IP-адресов, гдеN— это суммарное количество экземпляров всех компонентов: веб-сервера, планировщика, воркеров и службы Triggerer.
Подробнее см. в разделе Требования к подсетям кластера.
-
securityGroupIds— список идентификаторов групп безопасности.
-
-
codeSync.s3.bucket— имя бакета, в котором будут храниться DAG-файлы. -
maintenanceWindow— настройки времени технического обслуживания (в т. ч. для выключенных кластеров). ВmaintenanceWindowпередайте один из двух параметров:-
anytime— техническое обслуживание происходит в произвольное время. -
weeklyMaintenanceWindow— техническое обслуживание происходит раз в неделю, в указанное время:day— день недели в форматеDDD:MON,TUE,WED,THU,FRI,SATилиSUN;hour— час дня по UTC в форматеHH: от1до24.
-
-
deletionProtection— позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения:trueилиfalse.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
serviceAccountId— идентификатор сервисного аккаунта. -
logging— параметры логирования:-
enabled— позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения:trueилиfalse. -
minLevel— минимальный уровень логирования. Возможные значения:TRACE,DEBUG,INFO,WARN,ERRORиFATAL. -
folderId— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога. -
logGroupId— идентификатор пользовательской лог-группы. Логи будут записываться в нее.Укажите один из двух параметров:
folderIdлибоlogGroupId.
-
-
adminPassword— пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:- одну заглавную букву;
- одну строчную букву;
- одну цифру;
- один специальный символ.
Примечание
Сохраните пароль локально или запомните его. Сервис не показывает пароли после создания.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://airflow.api.cloud.yandex.net/managed-airflow/v1/clusters' \ --data '@body.json' -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "description": "<описание_кластера>", "labels": { <список_меток> }, "config": { "version_id": "<версия_Apache Airflow™>", "airflow": { "config": { <список_свойств> } }, "webserver": { "count": "<количество_экземпляров>", "resources": { "resource_preset_id": "<идентификатор_ресурсов>" } }, "scheduler": { "count": "<количество_экземпляров>", "resources": { "resource_preset_id": "<идентификатор_ресурсов>" } }, "triggerer": { "count": "<количество_экземпляров>", "resources": { "resource_preset_id": "<идентификатор_ресурсов>" } }, "worker": { "min_count": "<минимальное_количество_экземпляров>", "max_count": "<максимальное_количество_экземпляров>", "resources": { "resource_preset_id": "<идентификатор_ресурсов>" } }, "dependencies": { "pip_packages": [ <список_pip-пакетов> ], "deb_packages": [ <список_deb-пакетов> ] }, "lockbox": { "enabled": <использование_секретов> }, "dag_processor": { "count": "<количество_экземпляров>", "resources": { "resource_preset_id": "<идентификатор_ресурсов>" } } }, "network": { "subnet_ids": [ <список_идентификаторов_подсетей> ], "security_group_ids": [ <список_идентификаторов_групп_безопасности> ] }, "code_sync": { "s3": { "bucket": "<имя_бакета>" } }, "maintenance_window": { "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<час>" } }, "deletion_protection": <защита_от_удаления>, "service_account_id": "<идентификатор_сервисного_аккаунта>", "logging": { "enabled": <использование_логирования>, "min_level": "<уровень_логирования>", "folder_id": "<идентификатор_каталога>" }, "admin_password": "<пароль_администратора>" }Где:
-
folder_id— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
description— описание кластера. -
labels— список меток. Метки задаются в формате"<ключ>": "<значение>". -
config— конфигурация кластера:-
version_id— версия Apache Airflow™. -
airflow.config— дополнительные свойства Apache Airflow™ . Задаются в формате"<раздел_конфигурации>.<ключ>": "<значение>", например:"airflow": { "config": { "core.load_examples": "False" } } -
webserver,scheduler,triggerer,worker,dag_processor— конфигурация компонентов Managed Service for Apache Airflow™:-
count— количество экземпляров в кластере для веб-сервера, планировщика, DAG-процессора и Triggerer. -
min_count,max_count— минимальное и максимальное количество экземпляров в кластере для воркера. -
resources.resource_preset_id— идентификатор вычислительных ресурсов веб-сервера, планировщика, DAG-процессора, воркера и Triggerer. Возможные значения:c1-m2— 1 vCPU, 2 ГБ RAM.c1-m4— 1 vCPU, 4 ГБ RAM.c2-m4— 2 vCPU, 4 ГБ RAM.c2-m8— 2 vCPU, 8 ГБ RAM.c4-m8— 4 vCPU, 8 ГБ RAM.c4-m16— 4 vCPU, 16 ГБ RAM.c8-m16— 8 vCPU, 16 ГБ RAM.c8-m32— 8 vCPU, 32 ГБ RAM.
Важно
Компонент DAG-процессор доступен в версии Apache Airflow™ 3.0 и выше.
-
-
dependencies— списки пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов:pip_packages— список pip-пакетов.deb_packages— список deb-пакетов.
При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
"dependencies": { "pip_packages": [ "pandas==2.0.2", "scikit-learn>=1.0.0", "clickhouse-driver~=0.2.0" ] }Формат названия пакета и выбор версии определены командой установки:
pip install— для pip-пакетов,apt install— для deb-пакетов. -
lockbox.enabled— позволяет использовать секреты в сервисе Yandex Lockbox для хранения конфигурационных данных, переменных и параметров подключений Apache Airflow™. Возможные значения:trueилиfalse.
-
-
network— сетевые настройки:-
subnet_ids— список идентификаторов подсетей.Чтобы только кластер Apache Airflow™ мог подключаться к вашим ресурсам, создайте для кластера отдельные подсети и не размещайте в них какие-либо другие ресурсы.
Убедитесь, что выполняются следующие условия для подсетей:
- Диапазон IP-адресов каждой подсети в сети кластера (включая подсети, не назначенные кластеру) не пересекается с диапазоном адресов 10.248.0.0/13 служебной сети.
- Диапазон каждой подсети кластера включает не менее
2 × Nсвободных IP-адресов, гдеN— это суммарное количество экземпляров всех компонентов: веб-сервера, планировщика, воркеров и службы Triggerer.
Подробнее см. в разделе Требования к подсетям кластера.
-
security_group_ids— список идентификаторов групп безопасности.
-
-
code_sync.s3.bucket— имя бакета, в котором будут храниться DAG-файлы. -
maintenance_window— настройки времени технического обслуживания (в т. ч. для выключенных кластеров). Вmaintenance_windowпередайте один из двух параметров:-
anytime— техническое обслуживание происходит в произвольное время. -
weekly_maintenance_window— техническое обслуживание происходит раз в неделю, в указанное время:day— день недели в форматеDDD:MON,TUE,WED,THU,FRI,SATилиSUN;hour— час дня по UTC в форматеHH: от1до24.
-
-
deletion_protection— позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения:trueилиfalse.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
service_account_id— идентификатор сервисного аккаунта. -
logging— параметры логирования:-
enabled— позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения:trueилиfalse. -
min_level— минимальный уровень логирования. Возможные значения:TRACE,DEBUG,INFO,WARN,ERRORиFATAL. -
folder_id— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога. -
log_group_id— идентификатор пользовательской лог-группы. Логи будут записываться в нее.Укажите один из двух параметров:
folder_idлибоlog_group_id.
-
-
admin_password— пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:- одну заглавную букву;
- одну строчную букву;
- одну цифру;
- один специальный символ.
Примечание
Сохраните пароль локально или запомните его. Сервис не показывает пароли после создания.
-
-
Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/airflow/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ airflow.api.cloud.yandex.net:443 \ yandex.cloud.airflow.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Создайте кластер Managed Service for Apache Airflow™ с тестовыми характеристиками:
-
Имя —
myaf. -
Версия Apache Airflow™ —
3.0. -
Пароль администратора —
Password*1. -
Сервисный аккаунт с идентификатором
aje8r2rp7fkl********. -
Подсети с идентификаторами:
e9bhbia2scnk********e2lfqbm5nt9r********fl8beqmjckv8********
-
Один веб-сервер для размещения экземпляра Apache Airflow™ с классом хостов
c1-m2. -
Один планировщик с классом хостов
c1-m2. -
Задачи выполняют воркеры с классом хостов
c1-m2, количество таких воркеров — от1до4. -
Один DAG-процессор с классом хостов
c1-m2. -
Бакет с произвольным именем для хранения DAG-файлов.
Выполните следующую команду:
yc managed-airflow cluster create \
--name myaf \
--airflow-version 3.0 \
--admin-password Password*1 \
--service-account-id aje8r2rp7fkl******** \
--subnet-ids e9bhbia2scnk********,e2lfqbm5nt9r********,fl8beqmjckv8******** \
--security-group-ids enp68jq81uun******** \
--webserver count=1,resource-preset-id=c1-m2 \
--scheduler count=1,resource-preset-id=c1-m2 \
--worker min-count=1,max-count=4,resource-preset-id=c1-m2 \
--dag-processor count=1,resource-preset-id=c1-m2 \
--dags-bucket <имя_бакета>
Создайте кластер Managed Service for Apache Airflow™ с тестовыми характеристиками:
-
Каталог с идентификатором
b1g4unjqq856********. -
Имя —
myaf. -
Версия Apache Airflow™ —
3.0. -
Пароль администратора —
Password*1. -
Новый сервисный аккаунт
af-saсо следующими ролями:managed-airflow.integrationProviderstorage.editormonitoring.editor
-
Новая сеть
af-netс подсетями:af-subnet-aв зоне доступностиru-central1-aи с диапазоном адресов10.1.0.0/24;af-subnet-bв зоне доступностиru-central1-bи с диапазоном адресов10.2.0.0/24;af-subnet-dв зоне доступностиru-central1-dи с диапазоном адресов10.3.0.0/24.
-
Новая группа безопасности
af-sg, разрешающая весь входящий и исходящий трафик. -
Один веб-сервер для размещения экземпляра Apache Airflow™ с классом хостов
c1-m2. -
Один планировщик с классом хостов
c1-m2. -
Задачи выполняют воркеры с классом хостов
c1-m2, количество таких воркеров — от1до4. -
Один DAG-процессор с классом хостов
c1-m2. -
Новый бакет с произвольным именем для хранения DAG-файлов.
Конфигурационный файл для такого кластера выглядит так:
locals {
folder_id = "b1g4unjqq856********"
}
resource "yandex_airflow_cluster" "myaf" {
name = "myaf"
airflow_version = "3.0"
admin_password = "Password*1"
service_account_id = yandex_iam_service_account.af-sa.id
subnet_ids = [yandex_vpc_subnet.af-subnet-a.id,yandex_vpc_subnet.af-subnet-b.id,yandex_vpc_subnet.af-subnet-d.id]
security_group_ids = [yandex_vpc_security_group.af-sg.id]
webserver = {
count = 1
resource_preset_id = "c1-m2"
}
scheduler = {
count = 1
resource_preset_id = "c1-m2"
}
worker = {
min_count = 1
max_count = 4
resource_preset_id = "c1-m2"
}
dag_processor = {
count = 1
resource_preset_id = "c1-m2"
}
code_sync = {
s3 = {
bucket = yandex_storage_bucket.af-bucket.bucket
}
}
}
resource "yandex_vpc_network" "af-net" {
name = "af-net"
}
resource "yandex_vpc_subnet" "af-subnet-a" {
name = "af-subnet-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.af-net.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "af-subnet-b" {
name = "af-subnet-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.af-net.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "af-subnet-d" {
name = "af-subnet-d"
zone = "ru-central1-d"
network_id = yandex_vpc_network.af-net.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_vpc_security_group" "af-sg" {
name = "af-sg"
network_id = yandex_vpc_network.af-net.id
ingress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "ANY"
v4_cidr_blocks = ["0.0.0.0/0"]
}
}
resource "yandex_iam_service_account" "af-sa" {
name = "af-sa"
}
resource "yandex_resourcemanager_folder_iam_member" "sa-role-af" {
folder_id = local.folder_id
role = "managed-airflow.integrationProvider"
member = "serviceAccount:${yandex_iam_service_account.af-sa.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "sa-role-storage" {
folder_id = local.folder_id
role = "storage.editor"
member = "serviceAccount:${yandex_iam_service_account.af-sa.id}"
}
resource "yandex_resourcemanager_folder_iam_member" "sa-role-monitoring" {
folder_id = local.folder_id
role = "monitoring.editor"
member = "serviceAccount:${yandex_iam_service_account.af-sa.id}"
}
resource "yandex_storage_bucket" "af-bucket" {
bucket = "<имя_бакета>"
folder_id = local.folder_id
}