使用 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
}
正在尝试使用 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
}