迁移到直接部署引擎

重要

此功能为试验性的

Databricks 资产捆绑包最初基于 Databricks Terraform 提供程序 构建,用于管理部署。 但是,为了摆脱此依赖项,Databricks CLI 版本 0.279.0 及更高版本支持两个不同的部署引擎: terraformdirect。 直接部署引擎不依赖于 Terraform,并且很快就会成为默认值。 最终将弃用 Terraform 部署引擎。

直接部署的优点是什么?

新的直接部署引擎使用 Databricks Go SDK ,并提供以下优势:

  • 无需在进行部署前下载 Terraform 和 terraform-provider-databricks
  • 避免与防火墙、代理和自定义服务提供商注册表相关的问题
  • 使用 bundle plan -o json 可获取更改的详细差异
  • 更快的部署
  • 缩短发布新捆绑包资源的时间,因为无需与 Terraform 提供程序版本保持一致

如何开始使用直接部署?

若要开始使用新的直接部署引擎,请执行以下作:

  • 对于现有捆绑包,请使用 databricks bundle deployment migrate 迁移它们。
  • 对于新捆绑包,请在部署它们时将环境变量设置为DATABRICKS_BUNDLE_ENGINE

迁移现有捆绑包

直接部署引擎使用自己的 JSON 状态文件。 架构不同于 Terraform JSON 状态文件。 捆绑部署迁移命令将 Terrform 状态文件 (terraform.tfstate) 转换为直接部署状态文件 (resources.json)。 该命令从现有部署读取 ID。

  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 是在 Terraform 和直接部署引擎之间以相同的方式解析替换 ID(例如 $resources.jobs.my_job.id)。

但是,在直接部署引擎中执行$resources 替换的解析(例如,$resources.pipelines.my_pipeline.name)是通过两个步骤完成的:

  1. 指向本地配置中存在的字段的引用将解析为本地配置中提供的值。
  2. 本地配置中不存在的引用将从远程状态解析。 这是使用给定资源的相应 GET 请求提取的状态。

用于 $resource 解析的架构在文件 out.fields.txt中可用。 标记为 ALLSTATE 的字段可用于本地解析。 可以用于远程解析的字段是那些标记为 ALLREMOTE 的字段。