使用 terraform 的 Azure Databricks 工作区

Azure Databricks workspace using terraform

正在尝试使用 terraform 创建 Databricks 工作区,但参数不受支持:

resource "azurerm_databricks_workspace" "workspace" {
  name                = "testdata"
  resource_group_name = "cloud-terraform"
  location            = "east us"
  sku                 = "premium"
  virtual_network_id  = azurerm_virtual_network.vnet.id
  public_subnet_name  = "databrickpublicsubnet"
  public_subnet_cidr  = "10.0.0.0/22"
  private_subnet_name = "databrickprivatesubnet"
  private_subnet_cidr  = "10.0.0.0/22"
    
  tags = {
    Environment = "terraformtest"
  }
}

错误:此处不应有名为“virtual_network_id”的参数。此处不应使用名为“public_subnet_name”的参数。此处不应有名为“public_subnet_cidr”的参数。

我没有尝试通过 Terraform 设置数据块,但我相信(per the docs)您需要在块中添加这些属性:

resource "azurerm_databricks_workspace" "workspace" {
  name                = "testdata"
  resource_group_name = "cloud-terraform"
  location            = "east us"
  sku                 = "premium"
  
  custom_parameters {
    virtual_network_id  = azurerm_virtual_network.vnet.id
    public_subnet_name  = "databrickpublicsubnet"
    private_subnet_name = "databrickprivatesubnet"
  }

  tags = {
    Environment = "terraformtest"
  }
}

这两个 cidr 条目不是 TF 文档的一部分。

没错。您可以添加 terraform 命令来创建子网(假设 vnet 已经存在,您可以使用数据 azurerm_virtual_network 然后创建两个新子网,然后引用两个新 public/private 子网的名称。

然后你 运行 陷入了似乎 chicken/egg 的问题。

出现错误:如果设置了 'public_subnet_name',则必须为 'public_subnet_network_security_group_association_id' 定义一个值。

问题是,网络安全组通常 auto-generated 在创建数据块工作区(如 databricksnsgrandomstring)时,它在门户中创建时有效,但通过 terraform,我必须定义它才能创建工作区,但在我创建工作区之前它还不存在。解决方法是不要让它生成自己的 nsg 名称,而是使用 nsg 资源块自己命名。

下面是我使用的代码(dbname 表示数据块名称!)。我在这里 添加到现有资源组 'qa' 和现有 vnet,仅显示 public 子网和 nsg 关联,您可以轻松添加私有的)。只是 copy/modify 在你自己的 tf 文件中。并且您肯定需要将 address_prefix 更改为您自己的 CIDR 值,该值在您的 vnet 中工作,而不是踩踏现有的子网。

resource "azurerm_subnet" "public" {
    name = "${var.dbname}-public-subnet"
    resource_group_name = data.azurerm_resource_group.qa.name
    virtual_network_name = data.azurerm_virtual_network.vnet.name
    address_prefixes = ["1.2.3.4/24"]

    delegation {
        name = "databricks_public"
        service_delegation {
            name = "Microsoft.Databricks/workspaces"
        }
    }
}

resource "azurerm_network_security_group" "nsg" {
    name = "${var.dbname}-qa-databricks-nsg"
    resource_group_name = data.azurerm_resource_group.qa.name
    location= data.azurerm_resource_group.qa.location
}

resource "azurerm_subnet_network_security_group_association" "nsga_public" {
    network_security_group_id = azurerm_network_security_group.nsg.id
    subnet_id = azurerm_subnet.public.id
}

然后在您的 databricks_workspace 块中,将您的自定义参数替换为

    custom_parameters {
        public_subnet_name  = azurerm_subnet.public.name
        public_subnet_network_security_group_association_id = azurerm_subnet_network_security_group_association.nsga_public.id
        private_subnet_name = azurerm_subnet.private.name
        private_subnet_network_security_group_association_id = azurerm_subnet_network_security_group_association.nsga_private.id
        virtual_network_id  = data.azurerm_virtual_network.vnet.id
    }