Поделиться через


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

Это важно

Эта функция является экспериментальной.

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

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

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

  • Нет необходимости скачать Terraform и terraform-provider-databricks перед развертыванием
  • Избегает проблем с брандмауэрами, прокси-серверами и пользовательскими реестрами поставщиков
  • Подробные изменения в виде diff доступны с помощью bundle plan -o json
  • Быстрое развертывание
  • Сокращение времени выпуска новых ресурсов пакета, так как нет необходимости проводить синхронизацию с выпуском поставщика Terraform.

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

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

  • Для существующих пакетов переносите их с помощью databricks bundle deployment migrate.
  • Для новых пакетов разверните их с помощью переменной среды DATABRICKS_BUNDLE_ENGINE, установленной в direct.

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

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

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

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

    databricks bundle deployment migrate -t my_target
    
  3. Убедитесь, что миграция выполнена успешно. Команда databricks bundle plan должна завершиться успешно, и она не должна отображать никаких изменений.

    databricks bundle plan -t my_target
    
    • Если проверка завершилась ошибкой, удалите новый файл состояния:

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

      databricks bundle deploy -t my_target
      

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

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

DATABRICKS_BUNDLE_ENGINE=direct databricks bundle deploy -t my_target

Каковы изменения в подсистеме прямого развертывания?

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

Вычисление различий состояния ресурса

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

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

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

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

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

Подстановка и поиск $resources

$resources наиболее часто используется для разрешения идентификаторов подстановки (например, $resources.jobs.my_job.id), что ведет себя одинаково между механизмами Terraform и прямыми механизмами развертывания.

Однако разрешение подстановки $resources в подсистеме прямого развертывания (например, $resources.pipelines.my_pipeline.name) выполняется двумя шагами.

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

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