重要
此功能为试验性的。
Databricks 资产捆绑包最初基于 Databricks Terraform 提供程序 构建,用于管理部署。 但是,为了摆脱此依赖项,Databricks CLI 版本 0.279.0 及更高版本支持两个不同的部署引擎: terraform 和 direct。 直接部署引擎不依赖于 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。
使用 Terraform 执行完整部署:
databricks bundle deploy -t my_target迁移当前部署:
databricks bundle deployment migrate -t my_target验证迁移是否成功。 该
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 不同,新引擎将保留这些独立状态,并且只记录其状态文件中的本地配置。
资源状态差异计算在两个步骤中完成:
- 本地捆绑包配置与用于最新部署的快照配置进行比较。 远程状态没有作用。
- 远程状态与用于最新部署的快照配置进行比较。
结果是:
-
databricks.yml资源更改永远不会被忽略,并且将始终触发更新。 - 实现未处理的资源字段不会触发不一致的结果错误。 这些资源由直接引擎成功部署,但这可能会导致偏移。 部署的资源在下一个计划或部署期间更新。
$资源替换与查找
最常见的用途 $resources 是在 Terraform 和直接部署引擎之间以相同的方式解析替换 ID(例如 $resources.jobs.my_job.id)。
但是,在直接部署引擎中执行$resources 替换的解析(例如,$resources.pipelines.my_pipeline.name)是通过两个步骤完成的:
- 指向本地配置中存在的字段的引用将解析为本地配置中提供的值。
- 本地配置中不存在的引用将从远程状态解析。 这是使用给定资源的相应
GET请求提取的状态。
用于 $resource 解析的架构在文件 out.fields.txt中可用。 标记为 ALL 和 STATE 的字段可用于本地解析。 可以用于远程解析的字段是那些标记为 ALL 或 REMOTE 的字段。