我正在尝试使用Databricks Terraform提供程序,通过Azure Active Directory传递将我的ADLS第2代存储容器装载到DBFS中。我遵循这里和这里的说明,但当Terraform尝试部署装载资源时,我得到了以下错误:
错误:找不到ADLS Gen2令牌
我的Terraform代码如下所示(与提供商文档中的示例非常相似(,我正在使用Azure服务主体进行部署,该主体在同一模块中创建Databricks工作区:
provider "databricks" {
host = azurerm_databricks_workspace.this.workspace_url
azure_workspace_resource_id = azurerm_databricks_workspace.this.id
}
data "databricks_node_type" "smallest" {
local_disk = true
depends_on = [azurerm_databricks_workspace.this]
}
data "databricks_spark_version" "latest" {
depends_on = [azurerm_databricks_workspace.this]
}
resource "databricks_cluster" "passthrough" {
cluster_name = "terraform-mount"
spark_version = data.databricks_spark_version.latest.id
node_type_id = data.databricks_node_type.smallest.id
autotermination_minutes = 10
num_workers = 1
spark_conf = {
"spark.databricks.cluster.profile" = "serverless",
"spark.databricks.repl.allowedLanguages" = "python,sql",
"spark.databricks.passthrough.enabled" = "true",
"spark.databricks.pyspark.enableProcessIsolation" = "true"
}
custom_tags = {
"ResourceClass" = "Serverless"
}
}
resource "databricks_mount" "mount" {
for_each = toset(var.storage_containers)
name = each.value
cluster_id = databricks_cluster.passthrough.id
uri = "abfss://${each.value}@${var.sa_name}.dfs.core.windows.net"
extra_configs = {
"fs.azure.account.auth.type" = "CustomAccessToken",
"fs.azure.account.custom.token.provider.class" = "{{sparkconf/spark.databricks.passthrough.adls.gen2.tokenProviderClassName}}",
}
depends_on = [
azurerm_storage_container.data
]
}
(为了清楚起见,azurerm_storage_container.data
是一组名称来自var.storage_containers
的存储容器,这些容器是在azurerm_storage_account
中创建的,名称为var.sa_name
;因此为URI。(
我觉得这个错误是由于我的根本误解,而不是简单的疏忽。我的基本假设是,当我部署整个基础设施时,我可以使用AAD直通为工作区装载存储容器,这是一种方便。也就是说,每当用户开始使用工作区时,任何新的直通集群都可以在零设置的情况下使用这些装载。
我可以按照AAD直通指令手动装载存储容器:在启用直通的情况下启动高并发集群,然后使用dbutils.fs.mount
装载。这是在使用我的用户标识(而不是服务主体(登录Databricks工作区时发生的。这是问题的根源吗;服务负责人是否不适合此任务?
(有趣的是,如果我试图使用未启用直通的集群访问手动创建的装载上的文件,Databricks运行时会给我完全相同的错误。(
是的,这是由于该操作使用服务主体而产生的问题。Azure凭证传递文档说:
您不能使用配置有ADLS凭据的群集,例如,配置有凭据传递的服务主体凭据。