使用Terraform创建Databricks管理员用户时认证错误排查
问题:使用Databricks Terraform Provider部署资源时出现认证错误
执行terraform plan时收到以下错误:
2023-06-07T14:50:50.4892773Z Error: Invalid JSON received (529 bytes): <!doctype html><html><head><meta charset="utf-8"/><meta http-equiv="Content-Language" content="en"/><title>Databricks - Sign In</title><meta name="viewport" content="width=960"/><link rel="icon" type="image/png" href="/favicon.ico"/><meta http-equiv="content-type" content="text/html; charset=UTF8"/><link rel="icon" href="/favicon.ico"><script defer="defer" src="/static/js/login/login.96b6985d.js"></script></head><body class="light-mode"><uses-legacy-bootstrap><div id="login-page"></div></uses-legacy-bootstrap></body></html> with module.databricks.data.databricks_group.admins, on ../modules/landingzone/FADS/databricks/databricks_admin.tf line 8, in data "databricks_group" "admins": 8: data "databricks_group" "admins" {
当前Terraform配置片段:
provider "databricks" { host = azurerm_databricks_workspace.databricks_workspace.workspace_url azure_workspace_resource_id = azurerm_databricks_workspace.databricks_workspace.id } # Gathers data about the admins Databricks workspace group data "databricks_group" "admins" { display_name = "admins" depends_on = [azurerm_databricks_workspace.databricks_workspace] } resource "databricks_user" "admin_user" { for_each = var.databricks.databricks_admin_users user_name = each.key depends_on = [azurerm_databricks_workspace.databricks_workspace] }
部署使用的服务主体拥有订阅Owner权限,询问是否缺少认证配置,以及如何添加。
解答
确实缺少认证配置。当前provider块仅指定了Databricks工作区的地址和资源ID,但没有提供服务主体的认证凭据,导致请求被重定向到Databricks登录页面(错误返回的HTML就是登录页内容)。
需要在databricks provider块中添加服务主体的认证参数,修改后的配置如下:
provider "databricks" { host = azurerm_databricks_workspace.databricks_workspace.workspace_url azure_workspace_resource_id = azurerm_databricks_workspace.databricks_workspace.id azure_client_id = var.azure_client_id # 服务主体的Client ID azure_client_secret = var.azure_client_secret # 服务主体的Client Secret azure_tenant_id = var.azure_tenant_id # Azure租户ID }
说明:
azure_client_id:你的服务主体应用程序IDazure_client_secret:服务主体生成的客户端密钥azure_tenant_id:Azure租户的ID
这些参数可以通过变量传入,也可以直接使用环境变量(如ARM_CLIENT_ID、ARM_CLIENT_SECRET、ARM_TENANT_ID),Terraform会自动读取这些环境变量作为认证凭据。
内容的提问来源于stack exchange,提问作者RSW
相关产品推荐
相关产品推荐

