簡體   English   中英

在 Azure Databricks 和 Terraform 中安裝帶有 AAD 直通的 ADLS gen2

[英]Mounting ADLS gen2 with AAD passthrough in Azure Databricks with Terraform

我正在嘗試使用 Databricks Terraform 提供程序將我的 ADLS gen2 存儲容器安裝到 DBFS 中,使用 Azure Active Directory 直通。 我正在按照此處此處的說明進行操作,但是當 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的存儲容器,它們是在名稱為var.sa_nameazurerm_storage_account中創建的;因此是 URI。)

我覺得這個錯誤是由於我的根本誤解,而不是簡單的遺漏。 我的基本假設是,我可以使用 AAD 直通為工作區安裝存儲容器,作為我部署整個基礎結構時的便利。 也就是說,每當用戶開始使用工作區時,任何新的直通集群都將能夠以零設置使用這些掛載。

我可以按照 AAD 直通指令手動安裝存儲容器:啟動一個啟用直通的高並發集群,然后使用dbutils.fs.mount進行安裝。 這是在使用我的用戶身份(而不是服務主體)登錄到 Databricks 工作區時。 這是問題的根源嗎? 服務委托人不適合這項任務嗎?

(有趣的是,如果我嘗試使用未啟用直通的集群訪問手動創建的裝載上的文件,Databricks 運行時會給我完全相同的錯誤。)

是的,這是由於為該操作使用服務主體而產生的問題。 Azure 憑據直通文檔說

您不能將配置有 ADLS 憑據(例如,服務主體憑據)的群集與憑據直通一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM