Databricks Terraform-szolgáltató
A 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-projektnek nevezü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 terraform-hitelesítéssel konfigurálta a projektet az előző szakaszban leírtak szerint.
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 apply
ésterraform destroy
parancsokkal kapcsolatos további információkért tekintse meg aterraform plan
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 mindegyikre, és megjelenítsen egy üzenetet, amely szerint az erőforrás nem található.
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, hogy erőforrások üzembe helyezése és hitelesítési hitelesítő adatok megkövetelése nélkül fusson
terraform test
. Lásd : Mocks in the Terraform documentation. A modelltesztek futtatásához az egyik módszer az, hogy hozzáadja a vonalatmock_provider "databricks" {}
a tesztekhez, és eltávolítja a vonalatcommand = apply
, vagycommand = plan
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.
- Azure Databricks-munkaterület munkaterületi erőforrásainak kezelése.
Hibaelhárítás
Feljegyzés
A Terraform-specifikus támogatásért tekintse meg a Legújabb Terraform-témaköröket a HashiCorp Vita webhelyén. A Databricks Terraform-szolgáltatóval kapcsolatos problémákért lásd a databrickslabs/terraform-provider-databricks GitHub-adattár problémáit.
Hiba: Nem sikerült telepíteni a szolgáltatót
Probléma: Ha nem adott be terraform.lock.hcl
fájlt a verziókövetési rendszerbe, és futtatja a terraform init
parancsot, a következő üzenet jelenik meg: Failed to install provider
. A további kimenetek a következőhöz hasonló üzenetet tartalmazhatnak:
Error while installing databrickslabs/databricks: v1.0.0: checksum list has no SHA-256 hash for "https://github.com/databricks/terraform-provider-databricks/releases/download/v1.0.0/terraform-provider-databricks_1.0.0_darwin_amd64.zip"
Ok: A Terraform-konfigurációk elavult Databricks Terraform-szolgáltatókra hivatkoznak.
Solution
databricks/databricks
Cserélje ledatabrickslabs/databricks
az összes.tf
fájlra.A csere automatizálásához futtassa a következő Python-parancsot a frissíteni kívánt fájlokat tartalmazó
.tf
szülőmappából:python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
Futtassa a következő Terraform-parancsot, majd hagyja jóvá a módosításokat, amikor a rendszer kéri:
terraform state replace-provider databrickslabs/databricks databricks/databricks
A parancsról további információt a Terraform dokumentációjában található Command: state replace-provider című témakörben talál.
Ellenőrizze a módosításokat a következő Terraform parancs futtatásával:
terraform init
Hiba: Nem sikerült lekérdezni az elérhető szolgáltatói csomagokat
Probléma: Ha nem adott be terraform.lock.hcl
fájlt a verziókövetési rendszerbe, és futtatja a terraform init
parancsot, a következő üzenet jelenik meg: Failed to query available provider packages
.
Ok: A Terraform-konfigurációk elavult Databricks Terraform-szolgáltatókra hivatkoznak.
Megoldás: Kövesse a hiba megoldási utasításait : Nem sikerült telepíteni a szolgáltatót.
Naplózás engedélyezése
A Databricks Terraform-szolgáltató olyan naplókat ad ki, amelyeket engedélyezhet a TF_LOG
környezeti változó DEBUG
beállításával vagy bármely más, a Terraform által támogatott naplószinttel.
Alapértelmezés szerint a rendszer naplókat küld a rendszer.stderr
Ha naplókat szeretne küldeni egy fájlba, állítsa a TF_LOG_PATH
környezeti változót a célfájl elérési útjára.
Futtathatja például a következő parancsot a naplózás hibakeresési szinten való engedélyezéséhez, valamint a monokróm formátumú naplók az aktuális munkakönyvtárhoz képest elnevezett tf.log
fájlba való kimenetéhez, miközben a terraform apply
parancs fut:
TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform apply -no-color
A Terraform naplózásáról további információt a Terraform hibakeresésében talál.
További példák
Azure Databricks-munkaterület üzembe helyezése a Terraform használatával
Databricks-munkaterületek kezelése a Terraform használatával
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
- A terraform-databricks-examples adattár a GitHubon