Изменение кластера Apache Airflow™
После создания кластера вы можете изменить его основные и дополнительные настройки.
-
Перейдите на страницу каталога
и выберите сервис Managed Service for Apache Airflow™. -
Выберите кластер и нажмите кнопку Редактировать на панели сверху.
-
В блоке Базовые параметры измените имя и описание кластера, удалите или добавьте новые метки.
-
В блоке Настройки доступа выберите сервисный аккаунт или создайте новый с ролью
managed-airflow.integrationProvider
. Это даст кластеру нужные права для работы с пользовательскими ресурсами. Подробнее см. в разделе Имперсонация. -
В блоке Сетевые настройки выберите группу безопасности для сетевого трафика кластера или создайте ее.
Настройки группы безопасности не влияют на доступ к веб-интерфейсу Apache Airflow™.
-
В блоках для настройки компонентов Managed Service for Apache Airflow™ — Конфигурация веб-сервера, Конфигурация планировщика, Конфигурация воркеров — укажите количество экземпляров и ресурсов.
-
В блоке Конфигурация triggerer включите или выключите службу Triggerer. Если служба включена, укажите количество экземпляров и ресурсов.
-
В блоке Зависимости удалите или добавьте названия pip- и deb-пакетов.
-
В блоке Хранилище DAG-файлов выберите существующий бакет для хранения DAG-файлов или создайте новый. Сервисному аккаунту кластера должно быть предоставлено разрешение
READ
для этого бакета. -
В блоке Дополнительные настройки установите или снимите защиту от удаления.
-
В блоке Конфигурация Airflow:
-
Добавьте, измените или удалите дополнительные свойства Apache Airflow™
, например: ключ —api.maximum_page_limit
, значение —150
.Заполните поля вручную или загрузите конфигурацию из файла (см. пример конфигурационного файла
). -
Включите или выключите опцию Использовать Lockbox Secret Backend, которая позволяет использовать секреты в сервисе Yandex Lockbox для хранения конфигурационных данных, переменных и параметров подключений Apache Airflow™.
Чтобы извлечь нужную информацию из секрета, сервисный аккаунт кластера должен иметь роль
lockbox.payloadViewer
.Эту роль можно назначить как на уровне всего каталога, так и на уровне отдельного секрета.
-
-
В блоке Логирование включите или выключите запись логов. Если логирование включено, укажите, в какую лог-группу будут записываться логи и минимальный уровень логирования. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging.
-
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы изменить настройки кластера:
-
Посмотрите описание команды CLI для изменения кластера:
yc managed-airflow cluster update --help
-
Передайте список настроек, которые хотите изменить, в команде изменения кластера:
yc managed-airflow managed-airflow cluster update <имя_или_идентификатор_кластера> \ --new-name <новое_имя_кластера> \ --description <описание_кластера> \ --labels <список_меток> \ --service-account-id <идентификатор_сервисного_аккаунта> \ --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=<идентификатор_ресурсов> \ --deb-packages <список_deb-пакетов> \ --pip-packages <список_pip-пакетов> \ --dags-bucket <имя-бакета> \ --deletion-protection \ --lockbox-secrets-backend \ --log-enabled \ --log-folder-id <идентификатор_каталога> \ --log-min-level <уровень_логирования>
Где:
-
--name
— имя кластера. -
--description
— описание кластера. -
--labels
— список меток. Метки задаются в формате<ключ>=<значение>
. -
--admin-password
— пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:- одну заглавную букву;
- одну строчную букву;
- одну цифру;
- один специальный символ.
-
--service-account-id
— идентификатор сервисного аккаунта. -
--subnet-ids
— список идентификаторов подсетей. -
--security-group-ids
— список идентификаторов групп безопасности. -
--webserver
,--scheduler
,--worker
,--triggerer
— конфигурация компонентов Managed Service for Apache Airflow™:-
count
— количество экземпляров в кластере для веб-сервера, планировщика и триггера. -
min-count
,max-count
— минимальное и максимальное количество экземпляров в кластере для воркера. -
resource-preset-id
— идентификатор вычислительных ресурсов веб-сервера, планировщика, воркера и триггера. Возможные значения:c1-m4
— 1 vCPU, 4 ГБ RAM.c2-m8
— 2 vCPU, 8 ГБ RAM.c4-m16
— 4 vCPU, 16 ГБ RAM.c8-m32
— 8 vCPU, 32 ГБ RAM.
-
-
--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-файлы. -
--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-min-level
— минимальный уровень логирования. Возможные значения:TRACE
,DEBUG
,INFO
(значение по умолчанию),WARN
,ERROR
иFATAL
.
Вы можете указать только один из параметров:
--log-folder-id
или--log-group-id
.
Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
Как создать такой файл, см. в разделе Создание кластера.
-
Чтобы изменить настройки кластера, измените значения нужных полей в конфигурационном файле.
Внимание
Не изменяйте имя кластера и пароль с помощью Terraform. Это приведет к удалению существующего кластера и созданию нового.
Пример структуры конфигурационного файла:
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 = "<идентификатор_ресурсов>" } pip_packages = ["список_pip-пакетов"] deb_packages = ["список_deb-пакетов"] code_sync = { s3 = { bucket = "<имя_бакета>" } } 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
— список идентификаторов подсетей. -
security_group_ids
— список идентификаторов групп безопасности. -
webserver
,scheduler
,worker
,triggerer
— конфигурация компонентов Managed Service for Apache Airflow™:-
count
— количество экземпляров в кластере для веб-сервера, планировщика и триггера. -
min_count
,max_count
— минимальное и максимальное количество экземпляров в кластере для воркера. -
resource_preset_id
— идентификатор вычислительных ресурсов веб-сервера, планировщика, воркера и триггера. Возможные значения:c1-m4
— 1 vCPU, 4 ГБ RAM.c2-m8
— 2 vCPU, 8 ГБ RAM.c4-m16
— 4 vCPU, 16 ГБ RAM.c8-m32
— 8 vCPU, 32 ГБ RAM.
-
-
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-файлы. -
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
— идентификатор пользовательской лог-группы.min_level
— минимальный уровень логирования. Возможные значения:TRACE
,DEBUG
,INFO
(значение по умолчанию),WARN
,ERROR
иFATAL
.
Вы можете указать только один из параметров:
folder_id
илиlog_group_id
.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Создайте файл
body.json
и добавьте в него следующее содержимое:{ "updateMask": "<список_изменяемых_параметров>", "name": "<имя_кластера>", "description": "<описание_кластера>", "labels": { <список_меток> }, "configSpec": { "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": <использование_логирования> } }, "codeSync": { "s3": { "bucket": "<имя_бакета>" } }, "networkSpec": { "securityGroupIds": [ <список_идентификаторов_групп_безопасности> ] }, "deletionProtection": <защита_от_удаления>, "serviceAccountId": "<идентификатор_сервисного_аккаунта>", "logging": { "enabled": <использование_логирования>, "minLevel": "<уровень_логирования>", // Укажите один из параметров: `folderId` или `logGroupId` "folderId": "<идентификатор_каталога>", "logGroupId": "<идентификатор_лог-группы>", } }
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.Важно
При изменении кластера будут переопределены все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask
. -
name
— имя кластера. -
description
— описание кластера. -
labels
— список меток. Метки задаются в формате"<ключ>": "<значение>"
. -
config
— конфигурация кластера:-
airflow.config
— дополнительные свойства Apache Airflow™ . Задаются в формате"<раздел_конфигурации>.<ключ>": "<значение>"
, например:"airflow": { "config": { "core.load_examples": "False" } }
-
webserver
,scheduler
,triggerer
,worker
— конфигурация компонентов Managed Service for Apache Airflow™:-
count
— количество экземпляров в кластере для веб-сервера, планировщика и триггера. -
minCount
,maxCount
— минимальное и максимальное количество экземпляров в кластере для воркера. -
resources.resourcePresetId
— идентификатор вычислительных ресурсов веб-сервера, планировщика, воркера и триггера. Возможные значения:c1-m4
— 1 vCPU, 4 ГБ RAM.c2-m8
— 2 vCPU, 8 ГБ RAM.c4-m16
— 4 vCPU, 16 ГБ RAM.c8-m32
— 8 vCPU, 32 ГБ RAM.
-
-
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.securityGroupIds
— список идентификаторов групп безопасности. -
codeSync.s3.bucket
— имя бакета, в котором будут храниться DAG-файлы. -
deletionProtection
— позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения:true
илиfalse
.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
serviceAccountId
— идентификатор сервисного аккаунта, созданного ранее. -
logging
— параметры логирования:enabled
— позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения:true
илиfalse
.minLevel
— минимальный уровень логирования. Возможные значения:TRACE
,DEBUG
,INFO
,WARN
,ERROR
иFATAL
.folderId
— идентификатор каталога. Логи будут записываться в лог-группу по умолчанию для этого каталога.logGroupId
— идентификатор пользовательской лог-группы.
Вы можете указать только один из параметров:
folderId
илиlogGroupId
.
-
-
Воспользуйтесь методом Cluster.update и выполните запрос, например, с помощью cURL
:curl \ --request PATCH \ --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
и добавьте в него следующее содержимое:{ "cluster_id": "<идентификатор_кластера>", "update_mask": "<список_изменяемых_параметров>", "name": "<имя_кластера>", "description": "<описание_кластера>", "labels": { <список_меток> }, "config_spec": { "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": <использование_логирования> } }, "code_sync": { "s3": { "bucket": "<имя_бакета>" } }, "network_spec": { "security_group_ids": [ <список_идентификаторов_групп_безопасности> ] }, "deletion_protection": <защита_от_удаления>, "service_account_id": "<идентификатор_сервисного_аккаунта>", "logging": { "enabled": <использование_логирования>, "min_level": "<уровень_логирования>", // Укажите один из параметров: `folderId` или `logGroupId` "folder_id": "<идентификатор_каталога>", "log_group_id": "<идентификатор_лог-группы>", } }
Где:
-
cluster_id
— идентификатор кластера. Его можно запросить со списком кластеров в каталоге. -
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }
Важно
При изменении кластера будут переопределены все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask
. -
name
— имя кластера. -
description
— описание кластера. -
labels
— список меток. Метки задаются в формате"<ключ>": "<значение>"
. -
config_spec
— конфигурация кластера:-
airflow.config
— дополнительные свойства Apache Airflow™ . Задаются в формате"<раздел_конфигурации>.<ключ>": "<значение>"
, например:"airflow": { "config": { "core.load_examples": "False" } }
-
webserver
,scheduler
,triggerer
,worker
— конфигурация компонентов Managed Service for Apache Airflow™:-
count
— количество экземпляров в кластере для веб-сервера, планировщика и триггера. -
min_count
,max_count
— минимальное и максимальное количество экземпляров в кластере для воркера. -
resources.resource_preset_id
— идентификатор вычислительных ресурсов веб-сервера, планировщика, воркера и триггера. Возможные значения:c1-m4
— 1 vCPU, 4 ГБ RAM.c2-m8
— 2 vCPU, 8 ГБ RAM.c4-m16
— 4 vCPU, 16 ГБ RAM.c8-m32
— 8 vCPU, 32 ГБ RAM.
-
-
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_spec.security_group_ids
— список идентификаторов групп безопасности. -
code_sync.s3.bucket
— имя бакета, в котором будут храниться DAG-файлы. -
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
.
-
-
Воспользуйтесь вызовом ClusterService/Update и выполните запрос, например, с помощью 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.Update \ < body.json
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.