Переход на движок прямого развертывания

Декларативные пакеты автоматизации изначально были созданы на основе поставщика Databricks Terraform для управления развертываниями. Однако Databricks CLI версии 0.279.0 и более поздних версий поддерживают два разных модуля развертывания: terraform и direct. Подсистема прямого развертывания обеспечивает значительные преимущества и не зависит от Terraform.

Новые пакеты, созданные с помощью Интерфейса командной строки Databricks версии 1.3.0 и выше, используют подсистему прямого развертывания по умолчанию. Пакеты, созданные с помощью более ранних версий интерфейса командной строки, можно перенести из подсистемы развертывания Terraform в подсистему прямого развертывания с помощью шагов миграции, описанных на этой странице.

Это важно

Databricks рекомендует перейти на механизм прямого развертывания, так как механизм развертывания Terraform вскоре будет выведен из эксплуатации, а механизм прямого развертывания станет механизмом по умолчанию. См. «Для пакетов декларативной автоматизации скоро будет по умолчанию использоваться механизм прямого развертывания».

Преимущества прямого развертывания

Новый модуль прямого развертывания использует пакет SDK Databricks Go и имеет следующие преимущества:

  • Ускоренное развертывание: развертывание пакетов выполняется до 40 % быстрее.
  • Более мощная и детализированная проверка и планирование: Подробное сравнение изменений с отчетами bundle plan -o json, содержащими подробную информацию по каждому полю, объясняет, что вызвало конкретное действие.
  • Повторно используемые планы: bundle deploy --plan plan.json выполняет ранее созданный план, гарантируя, что в продакшен попадают только утвержденные действия, а развертывание происходит быстрее, поскольку этап вычисления плана пропускается.
  • Простая настройка. Проблемы с брандмауэрами, прокси-серверами и пользовательскими реестрами поставщиков избегаются.
  • Дополнительные ресурсы: поддерживаются дополнительные ресурсы, такие как каталоги, внешние расположения, конечные точки поиска ИИ и пространства Genie.
  • Неизменяемые папки: ресурсы при необходимости могут быть развернуты в неизменяемую папку, доступную только для чтения, для защиты от несанкционированных изменений и единообразия развертывания. См. immutable_folder.

Начните использовать прямое развертывание

Чтобы начать работу с новым механизмом прямого развертывания, выполните следующие действия.

Перенос существующего пакета

В подсистеме прямого развертывания используется собственный файл состояния JSON. Схема отличается от файла состояния Terraform JSON. Команда bundle deployment migrate преобразует файл состояния Terrform (terraform.tfstate) в файл состояния прямого развертывания (resources.json). Команда читает идентификаторы из существующего развертывания.

  1. Выполните полное развертывание с помощью Terraform:

    databricks bundle deploy -t my_target
    
  2. Перенесите развертывание.

    databricks bundle deployment migrate -t my_target
    

    Note

    В Databricks CLI версий 0.280.0–1.4.x запускается bundle deployment migratebundle plan и останавливает миграцию, если план фиксирует какие-либо действия. В этом случае перезапускайте и попробуйте повторную миграцию. Если всё равно не получится, можно пропустить проверку плана с помощью --noplancheck.

  3. Убедитесь, что миграция выполнена успешно. Запусти databricks bundle plan, что должно быть успешным, и не сообщай о действиях.

    databricks bundle plan -t my_target
    

    Note

    План может показывать изменения в ресурсах, даже если ваша локальная конфигурация соответствует развернутому ресурсу. Это может произойти, так как предыдущий файл состояния Terraform содержит поля метаданных, которые платформа заполняет после развертывания, которые отсутствуют в конфигурации пакета. Эти различия не являются реальными смещениями конфигурации и не изменяют поведение задания. Непосредственный механизм согласовывает их при следующем bundle deploy. Дополнительные сведения о том, как прямой механизм вычисляет диффы, см. в разделе "Расчет состояния ресурса".

    • Если проверка завершается ошибкой, удалите новый файл состояния:

      rm .databricks/bundle/my_target/resources.json
      
    • Если проверка выполнена успешно, разверните пакет, чтобы синхронизировать файл состояния с рабочей областью:

      databricks bundle deploy -t my_target
      

Прямое развертывание нового пакета

Команда bundle migrate не работает над пакетами, которые никогда не были развернуты, так как нет файла состояния. Вместо этого выполните одно из следующих действий:

  • Установите bundle.engine в файл databricks.yml:

    bundle:
      engine: direct
    
  • DATABRICKS_BUNDLE_ENGINE Задайте переменную среды и разверните:

    DATABRICKS_BUNDLE_ENGINE=direct databricks bundle deploy -t my_target
    

Если задана конфигурация и переменная среды, то конфигурация имеет приоритет.

Сравнение механизмов развертывания

Новый модуль прямого развертывания в основном ведет себя так же, как и подсистема развертывания Terrform, но есть некоторые различия.

Вычисление диффа состояния ресурса

В отличие от Terraform, который поддерживает одно состояние ресурса (сочетание локальной конфигурации и удаленного состояния), новый модуль сохраняет эти отдельные и записывает только локальную конфигурацию в файле состояния.

Вычисление диффа состояния ресурсов выполняется двумя шагами.

  1. Конфигурация локального пакета сравнивается с конфигурацией моментального снимка, используемой для последнего развертывания. Удаленное состояние не играет никакой роли.
  2. Удаленное состояние сравнивается с конфигурацией снимка состояния, используемой для последнего развертывания.

Результатом является то, что:

  • databricks.yml Изменения ресурсов никогда не игнорируются и всегда активируют обновление.
  • Поля ресурсов, не обрабатываемые реализацией, не вызывают несогласованную ошибку результата. Эти ресурсы успешно развертываются посредством прямого механизма управления, но это может привести к расхождению. Развернутые ресурсы обновляются во время следующего плана или развертывания.

Удалены параметры конфигурации

Два механизма по-разному обрабатывают параметры, которые вы удаляете из конфигурации пакета:

  • При использовании механизма Terraform удаление поля set из databricks.yml оставляет соответствующее значение на платформе без изменений. Terraform управляет только полями, которые явно присутствуют в конфигурации, поэтому удаленное поле сохраняет любое значение, которое оно было во время последнего развертывания.
  • При использовании прямого движка удаление заданного поля из databricks.yml возвращает значение к значению ресурса по умолчанию. Поскольку механизм прямого применения сравнивает локальную конфигурацию с предыдущим снимком состояния, поле, которое больше отсутствует, считается изменением, и при следующем развертывании ресурс обновляется до значения по умолчанию.

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

Поиск замены ресурсов

Подстановки ресурсов доступны для разрешения идентификаторов ресурсов, например ${resources.jobs.my_job.id}. См замены. Разрешение подстановок ресурсов в подсистеме прямого развертывания выполняется двумя шагами.

  1. Ссылки на поля, присутствующие в локальной конфигурации, разрешаются до значений, указанных в локальной конфигурации.
  2. Ссылки, которые отсутствуют в локальной конфигурации, определяются на основе удаленного состояния. Это состояние, извлекаемое с помощью соответствующего GET запроса для данного ресурса.

Схема, используемая для устранения ${resource.*} подстановки, находится в файле out.fields.txt. Поля, помеченные как ALL и STATE могут использоваться для локального разрешения. Поля, помеченные как ALL или REMOTE могут использоваться для удаленного разрешения.

Совместимость ресурсов

Для следующих ресурсов требуется подсистема прямого развертывания и не поддерживается подсистемой развертывания Terraform:

Кроме того, поле lifecycle.started доступно только в механизме прямого развертывания и только для apps, clusters и sql_warehouses. Если задано значение true, он развертывает ресурс в режиме запуска. См. жизненный цикл.