[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Apache Airflow™](../index.md) > [Пошаговые инструкции](index.md) > Кластеры > Изменение кластера

# Изменение кластера Apache Airflow™

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

{% list tabs group=instructions %}

- Консоль управления {#console}

    Чтобы изменить настройки кластера:

    1. Перейдите на [страницу каталога](https://console.yandex.cloud).
    1. Перейдите в сервис **Managed Service for&nbsp;Apache&nbsp;Airflow™**.

    1. Выберите кластер и нажмите кнопку **Редактировать** на панели сверху.

    1. В блоке **Базовые параметры** измените имя и описание кластера, удалите или добавьте новые метки, выберите версию Apache Airflow™ и Python.

    1. В блоке **Настройки доступа** выберите сервисный аккаунт или [создайте новый](../../iam/operations/sa/create.md#create-sa) с ролью `managed-airflow.integrationProvider`. Это даст кластеру нужные права для работы с пользовательскими ресурсами. Подробнее в разделе [Имперсонация](../concepts/impersonation.md).

        Для изменения сервисного аккаунта в кластере Managed Service for Apache Airflow™ [назначьте](../../iam/operations/roles/grant.md) вашему аккаунту в Yandex Cloud роль [iam.serviceAccounts.user](../../iam/security/index.md#iam-serviceAccounts-user) или выше.

        {% note warning %}
        
        Если для доступа к объектам из Object Storage в кластере уже используется сервисный аккаунт, то его смена может привести к недоступности этих объектов и нарушению работы кластера. Перед изменением настроек сервисного аккаунта убедитесь, что кластер не использует соответствующие объекты.
        
        {% endnote %}

    1. В блоке **Сетевые настройки** выберите [группу безопасности](../concepts/network.md#security-groups) для сетевого трафика кластера или создайте ее.

       Настройки группы безопасности не влияют на доступ к [веб-интерфейсу Apache Airflow™](af-interfaces.md#web-gui).

    1. В блоках для настройки [компонентов](../concepts/index.md#components) Managed Service for Apache Airflow™ — **Конфигурация веб-сервера**, **Конфигурация планировщика**, **Конфигурация воркеров**, **Конфигурация DAG-процессора** — укажите количество экземпляров и [конфигурацию вычислительных ресурсов](../concepts/instance-types.md).

       {% note warning %}
              
       Компонент _DAG-процессор_ доступен в версии Apache Airflow™ 3.0 и выше.
              
       {% endnote %}

    1. В блоке **Конфигурация Triggerer** включите или выключите службу Triggerer. Если служба включена, укажите количество экземпляров и ресурсов.

    1. В блоке **Зависимости** удалите или добавьте названия pip- и deb-пакетов.

    1. В блоке **Хранилище DAG-файлов** выберите **Тип источника данных** и укажите его параметры:
       * **S3** – выберите существующий бакет или создайте новый. В этом бакете будут храниться DAG-файлы.

          Сервисному аккаунту кластера должно быть [предоставлено разрешение](../../storage/operations/buckets/edit-acl.md) `READ` для этого бакета.

       * **Git** — укажите адрес репозитория, рабочую ветку, путь к каталогу с DAG-файлами и содержимое закрытого SSH-ключа доступа к репозиторию.

          Поддерживаются закрытые ключи `RSA`, `DSA`, `ECDSA`, `Ed25519` в форматах `PKCS#1`, `PKCS#8`, `OpenSSL` и `OpenSSH`.
          
          {% note warning %}
          
          * Адрес репозитория должен разрешать подключения по протоколу SSH.
          
          * Закрытый ключ не должен быть защищен паролем.
          
          * Для использования Git-репозитория [настройте доступ в интернет через NAT-шлюз](../../vpc/operations/create-nat-gateway.md) из сети кластера Managed Service for Apache Airflow™. Во время настройки привяжите таблицу маршрутизации с NAT-шлюзом ко всем подсетям кластера.
          
          {% endnote %}

    1. В блоке **Дополнительные настройки**:

        * Измените время [технического обслуживания](../concepts/maintenance.md) кластера.
        * Установите или снимите защиту от удаления.

    1. В блоке **Конфигурация Airflow**:

        * Добавьте, измените или удалите [дополнительные свойства Apache Airflow™](https://airflow.apache.org/docs/apache-airflow/2.2.4/configurations-ref.html), например: ключ — `api.maximum_page_limit`, значение — `150`.

            Заполните поля вручную или загрузите конфигурацию из файла (смотрите [пример конфигурационного файла](https://storage.yandexcloud.net/doc-files/managed-airflow/airflow.cfg)).

        * Включите или выключите опцию **Использовать Lockbox Secret Backend**, которая позволяет использовать секреты в сервисе [Yandex Lockbox](../../lockbox/concepts/index.md) для [хранения конфигурационных данных, переменных и параметров подключений](../concepts/impersonation.md#lockbox-integration) Apache Airflow™.

            Чтобы извлечь нужную информацию из секрета, сервисный аккаунт кластера должен иметь [роль](../../lockbox/security/index.md#lockbox-payloadViewer) `lockbox.payloadViewer`.
            
            Эту роль можно назначить как [на уровне всего каталога](../../iam/operations/roles/grant.md#cloud-or-folder), так и [на уровне отдельного секрета](../../lockbox/operations/secret-access.md).

    1. В блоке **Логирование** включите или выключите запись логов. Если логирование включено, укажите, в какую лог-группу будут записываться логи и минимальный уровень логирования. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging.

    1. Нажмите кнопку **Сохранить**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы изменить настройки кластера:

    1. Посмотрите описание команды CLI для изменения кластера:

        ```bash
        yc managed-airflow cluster update --help
        ```

    1. Передайте список настроек, которые хотите изменить, в команде изменения кластера:

        ```bash
        yc managed-airflow cluster update <имя_или_идентификатор_кластера> \
           --new-name <новое_имя_кластера> \
           --description <описание_кластера> \
           --labels <список_меток> \
           --airflow-version <версия_Apache Airflow™> \
           --python-version <версия_Python> \
           --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=<идентификатор_ресурсов> \
           --dag-processor count=<количество_экземпляров>,`
                      `resource-preset-id=<идентификатор_ресурсов> \ 
           --deb-packages <список_deb-пакетов> \
           --pip-packages <список_pip-пакетов> \
           --dags-bucket <имя_бакета> \
           --gitsync repo=<SSH-адрес_репозитория>,`
                     `branch=<рабочая_ветка>,`
                     `subpath=<путь_к_каталогу_DAG-файлов>,`
                     `ssh-key=<закрытый_SSH-ключ>,`
                     `ssh-key-path=<путь_к_файлу_закрытого_SSH-ключа> \
           --maintenance-window type=<тип_технического_обслуживания>,`
                                `day=<день_недели>,`
                                `hour=<порядковый_номер_часового_интервала> \
           --deletion-protection \
           --lockbox-secrets-backend \
           --log-enabled \
           --log-folder-id <идентификатор_каталога> \
           --log-min-level <уровень_логирования>
        ```

        Где:
        
        * `--name` — имя кластера.
        * `--description` — описание кластера.
        * `--airflow-version` — [версия Apache Airflow™](../concepts/versions.md).
        * `--python-version` — версия Python.
        * `--labels` — список меток. Метки задаются в формате `<ключ>=<значение>`.
        * `--admin-password` — пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:
        
            * одну заглавную букву;
            * одну строчную букву;
            * одну цифру;
            * один специальный символ.
        
        * `--service-account-id` — идентификатор сервисного аккаунта.

        * `--security-group-ids` — список идентификаторов [групп безопасности](../concepts/network.md#security-groups).
        * `--webserver`, `--scheduler`, `--worker`, `--triggerer`, `--dag-processor` — конфигурация [компонентов](../concepts/index.md#components) Managed Service for Apache Airflow™:
        
            * `count` — количество экземпляров в кластере для веб-сервера, планировщика, DAG-процессора и Triggerer.
            * `min-count`, `max-count` — минимальное и максимальное количество экземпляров в кластере для воркера.
            * `resource-preset-id` — [идентификатор вычислительных ресурсов](../concepts/instance-types.md) веб-сервера, планировщика, 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.
        
            {% note warning %}
                   
            Компонент _DAG-процессор_ доступен в версии Apache Airflow™ 3.0 и выше.
                   
            {% endnote %}
        
        * `--deb-packages`, `--pip-packages` — списки deb- и pip-пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов.
        
            При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
        
            ```hcl
            --pip-packages "pandas==2.0.2,scikit-learn>=1.0.0,clickhouse-driver~=0.2.0"
            ```
        
            Формат названия пакета и выбор версии определены командой установки: `pip install` — для pip-пакетов, `apt install` — для deb-пакетов.
        
        * Тип и параметры источника DAG-файлов:
        
            * `--dags-bucket` — имя бакета.
        
            * `--gitsync` — параметры Git-репозитория:
        
              * `repo` — адрес репозитория.
              * `branch` — рабочая ветка.
              * `subpath` — путь к каталогу DAG-файлов в репозитории.
              * `ssh-key` — закрытый SSH-ключ доступа к репозиторию в одну строчку с символами переноса строки `\n`.
              * `ssh-key-path` — путь к файлу закрытого SSH-ключа доступа к репозиторию.
        
                Укажите один из двух параметров: `ssh-key` или `ssh-key-path`.
        
              Поддерживаются закрытые ключи `RSA`, `DSA`, `ECDSA`, `Ed25519` в форматах `PKCS#1`, `PKCS#8`, `OpenSSL` и `OpenSSH`.
              
              {% note warning %}
              
              * Адрес репозитория должен разрешать подключения по протоколу SSH.
              
              * Закрытый ключ не должен быть защищен паролем.
              
              * Для использования Git-репозитория [настройте доступ в интернет через NAT-шлюз](../../vpc/operations/create-nat-gateway.md) из сети кластера Managed Service for Apache Airflow™. Во время настройки привяжите таблицу маршрутизации с NAT-шлюзом ко всем подсетям кластера.
              
              {% endnote %}
        
            Укажите один из двух параметров: `--dags-bucket` либо `--gitsync`.
        
        * `--maintenance-window` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров), где `type` — тип технического обслуживания:
        
            * `anytime` (по умолчанию) — в любое время.
            * `weekly` — по расписанию. Для этого значения дополнительно укажите:
                * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
                * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.
            
                  > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.
        
        * `--deletion-protection` — включает защиту кластера от непреднамеренного удаления.
        
            Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
        
        * `--lockbox-secrets-backend` — включает использование секретов в сервисе [Yandex Lockbox](../../lockbox/concepts/index.md) для [хранения конфигурационных данных, переменных и параметров подключений](../concepts/impersonation.md#lockbox-integration) Apache Airflow™.
        * `--airflow-config` — [дополнительные свойства Apache Airflow™](https://airflow.apache.org/docs/apache-airflow/2.2.4/configurations-ref.html). Задаются в формате `<раздел_конфигурации>.<ключ>=<значение>`, например:
        
            ```bash
            --airflow-config core.load_examples=False
            ```
        
        * Параметры логирования:
        
            * `--log-enabled` — включает логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging.
            * `--log-folder-id` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
            * `--log-group-id` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.
        
                Укажите один из двух параметров: `--log-folder-id` либо `--log-group-id`.
        
            * `--log-min-level` — минимальный уровень логирования. Возможные значения: `TRACE`, `DEBUG`, `INFO` (значение по умолчанию), `WARN`, `ERROR` и `FATAL`.

        Идентификатор и имя кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

- Terraform {#tf}

    Чтобы изменить настройки кластера:

    1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.

        Инструкция по созданию файла описана в разделе [Создание кластера](cluster-create.md).

    1. Чтобы изменить настройки кластера, измените значения нужных полей в конфигурационном файле.

        {% note alert %}

        Не изменяйте имя кластера и пароль с помощью Terraform. Это приведет к удалению существующего кластера и созданию нового.

        {% endnote %}

        Пример структуры конфигурационного файла:
        
        ```hcl
        resource "yandex_airflow_cluster" "<имя_кластера>" {
          name        = "<имя_кластера>"
          description = "<описание_кластера>"
          airflow_version = "<версия_Apache Airflow™"
          python_version = "<версия_Python>"
        
          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` — описание кластера.
        * `airflow_version` — [версия Apache Airflow™](../concepts/versions.md).
        * `python_version` — версия Python.
        * `labels` — список меток. Метки задаются в формате `<ключ> = "<значение>"`.
        * `admin_password` — пароль пользователя-администратора. Пароль должен иметь длину не менее 8 символов и содержать как минимум:
        
            * одну заглавную букву;
            * одну строчную букву;
            * одну цифру;
            * один специальный символ.
        
        * `service_account_id` — идентификатор сервисного аккаунта.

        * `subnet_ids` — список идентификаторов подсетей.

            {% note info %}

            Нельзя изменить подсети после создания кластера.

            {% endnote %}

        * `security_group_ids` — список идентификаторов [групп безопасности](../concepts/network.md#security-groups).
        * `webserver`, `scheduler`, `worker`, `triggerer`, `dag_processor` — конфигурация [компонентов](../concepts/index.md#components) 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.
            
            {% note warning %}
                   
            Компонент _DAG-процессор_ доступен в версии Apache Airflow™ 3.0 и выше.
                   
            {% endnote %}
        
        * `deb_packages`, `pip_packages` — списки deb- и pip-пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов.
        
            При необходимости задайте ограничения на версии устанавливаемых пакетов, например:
        
            ```hcl
            pip_packages = ["pandas==2.0.2","scikit-learn>=1.0.0","clickhouse-driver~=0.2.0"]
            ```
        
            Формат названия пакета и выбор версии определены командой установки: `pip install` — для pip-пакетов, `apt install` — для deb-пакетов.
        
        * `code_sync` — тип и параметры источника DAG-файлов:
        
          * `s3.bucket` — имя бакета.
        
          * `git_sync` — параметры Git-репозитория:
        
            * `repo` — адрес репозитория.
            * `branch` — рабочая ветка.
            * `sub_path` — путь к каталогу DAG-файлов в репозитории.
            * `ssh_key` — закрытый SSH-ключ доступа к репозиторию в одну строчку с символами переноса строки `\n`.
        
            Поддерживаются закрытые ключи `RSA`, `DSA`, `ECDSA`, `Ed25519` в форматах `PKCS#1`, `PKCS#8`, `OpenSSL` и `OpenSSH`.
            
            {% note warning %}
            
            * Адрес репозитория должен разрешать подключения по протоколу SSH.
            
            * Закрытый ключ не должен быть защищен паролем.
            
            * Для использования Git-репозитория [настройте доступ в интернет через NAT-шлюз](../../vpc/operations/create-nat-gateway.md) из сети кластера Managed Service for Apache Airflow™. Во время настройки привяжите таблицу маршрутизации с NAT-шлюзом ко всем подсетям кластера.
            
            {% endnote %}
        
          Укажите один из двух блоков: `s3` либо `git_sync`.
        
        * `maintenance_window` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров):
        
            * `type` — тип технического обслуживания. Принимает значения:
                * `ANYTIME` — в любое время.
                * `WEEKLY` — по расписанию.
            * `day` — день недели для типа `WEEKLY`: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
            * `hour` — порядковый номер часового интервала по UTC для типа `WEEKLY`: от `1` до `24`.
        
              > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.
        
        * `deletion_protection` — позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения: `true` или `false`.
        
            Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
        
        * `lockbox_secrets_backend.enabled` — включает использование секретов в сервисе [Yandex Lockbox](../../lockbox/concepts/index.md) для [хранения конфигурационных данных, переменных и параметров подключений](../concepts/impersonation.md#lockbox-integration) Apache Airflow™. Возможные значения: `true` или `false`.
        * `airflow_config` — [дополнительные свойства Apache Airflow™](https://airflow.apache.org/docs/apache-airflow/2.2.4/configurations-ref.html), например: раздел конфигурации — `core`, ключ — `load_examples`, значение — `False`.
        * `logging` — параметры логирования:
        
            * `enabled` — позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения: `true` или `false`.
            * `folder_id` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
            * `log_group_id` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.
        
              Укажите один из двух параметров: `folder_id` либо `log_group_id`.
        
            * `min_level` — минимальный уровень логирования. Возможные значения: `TRACE`, `DEBUG`, `INFO` (значение по умолчанию), `WARN`, `ERROR` и `FATAL`.

    1. Проверьте корректность настроек.

        1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
        1. Выполните команду:
        
           ```bash
           terraform validate
           ```
        
           Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    1. Подтвердите изменение ресурсов.

        1. Выполните команду для просмотра планируемых изменений:
        
           ```bash
           terraform plan
           ```
        
           Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
        
        1. Если вас устраивают планируемые изменения, внесите их:
           1. Выполните команду:
        
              ```bash
              terraform apply
              ```
        
           1. Подтвердите изменение ресурсов.
           1. Дождитесь завершения операции.

    Подробнее в [документации провайдера Terraform](../../terraform/resources/airflow_cluster.md).

- REST API {#api}

    Чтобы изменить настройки кластера:

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Создайте файл `body.json` и добавьте в него следующее содержимое:

        ```json
        {
          "updateMask": "<список_изменяемых_параметров>",
          "name": "<имя_кластера>",
          "description": "<описание_кластера>",
          "labels": { <список_меток> },
          "configSpec": {
            "airflowVersion": "<версия_Apache Airflow™>",
            "pythonVersion": "<версия_Python>",
            "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": "<идентификатор_ресурсов>"
              }
            }
          },
          "codeSync": {
            "s3": {
              "bucket": "<имя_бакета>"
            },
            "gitSync": {
              "repo": "<SSH-адрес_репозитория>",
              "branch": "<рабочая_ветка>",
              "subPath": "<путь_к_каталогу_DAG-файлов>",
              "sshKey": "<закрытый_SSH-ключ>"
            }
          },  
          "networkSpec": {
            "securityGroupIds": [ <список_идентификаторов_групп_безопасности> ]
          },
          "maintenanceWindow": {
            "weeklyMaintenanceWindow": {
              "day": "<день_недели>",
              "hour": "<порядковый_номер_часового_интервала>"
            }
          },
          "deletionProtection": <защита_от_удаления>,
          "serviceAccountId": "<идентификатор_сервисного_аккаунта>",
          "logging": {
            "enabled": <использование_логирования>,
            "minLevel": "<уровень_логирования>",
            "folderId": "<идентификатор_каталога>"
          }
        }
        ```

        Где:

        * `updateMask` — перечень изменяемых параметров в одну строку через запятую.

            {% note warning %}

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

            {% endnote %}

        * `name` — имя кластера.
        * `description` — описание кластера.
        * `labels` — список меток. Метки задаются в формате `"<ключ>": "<значение>"`.
        * `config` — конфигурация кластера:

            * `airflowVersion` — версия Apache Airflow™.
            * `pythonVersion` — версия Python.
            * `airflow.config` — [дополнительные свойства Apache Airflow™](https://airflow.apache.org/docs/apache-airflow/2.2.4/configurations-ref.html). Задаются в формате `"<раздел_конфигурации>.<ключ>": "<значение>"`, например:

                ```json
                "airflow": {
                  "config": {
                    "core.load_examples": "False"
                  }
                }
                ```

            * `webserver`, `scheduler`, `triggerer`, `worker`, `dagProcessor` — конфигурация [компонентов](../concepts/index.md#components) 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.

                {% note warning %}
                       
                Компонент _DAG-процессор_ доступен в версии Apache Airflow™ 3.0 и выше.
                       
                {% endnote %}

            * `dependencies` — списки пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов:

                * `pipPackages` — список pip-пакетов.
                * `debPackages` — список deb-пакетов.

                При необходимости задайте ограничения на версии устанавливаемых пакетов, например:

                ```bash
                "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](../../lockbox/concepts/index.md) для [хранения конфигурационных данных, переменных и параметров подключений](../concepts/impersonation.md#lockbox-integration) Apache Airflow™. Возможные значения: `true` или `false`.

        * `network.securityGroupIds` — список идентификаторов [групп безопасности](../concepts/network.md#security-groups).

        * `codeSync` — тип и параметры источника DAG-файлов.

            * `s3.bucket` — имя бакета.

            * `gitSync` — параметры Git-репозитория:

              * `repo` — адрес репозитория.
              * `branch` — рабочая ветка.
              * `subPath` — путь к каталогу DAG-файлов в репозитории.
              * `sshKey` — закрытый SSH-ключ доступа к репозиторию в одну строчку с символами переноса строки `\n`.

              Поддерживаются закрытые ключи `RSA`, `DSA`, `ECDSA`, `Ed25519` в форматах `PKCS#1`, `PKCS#8`, `OpenSSL` и `OpenSSH`.
              
              {% note warning %}
              
              * Адрес репозитория должен разрешать подключения по протоколу SSH.
              
              * Закрытый ключ не должен быть защищен паролем.
              
              * Для использования Git-репозитория [настройте доступ в интернет через NAT-шлюз](../../vpc/operations/create-nat-gateway.md) из сети кластера Managed Service for Apache Airflow™. Во время настройки привяжите таблицу маршрутизации с NAT-шлюзом ко всем подсетям кластера.
              
              {% endnote %}

            Укажите один из двух параметров: `s3` либо `gitSync`.

        * `maintenanceWindow` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров). Передайте один из двух параметров:
          
            * `anytime` — техническое обслуживание проводится в произвольное время.
            * `weeklyMaintenanceWindow` — техническое обслуживание проводится раз в неделю в указанное время:
          
              * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`;
              * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.
          
                > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

        * `deletionProtection` — позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения: `true` или `false`.

            Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.

        * `serviceAccountId` — идентификатор сервисного аккаунта с [ролью](../../iam/concepts/access-control/roles.md) `managed-airflow.integrationProvider`. Это даст кластеру нужные права для работы с пользовательскими ресурсами. Подробнее в разделе [Имперсонация](../concepts/impersonation.md).

            Для изменения сервисного аккаунта в кластере Managed Service for Apache Airflow™ [назначьте](../../iam/operations/roles/grant.md) вашему аккаунту в Yandex Cloud роль [iam.serviceAccounts.user](../../iam/security/index.md#iam-serviceAccounts-user) или выше.

            {% note warning %}
            
            Если для доступа к объектам из Object Storage в кластере уже используется сервисный аккаунт, то его смена может привести к недоступности этих объектов и нарушению работы кластера. Перед изменением настроек сервисного аккаунта убедитесь, что кластер не использует соответствующие объекты.
            
            {% endnote %}

        * `logging` — параметры логирования:

            * `enabled` — позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения: `true` или `false`.
            * `minLevel` — минимальный уровень логирования. Возможные значения: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR` и `FATAL`.
            * `folderId` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
            * `logGroupId` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.

                Укажите один из двух параметров: `folderId` либо `logGroupId`.

    1. Воспользуйтесь методом [Cluster.Update](../api-ref/Cluster/update.md) и выполните запрос, например с помощью [cURL](https://curl.se/):

        ```bash
        curl \
            --request PATCH \
            --header "Authorization: Bearer $IAM_TOKEN" \
            --url 'https://airflow.api.cloud.yandex.net/managed-airflow/v1/clusters/<идентификатор_кластера>' \
            --data '@body.json'
        ```

        Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/Cluster/update.md#yandex.cloud.operation.Operation).

- gRPC API {#grpc-api}

    Чтобы изменить настройки кластера:

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
       
       ```bash
       cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
       ```
       
       Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.

    1. Создайте файл `body.json` и добавьте в него следующее содержимое:

        ```json
        {
          "cluster_id": "<идентификатор_кластера>",
          "update_mask": "<список_изменяемых_параметров>",
          "name": "<имя_кластера>",
          "description": "<описание_кластера>",
          "labels": { <список_меток> },
          "config_spec": {
            "airflow_version": "<версия_Apache Airflow™>",
            "python_version": "<версия_Python>",
            "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": "<идентификатор_ресурсов>"
              }
            }
          },
          "code_sync": {
            "s3": {
              "bucket": "<имя_бакета>"
            },
            "git_sync": {
              "repo": "<SSH-адрес_репозитория>",
              "branch": "<рабочая_ветка>",
              "sub_path": "<путь_к_каталогу_DAG-файлов>",
              "ssh_key": "<закрытый_SSH-ключ>"
            }
          },
          "network_spec": {
            "security_group_ids": [ <список_идентификаторов_групп_безопасности> ]
          },
          "maintenance_window": {
            "weekly_maintenance_window": {
              "day": "<день_недели>",
              "hour": "<порядковый_номер_часового_интервала>"
            }
          },
          "deletion_protection": <защита_от_удаления>,
          "service_account_id": "<идентификатор_сервисного_аккаунта>",
          "logging": {
            "enabled": <использование_логирования>,
            "min_level": "<уровень_логирования>",
            "folder_id": "<идентификатор_каталога>"
          }
        }
        ```

        Где:

        * `cluster_id` — идентификатор кластера. Его можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).
        * `update_mask` — перечень изменяемых параметров в виде массива строк `paths[]`.

            {% cut "Формат перечисления настроек" %}

            ```yaml
            "update_mask": {
                "paths": [
                    "<настройка_1>",
                    "<настройка_2>",
                    ...
                    "<настройка_N>"
                ]
            }
            ```

            {% endcut %}

            {% note warning %}

            При изменении кластера будут переопределены все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `update_mask`.

            {% endnote %}

        * `name` — имя кластера.
        * `description` — описание кластера.
        * `labels` — список меток. Метки задаются в формате `"<ключ>": "<значение>"`.
        * `config_spec` — конфигурация кластера:

            * `airflow_version` — версия Apache Airflow™.
            * `python_version` — версия Python.
            * `airflow.config` — [дополнительные свойства Apache Airflow™](https://airflow.apache.org/docs/apache-airflow/2.2.4/configurations-ref.html). Задаются в формате `"<раздел_конфигурации>.<ключ>": "<значение>"`, например:

                ```json
                "airflow": {
                  "config": {
                    "core.load_examples": "False"
                  }
                }
                ```

            * `webserver`, `scheduler`, `triggerer`, `worker`, `dag_processor` — конфигурация [компонентов](../concepts/index.md#components) 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.

                {% note warning %}
                       
                Компонент _DAG-процессор_ доступен в версии Apache Airflow™ 3.0 и выше.
                       
                {% endnote %}

            * `dependencies` — списки пакетов, которые позволяют установить в кластер дополнительные библиотеки и приложения для запуска DAG-файлов:

                * `pip_packages` — список pip-пакетов.
                * `deb_packages` — список deb-пакетов.

                При необходимости задайте ограничения на версии устанавливаемых пакетов, например:

                ```bash
                "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](../../lockbox/concepts/index.md) для [хранения конфигурационных данных, переменных и параметров подключений](../concepts/impersonation.md#lockbox-integration) Apache Airflow™. Возможные значения: `true` или `false`.

        * `network_spec.security_group_ids` — список идентификаторов [групп безопасности](../concepts/network.md#security-groups).

        * `code_sync` — тип и параметры источника DAG-файлов:

            * `s3.bucket` — имя бакета.

            * `git_sync` — параметры Git-репозитория:

              * `repo` — адрес репозитория.
              * `branch` — рабочая ветка.
              * `sub_path` — путь к каталогу DAG-файлов в репозитории.
              * `ssh_key` — закрытый SSH-ключ доступа к репозиторию в одну строчку с символами переноса строки `\n`.

              Поддерживаются закрытые ключи `RSA`, `DSA`, `ECDSA`, `Ed25519` в форматах `PKCS#1`, `PKCS#8`, `OpenSSL` и `OpenSSH`.
              
              {% note warning %}
              
              * Адрес репозитория должен разрешать подключения по протоколу SSH.
              
              * Закрытый ключ не должен быть защищен паролем.
              
              * Для использования Git-репозитория [настройте доступ в интернет через NAT-шлюз](../../vpc/operations/create-nat-gateway.md) из сети кластера Managed Service for Apache Airflow™. Во время настройки привяжите таблицу маршрутизации с NAT-шлюзом ко всем подсетям кластера.
              
              {% endnote %}

            Укажите один из двух параметров: `s3` либо `git_sync`.

        * `maintenance_window` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров). Передайте один из двух параметров:
          
            * `anytime` — техническое обслуживание проводится в произвольное время.
            * `weekly_maintenance_window` — техническое обслуживание проводится раз в неделю в указанное время:
          
              * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`;
              * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.
          
                > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

        * `deletion_protection` — позволяет включить защиту кластера от непреднамеренного удаления. Возможные значения: `true` или `false`.

            Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.

        * `service_account_id` — идентификатор сервисного аккаунта с [ролью](../../iam/concepts/access-control/roles.md) `managed-airflow.integrationProvider`. Это даст кластеру нужные права для работы с пользовательскими ресурсами. Подробнее в разделе [Имперсонация](../concepts/impersonation.md).

            Для изменения сервисного аккаунта в кластере Managed Service for Apache Airflow™ [назначьте](../../iam/operations/roles/grant.md) вашему аккаунту в Yandex Cloud роль [iam.serviceAccounts.user](../../iam/security/index.md#iam-serviceAccounts-user) или выше.

            {% note warning %}
            
            Если для доступа к объектам из Object Storage в кластере уже используется сервисный аккаунт, то его смена может привести к недоступности этих объектов и нарушению работы кластера. Перед изменением настроек сервисного аккаунта убедитесь, что кластер не использует соответствующие объекты.
            
            {% endnote %}

        * `logging` — параметры логирования:

            * `enabled` — позволяет включить логирование. Логи, сгенерированные компонентами Apache Airflow™, будут отправляться в Yandex Cloud Logging. Возможные значения: `true` или `false`.
            * `min_level` — минимальный уровень логирования. Возможные значения: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR` и `FATAL`.
            * `folder_id` — идентификатор каталога. Логи будут записываться в [лог-группу](../../logging/concepts/log-group.md) по умолчанию для этого каталога.
            * `log_group_id` — идентификатор пользовательской лог-группы. Логи будут записываться в нее.

                Укажите один из двух параметров: `folder_id` либо `log_group_id`.

    1. Воспользуйтесь вызовом [ClusterService.Update](../api-ref/grpc/Cluster/update.md) и выполните запрос, например с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

        ```bash
        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
        ```

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/grpc/Cluster/create.md#yandex.cloud.operation.Operation).

{% endlist %}