Databricks Terraform-szolgáltató
HashiCorp Terraform egy népszerű nyílt forráskódú eszköz, amellyel biztonságos és kiszámítható felhőinfrastruktúra jön létre több felhőszolgáltató között. A Databricks Terraform-szolgáltatóval rugalmas, hatékony eszközzel kezelheti Azure Databricks-munkaterületeit és a hozzá tartozó felhőinfrastruktúra adatait. A Databricks Terraform-szolgáltató célja az összes Databricks REST API támogatása, amely támogatja az adatplatformok üzembe helyezésének és kezelésének legbonyolultabb aspektusainak automatizálását. A Databricks ügyfelei a Databricks Terraform szolgáltatót használják fürtök és feladatok üzembe helyezésére és kezelésére, valamint az adathozzáférés konfigurálására. Az Azure Provider használatával hozhat létre Azure Databricks-munkaterületeket.
Első lépések
Ebben a szakaszban követelményeket telepít és konfigurál a Terraform és a Databricks Terraform-szolgáltató helyi fejlesztői gépen való használatához. Ezután konfigurálja a Terraform-hitelesítést. Ezt a szakaszt követve ez a cikk egy mintakonfigurációt tartalmaz, amellyel kísérletezhet egy Azure Databricks-jegyzetfüzet, -fürt és egy feladat kiépítésével, amellyel a jegyzetfüzetet egy meglévő Azure Databricks-munkaterületen futtathatja a fürtön.
Követelmények
Rendelkeznie kell a Terraform parancssori felületével. Lásd: Terraform letöltése a Terraform webhelyén.
Terraform-projektnek kell lennie. A terminálban hozzon létre egy üres könyvtárat, majd váltson rá. (A Terraform-konfigurációs fájlok mindegyikének a saját könyvtárában kell lennie, amelyet Terraform-projektneknevezünk.) Például:
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Terraform-konfigurációk belefoglalása a projekthez egy vagy több konfigurációs fájlba a Terraform-projektben. A konfigurációs fájl szintaxisával kapcsolatos információkért tekintse meg a Terraform nyelvi dokumentációját a Terraform webhelyén.
A Terraform-projekthez hozzá kell adnia egy függőséget a Databricks Terraform-szolgáltatóhoz. Adja hozzá a következőket a Terraform-projekt egyik konfigurációs fájljához:
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
A Terraform-projekt hitelesítését konfigurálnia kell. Lásd a Hitelesítést a Databricks Terraform szolgáltató dokumentációjában.
Mintakonfiguráció
Ez a szakasz egy mintakonfigurációt biztosít, amellyel kísérletezhet egy Azure Databricks-jegyzetfüzet, egy fürt és egy feladat üzembe helyezéséhez a fürtön, egy meglévő Azure Databricks-munkaterületen. Feltételezi, hogy már beállította a követelményeket, valamint létrehozott egy Terraform-projektet, és az előző szakaszban ismertetett Terraform-hitelesítéssel konfigurálta a projektet.
Hozzon létre egy fájlt
me.tf
a Terraform-projektben, és adja hozzá a következő kódot. Ez a fájl információt kap az aktuális felhasználóról (Önről):# Retrieve information about the current user. data "databricks_current_user" "me" {}
Hozzon létre egy másik nevű fájlt
notebook.tf
, és adja hozzá a következő kódot. Ez a fájl a jegyzetfüzetet jelöli.variable "notebook_subdirectory" { description = "A name for the subdirectory to store the notebook." type = string default = "Terraform" } variable "notebook_filename" { description = "The notebook's filename." type = string } variable "notebook_language" { description = "The language of the notebook." type = string } resource "databricks_notebook" "this" { path = "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" language = var.notebook_language source = "./${var.notebook_filename}" } output "notebook_url" { value = databricks_notebook.this.url }
Hozzon létre egy másik nevű fájlt
notebook.auto.tfvars
, és adja hozzá a következő kódot. Ez a fájl határozza meg a jegyzetfüzet tulajdonságait.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
Hozzon létre egy másik nevű fájlt
notebook-getting-started.py
, és adja hozzá a következő kódot. Ez a fájl a jegyzetfüzet tartalmát jelöli.display(spark.range(10))
Hozzon létre egy másik nevű fájlt
cluster.tf
, és adja hozzá a következő kódot. Ez a fájl a fürtöt jelöli.variable "cluster_name" { description = "A name for the cluster." type = string default = "My Cluster" } variable "cluster_autotermination_minutes" { description = "How many minutes before automatically terminating due to inactivity." type = number default = 60 } variable "cluster_num_workers" { description = "The number of workers." type = number default = 1 } # Create the cluster with the "smallest" amount # of resources allowed. data "databricks_node_type" "smallest" { local_disk = true } # Use the latest Databricks Runtime # Long Term Support (LTS) version. data "databricks_spark_version" "latest_lts" { long_term_support = true } resource "databricks_cluster" "this" { cluster_name = var.cluster_name node_type_id = data.databricks_node_type.smallest.id spark_version = data.databricks_spark_version.latest_lts.id autotermination_minutes = var.cluster_autotermination_minutes num_workers = var.cluster_num_workers } output "cluster_url" { value = databricks_cluster.this.url }
Hozzon létre egy másik nevű fájlt
cluster.auto.tfvars
, és adja hozzá a következő kódot. Ez a fájl határozza meg a fürt tulajdonságait.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Hozzon létre egy másik nevű fájlt
job.tf
, és adja hozzá a következő kódot. Ez a fájl azt a feladatot jelöli, amely a fürtön futtatja a jegyzetfüzetet.variable "job_name" { description = "A name for the job." type = string default = "My Job" } variable "task_key" { description = "A name for the task." type = string default = "my_task" } resource "databricks_job" "this" { name = var.job_name task { task_key = var.task_key existing_cluster_id = databricks_cluster.this.cluster_id notebook_task { notebook_path = databricks_notebook.this.path } } email_notifications { on_success = [ data.databricks_current_user.me.user_name ] on_failure = [ data.databricks_current_user.me.user_name ] } } output "job_url" { value = databricks_job.this.url }
Hozzon létre egy másik nevű fájlt
job.auto.tfvars
, és adja hozzá a következő kódot. Ez a fájl határozza meg a feladatok tulajdonságait.job_name = "My Job" task_key = "my_task"
Futtassa az
terraform plan
parancsot. Ha hiba történt, javítsa ki őket, majd futtassa újra a parancsot.Futtassa az
terraform apply
parancsot.Ellenőrizze, hogy a jegyzetfüzet, a fürt és a feladat létre lett-e hozva: a
terraform apply
parancs kimenetében keresse meg a parancs URL-címétnotebook_url
,cluster_url
ésjob_url
lépjen hozzájuk.Futtassa a feladatot: a Feladatok lapon kattintson a Futtatás gombra. A feladat befejezése után ellenőrizze az e-mail-postaládáját.
Ha végzett ezzel a mintával, futtassa
terraform destroy
a jegyzetfüzetet, a fürtöt és a feladatot az Azure Databricks-munkaterületről.Feljegyzés
A ,
terraform plan
ésterraform apply
parancsokkal kapcsolatos további információkért tekintse meg aterraform destroy
Terraform parancssori felületének dokumentációját a Terraform dokumentációjában.Ellenőrizze, hogy törölték-e a jegyzetfüzetet, a fürtöt és a feladatot: frissítse a jegyzetfüzet, a fürt és a Feladatok lapokat, hogy mindegyik megjelenítse az "erőforrás nem található" üzenetet.
Tesztelés
Tesztelje a Terraform-konfigurációkat az üzembe helyezés előtt vagy után. Az erőforrások üzembe helyezése előtt az egységteszteléshez hasonló teszteket futtathat. Az erőforrások üzembe helyezése után az integrációs teszteléshez hasonló teszteket is futtathat. Lásd : Tesztek a Terraform dokumentációjában.
A jelen cikk mintakonfigurációján az integrációs tesztekhez hasonló teszteket futtathat a következő eljárással:
Hozzon létre egy nevű
cluster.tftest.hcl
fájlt, és adja hozzá a következő kódot. Ez a fájl ellenőrzi, hogy az üzembe helyezett fürt rendelkezik-e a várt fürtnévvel.# Filename: cluster.tftest.hcl run "cluster_name_test" { command = apply assert { condition = databricks_cluster.this.cluster_name == var.cluster_name error_message = "Cluster name did not match expected name" } }
Hozzon létre egy nevű
job.tftest.hcl
fájlt, és adja hozzá a következő kódot. Ez a fájl ellenőrzi, hogy az üzembe helyezett feladat rendelkezik-e a várt feladatnévvel.run "job_name_test" { command = apply assert { condition = databricks_job.this.name == var.job_name error_message = "Job name did not match expected name" } }
Hozzon létre egy nevű
notebook.tftest.hcl
fájlt, és adja hozzá a következő kódot. Ez a fájl ellenőrzi, hogy az üzembe helyezett jegyzetfüzet rendelkezik-e a várt munkaterület-elérési útlal.run "notebook_path_test" { command = apply assert { condition = databricks_notebook.this.path == "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" error_message = "Notebook path did not match expected path" } }
Futtassa az
terraform test
parancsot. A Terraform üzembe helyezi az egyes erőforrásokat az Azure Databricks-munkaterületen, futtatja az egyes kapcsolódó teszteket, és jelentést készít a teszt eredményéről, majd lebontja az üzembe helyezett erőforrást.
Futtassa a cikk mintakonfigurációjának egységtesztjeihez hasonló teszteket a következő eljárással:
- Módosítsa az előző tesztek sorát
command = apply
a következőrecommand = plan
, majd futtassaterraform test
. A Terraform futtatja az egyes kapcsolódó teszteket, és jelentést készít a teszt eredményéről, de nem helyez üzembe erőforrásokat. - Használja a Databricks Terraform-szolgáltatót, amely lehetővé teszi
terraform test
futtatását erőforrások üzembe helyezése és hitelesítési hitelesítő adatok megkövetelése nélkül. Lásd : Mocks in the Terraform documentation. A próbatesztek futtatásához az egyik módszer a sormock_provider "databricks" {}
hozzáadása a tesztekhez, valamint a sorcommand = apply
vagycommand = plan
eltávolítása, például:
# Filename: cluster.tftest.hcl
mock_provider "databricks" {}
run "cluster_mock_name_test" {
assert {
condition = databricks_cluster.this.cluster_name == var.cluster_name
error_message = "Cluster name did not match expected name"
}
}
# Filename: job.tftest.hcl
mock_provider "databricks" {}
run "job_mock_name_test" {
assert {
condition = databricks_job.this.name == var.job_name
error_message = "Job name did not match expected name"
}
}
# Filename: notebook.tftest.hcl
mock_provider "databricks" {}
run "notebook_mock_path_test" {
assert {
condition = databricks_notebook.this.path == "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}"
error_message = "Notebook path did not match expected path"
}
}
Következő lépések
- Azure Databricks-munkaterület létrehozása.
- Munkaterület erőforrásainak kezelése
- Fürt, jegyzetfüzet és feladat létrehozása
- Unity-katalógus beállításának automatizálása
- Databricks SQL-táblákhoz való hozzáférés szabályozása
- Minta irányítópult létrehozása
További erőforrások
- A Databricks Szolgáltató dokumentációja a Terraform Registry webhelyén
- A Terraform dokumentációja a Terraform webhelyén
- Databricks Terraform-példák GitHub-adattár