如何用Terraform实现Databricks新建集群自动安装库?
实现Databricks集群批量装库及新集群自动装库的方案
一、批量给现有集群安装库
通过Terraform的databricks_library资源结合for_each遍历现有集群,批量绑定指定库。
- 先通过数据源获取所有现有集群:
data "databricks_clusters" "all" {}
- 定义需要安装的库列表(支持PyPI、Maven、Whl等多种类型):
locals { required_libraries = [ { pypi = { package = "pandas==2.1.0" } }, { maven = { coordinates = "org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0" } } # 可添加其他库类型,比如whl、cran等 ] }
- 批量给每个集群绑定库:
resource "databricks_library" "cluster_libraries" { for_each = { for cluster in data.databricks_clusters.all.clusters : cluster.id => cluster } cluster_id = each.value.id dynamic "library" { for_each = local.required_libraries content { # 动态生成PyPI库配置 dynamic "pypi" { for_each = library.value.pypi != null ? [library.value.pypi] : [] content { package = pypi.value.package } } # 动态生成Maven库配置 dynamic "maven" { for_each = library.value.maven != null ? [library.value.maven] : [] content { coordinates = maven.value.coordinates } } # 如需其他类型库,添加对应dynamic块即可 } } }
运行terraform apply后,所有现有集群会自动安装指定库。
二、让后续新建集群自动安装库
有两种可靠方式实现:
方式1:复用Terraform集群模板
定义包含库配置的集群资源模板,后续新建集群直接复用该模板的库配置:
resource "databricks_cluster" "standard_template" { cluster_name = "standard-cluster-template" spark_version = "13.3.x-scala2.12" node_type_id = "m5.xlarge" autoscale { min_workers = 1 max_workers = 5 } # 嵌入统一的库配置 dynamic "library" { for_each = local.required_libraries content { dynamic "pypi" { for_each = library.value.pypi != null ? [library.value.pypi] : [] content { package = pypi.value.package } } dynamic "maven" { for_each = library.value.maven != null ? [library.value.maven] : [] content { coordinates = maven.value.coordinates } } } } }
后续创建新集群时,直接复制该模板的library块或复用local.required_libraries变量,即可自动安装指定库。
方式2:通过集群策略强制安装库
创建Databricks集群策略,强制所有使用该策略的新集群必须包含指定库:
resource "databricks_cluster_policy" "mandatory_libraries" { name = "mandatory-libraries-policy" definition = jsonencode({ "spark_version" : { "type" : "regex", "pattern" : "^13\\..*$" }, "node_type_id" : { "type" : "allowlist", "values" : ["m5.xlarge", "m5.2xlarge"] }, # 固定库配置,所有用该策略的集群都会自动包含 "libraries" : { "type" : "fixed", "value" : local.required_libraries } }) }
后续在UI或Terraform中创建集群时,关联该策略,集群会自动安装指定库,无需手动配置。
内容的提问来源于stack exchange,提问作者BackgroundChecker1994
相关产品推荐
相关产品推荐

