- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我当前的项目,我已使用 Terraform 在 Azure 上部署了一个 Databricks 工作区,并且我正在尝试创建一个额外的工作区。我的代码存储库基于多个模块,我想使用 Terraform 将其他工作区添加到我的 Azure 订阅。然而,事情并没有按照我想要的方式进行,因为我无法为不同的工作区创建集群。创建 databricks 工作区不是问题,创建相关的 databricks 提供程序资源才是问题。
目录结构(我有其他模块,但未包含这些模块,因为它们与此问题无关):
.
|-config
| |-dev.tfvars
|-main.tf
|-outputs.tf
|-providers.tf
|-variables.tf
|-modules
| |-db-cluster
| | |-main.tf
| | |-outputs.tf
| | |-variables.tf
| |-dbw
| | |-main.tf
| | |-outputs.tf
| | |-variables.tf
| |-network
| | |-main.tf
| | |-outputs.tf
| | |-variables.tf
利用模块,我使用根文件夹中的 main.tf 文件来确定模块,然后该模块应该创建(基于计数等内容)相关资源。
例如,在下面的 main.tf 文件中,我们确定 databricks 工作区模块 (dbw) 和 databricks 集群模块 (db-cluster)。
# ./main.tf file in the root module
# Databricks workspace
module "dbw-default" {
count = length(var.dbw-names)
source = "./modules/dbw"
dbw-name = var.dbw-names[count.index]
dbw-project = var.project
dbw-env = var.env
dbw-resource-group-name = module.rg-default[index(var.rg-names, "databricks")].name
dbw-location = var.location
dbw-sku = var.dbw-sku
dbw-tags = merge(var.tags, { "purpose" = "databricks", "env" = var.env })
}
# Databricks Cluster
module "db-cluster-default" {
source = "./modules/db-cluster"
db-cluster-name = var.db-cluster-name
db-cluster-env = var.env
db-cluster-project = var.db-cluster-project
db-cluster-tags = merge(var.tags, { "purpose" = "databricks", "env" = var.env })
db-cluster-min-workers = var.db-cluster-min-workers
db-cluster-max-workers = var.db-cluster-max-workers
db-cluster-autotermination-minutes = var.db-cluster-autotermination-minutes
}
这与 dbw 模块中的 main.tf 相结合(如下详述),使用 azure_rm 提供程序创建 databricks 工作区。
# ./modules/dbw/main.tf
resource "azurerm_databricks_workspace" "default" {
name = format("dbw-%s-%s-%s", var.dbw-name, var.dbw-project, var.dbw-env)
resource_group_name = var.dbw-resource-group-name
location = var.dbw-location
sku = var.dbw-sku
tags = var.dbw-tags
}
最后,我们有了 databricks 集群模块,其中再次指定了提供程序。
# ./modules/db-cluster/main.tf
terraform {
required_providers {
databricks = {
source = "databricks/databricks"
version = "~> 1.6"
}
}
}
resource "databricks_cluster" "shared_autoscaling" {
cluster_name = format("db-cluster-%s-%s", var.db-cluster-project, var.db-cluster-env)
spark_version = data.databricks_spark_version.latest_lts.id
node_type_id = data.databricks_node_type.smallest.id
autotermination_minutes = var.db-cluster-autotermination-minutes
autoscale {
min_workers = var.db-cluster-min-workers
max_workers = var.db-cluster-max-workers
}
}
这与根模块中的提供者 block 相关:
# ./providers.tf
# providers and versions
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.29"
}
databricks = {
source = "databricks/databricks"
version = "~> 1.6"
}
}
backend "azurerm" {
# environment variables are available from YAML pipeline to authenticate using service principal.
}
}
provider "azurerm" {
features {}
}
provider "databricks" {
azure_workspace_resource_id = module.dbw-default.id
}
因此,在制作多个模块时,我在此提供程序 block 中将 module.dbw-default.id 更改为 module.dbw-default[0].id ,但这不起作用。完全忽略此处的引用并仅在数据库集群模块级别使用它也是行不通的。我收到以下错误消息:
Error: cannot read cluster: cannot configure azure-client-secret auth: cannot get workspace: please set `azure_workspace_resource_id` provider argument.
起初我尝试引用 module.dbw-default[0].id 并为此尝试了几种变体,但这不起作用。此外,我尝试将 databricks 的 terraform 提供程序 block 移动到 db-cluster 模块,并将 dbw-id 传递给那里的提供程序中的引用,但这也不起作用。我将非常感谢任何帮助!我想强调的是,这在使用单个工作区时一切正常,但在使用多个工作区时就不再有效。
起初我尝试引用 module.dbw-default[0].id 并为此尝试了几种变体,但这不起作用。此外,我尝试将 databricks 的 terraform 提供程序 block 移动到 db-cluster 模块,但这也不起作用。
最佳答案
好吧,这让我陷入了困境。简而言之,不可能动态设置提供程序。这意味着使用 for_each 指定 databricks 工作区意味着您无法使用 databricks 提供程序为这些工作区动态创建集群(或为其配置任何其他内容)。这与 Terraform 的配置方式有关。有关更多详细信息,请参阅 GitHub 问题 here .
现在如何前进:如果我们的工作空间数量有限,我们可以通过简单地复制根目录中的代码块来显式定义它们(例如 dbw-default-first 、 dbw-default-second ) main.tf 文件。然后在providers.tf文件中,我们可以使用不同的别名列出databricks提供程序的多个副本:
provider "databricks" {
alias = "first"
azure_workspace_resource_id = module.dbw-default-first.id
}
provider "databricks" {
alias = "second"
azure_workspace_resource_id = module.dbw-default-second.id
}
之后,在 main.tf 文件中配置集群或其他数据 block 设置时,我们添加特定的提供程序:
providers = {
databricks = databricks.first
}
同样将其添加到第二个 databricks 集群中。这个解决方案的不幸之处在于我们必须对每个副本进行硬编码,这是一个丑陋的解决方案。不幸的是,这是唯一可行的选项,因为我们无法动态指定它。
关于azure - 在 Azure 上部署多个 databricks 工作区时如何配置 Terraform Databricks 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74706267/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!