所以我对terraform完全陌生,我发现通过在terraform main.tf中使用它,我可以创建Azure基础设施:
resource "azurerm_databricks_workspace" "bdcc" {
depends_on = [
azurerm_resource_group.bdcc
]
name = "dbw-${var.ENV}-${var.LOCATION}"
resource_group_name = azurerm_resource_group.bdcc.name
location = azurerm_resource_group.bdcc.location
sku = "standard"
tags = {
region = var.BDCC_REGION
env = var.ENV
}
}我还找到了这里
通过使用它,我甚至可以在这个Azure DataBricks基础结构中创建特定的笔记本:
resource "databricks_notebook" "notebook" {
content_base64 = base64encode(<<-EOT
# created from ${abspath(path.module)}
display(spark.range(10))
EOT
)
path = "/Shared/Demo"
language = "PYTHON"
}但是,由于我是新手,所以我不确定应该按照什么顺序将这些代码放在一起。
如果有人能告诉我如何在上通过terraform创建笔记本的完整例子,那就太好了。
事先谢谢你!
发布于 2021-12-13 13:16:28
通常,您可以将这些对象按任何顺序放置-- Terraform的一项任务是检测对象之间的依赖关系,并以正确的顺序创建/更新它们。例如,您不需要在depends_on资源中使用azurerm_databricks_workspace,因为Terraform会在创建工作区之前发现它需要资源组,因此工作区创建将遵循资源组的创建。如果可能的话,Terraform正在尝试在并行中进行修改。
但正因为如此,当您将工作区资源与工作区对象(例如,笔记本、集群等)一起使用时,它会变得更加复杂。由于没有明确的依赖关系,Terraform将尝试在创建工作区的同时创建笔记本,但由于工作区不存在,它将失败--通常您会收到有关身份验证错误的消息。
解决方案是在笔记本和工作区之间有显式的依赖关系,另外还需要配置Databricks提供程序的身份验证以指向新创建的工作区(用户和服务主体身份验证之间存在差异--您可以在docs中找到更多信息)。最后,您的代码将如下所示:
resource "azurerm_databricks_workspace" "bdcc" {
name = "dbw-${var.ENV}-${var.LOCATION}"
resource_group_name = azurerm_resource_group.bdcc.name
location = azurerm_resource_group.bdcc.location
sku = "standard"
tags = {
region = var.BDCC_REGION
env = var.ENV
}
}
provider "databricks" {
host = azurerm_databricks_workspace.bdcc.workspace_url
}
resource "databricks_notebook" "notebook" {
depends_on = [azurerm_databricks_workspace.bdcc]
...
}不幸的是,没有办法将depends_on放在提供者级别,因此您需要将其放入与工作区一起创建的每个Databricks资源中。通常,最佳实践是为工作区创建一个单独的模块&为Databricks工作区中的对象设置单独的模块。
我建议阅读一些关于地形的书或文件。例如,Terraform: Up & Running是非常好的介绍
https://stackoverflow.com/questions/70333546
复制相似问题