如何通过 Terraform 创建 Azure Databricks Notebook?

How to create Azure Databricks Notebook via Terraform?

所以我对 Terraform 完全陌生,我发现通过在 Terraform 中使用它 main.tf 我可以创建 Azure Databricks 基础结构:

resource "azurerm_databricks_workspace" "bdcc" {
  depends_on = [
    azurerm_resource_group.bdcc
  ]

  name = "dbw-${var.ENV}-${var.LOCATION}"
  resource_group_name = azurerm_resource_group.bdcc.name
  location = azurerm_resource_group.bdcc.location
  sku = "standard"

  tags = {
    region = var.BDCC_REGION
    env = var.ENV
  }
}

而且我还发现了here

通过使用它,我什至可以在此 Azure DataBricks 基础结构中创建特定的笔记本:

resource "databricks_notebook" "notebook" {
  content_base64 = base64encode(<<-EOT
    # created from ${abspath(path.module)}
    display(spark.range(10))
    EOT
  )
  path = "/Shared/Demo"
  language = "PYTHON"
}

但是由于我是新手,所以我不确定应该以什么顺序将这些代码放在一起。

如果有人能给我指出如何在 Azure Databricks 上通过 Terraform 创建笔记本的完整示例,那就太好了。

先谢谢你!

一般来说,您可以按任何顺序放置这些对象 - Terraform 的工作是检测对象之间的依赖关系并 create/update 它们以正确的顺序排列。例如,您不需要在 azurerm_databricks_workspace 资源中包含 depends_on,因为 Terraform 会在创建工作空间之前发现它需要资源组,因此工作空间创建将跟随资源组的创建.如果可能,Terraform 正在尝试并行进行更改。

但正因为如此,当您同时拥有工作区资源和工作区对象(如笔记本、集群等)时,它会变得稍微复杂一些。由于没有明确的依赖关系,Terraform 将尝试在创建笔记本的同时创建工作区,它将失败,因为工作区不存在 - 通常您会收到有关身份验证错误的消息。

解决方案是在笔记本和工作区之间建立明确的依赖关系,另外您需要配置 Databricks 提供程序的身份验证以指向新创建的工作区(用户和服务主体身份验证之间存在差异 - 您可以找到更多信息docs 中的信息)。最后您的代码将如下所示:

resource "azurerm_databricks_workspace" "bdcc" {
  name = "dbw-${var.ENV}-${var.LOCATION}"
  resource_group_name = azurerm_resource_group.bdcc.name
  location = azurerm_resource_group.bdcc.location
  sku = "standard"

  tags = {
    region = var.BDCC_REGION
    env = var.ENV
  }
}

provider "databricks" {
  host = azurerm_databricks_workspace.bdcc.workspace_url
}

resource "databricks_notebook" "notebook" {
  depends_on = [azurerm_databricks_workspace.bdcc]
  ...
}

不幸的是,无法将 depends_on 放在提供程序级别,因此您需要将其放入与工作区一起创建的每个 Databricks 资源中。通常最好的做法是为工作区创建一个单独的模块,并为 Databricks 工作区内的对象创建一个单独的模块。

P.S。我建议阅读一些关于 Terraform 的书籍或文档。比如Terraform: Up & Running就很好intro