Databricks Terraform-provider
HashiCorp Terraform is een populair opensource-hulpprogramma voor het maken van een veilige en voorspelbare cloudinfrastructuur in verschillende cloud-providers. U kunt de Databricks Terraform-provider gebruiken om uw Azure Databricks-werkruimten en de bijbehorende cloudinfrastructuur te beheren met behulp van een flexibel, krachtig hulpprogramma. Het doel van de Databricks Terraform-provider is het ondersteunen van alle Databricks REST API's, die automatisering ondersteunen van de meest gecompliceerde aspecten van het implementeren en beheren van uw gegevensplatforms. Databricks-klanten gebruiken de Databricks Terraform-provider om clusters en taken te implementeren en beheren en om gegevenstoegang te configureren. U gebruikt de Azure-provider om Azure Databricks-werkruimten in te richten.
Aan de slag
In deze sectie installeert en configureert u vereisten voor het gebruik van Terraform en de Databricks Terraform-provider op uw lokale ontwikkelcomputer. Vervolgens configureert u Terraform-verificatie. Na deze sectie bevat dit artikel een voorbeeldconfiguratie waarmee u kunt experimenteren om een Azure Databricks-notebook, -cluster en een taak in te richten voor het uitvoeren van het notebook op het cluster in een bestaande Azure Databricks-werkruimte.
Vereisten
U moet de Terraform CLI hebben. Zie Terraform downloaden op de Terraform-website.
U moet een Terraform-project hebben. Maak in uw terminal een lege map en ga vervolgens naar de map. (Elke afzonderlijke set van Terraform-configuratiebestanden moet zich in een eigen map bevinden. Dit wordt een Terraform-projectgenoemd.) Bijvoorbeeld:
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Neem Terraform-configuraties voor uw project op in een of meer configuratiebestanden in uw Terraform-project. Zie de terraform-taaldocumentatie op de Terraform-website voor informatie over de syntaxis van het configuratiebestand.
U moet een afhankelijkheid toevoegen aan uw Terraform-project voor de Databricks Terraform-provider. Voeg het volgende toe aan een van de configuratiebestanden in uw Terraform-project:
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
U moet verificatie configureren voor uw Terraform-project. Zie verificatie in de documentatie van de Databricks Terraform-provider.
Voorbeeldconfiguratie
Deze sectie bevat een voorbeeldconfiguratie waarmee u kunt experimenteren om een Azure Databricks-notebook, een cluster en een taak in te richten voor het uitvoeren van het notebook op het cluster in een bestaande Azure Databricks-werkruimte. Hierbij wordt ervan uitgegaan dat u de vereisten al hebt set, evenals een Terraform-project hebt gemaakt en het project hebt geconfigureerd met Terraform-authenticatie, zoals beschreven in de vorige sectie.
Maak een bestand met de naam
me.tf
in uw Terraform-project en voeg de volgende code toe. Dit bestand krijgt informatie over de huidige gebruiker (u):# Retrieve information about the current user. data "databricks_current_user" "me" {}
Maak een ander bestand met de naam
notebook.tf
en voeg de volgende code toe. Dit bestand vertegenwoordigt het notebook.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 }
Maak een ander bestand met de naam
notebook.auto.tfvars
en voeg de volgende code toe. Dit bestand geeft de eigenschappen van het notitieblok op.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
Maak een ander bestand met de naam
notebook-getting-started.py
en voeg de volgende code toe. Dit bestand vertegenwoordigt de inhoud van het notitieblok.display(spark.range(10))
Maak een ander bestand met de naam
cluster.tf
en voeg de volgende code toe. Dit bestand vertegenwoordigt het cluster.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 }
Maak een ander bestand met de naam
cluster.auto.tfvars
en voeg de volgende code toe. Dit bestand geeft de eigenschappen van het cluster op.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Maak een ander bestand met de naam
job.tf
en voeg de volgende code toe. Dit bestand vertegenwoordigt de taak die het notebook uitvoert op het cluster.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 }
Maak een ander bestand met de naam
job.auto.tfvars
en voeg de volgende code toe. Dit bestand geeft de eigenschappen van de taken op.job_name = "My Job" task_key = "my_task"
Voer
terraform plan
uit. Als er fouten zijn, herstelt u deze en voert u de opdracht opnieuw uit.Voer
terraform apply
uit.Controleer of het notebook, het cluster en de taak zijn gemaakt: zoek in de uitvoer van de
terraform apply
opdracht de URL's voornotebook_url
,cluster_url
enjob_url
ga naar de url's.Voer de taak uit: klik op de pagina Taken op Nu uitvoeren. Nadat de taak is voltooid, schakelt u het Postvak IN van uw e-mail in.
Wanneer u klaar bent met dit voorbeeld, verwijdert u het notebook, het cluster en de taak uit de Azure Databricks-werkruimte door deze uit te voeren
terraform destroy
.Notitie
Zie de Terraform CLI-documentatie in de Terraform-documentatie voor meer informatie over de
terraform plan
terraform apply
enterraform destroy
opdrachten in de Terraform-documentatie.Controleer of het notebook, het cluster en de taak zijn verwijderd: refresh het notebook, het cluster en de taak pagina's om elk het bericht weer te geven dat de resource niet kan worden gevonden.
Testen
Test uw Terraform-configuraties vóór of nadat u ze hebt geïmplementeerd. U kunt tests uitvoeren die vergelijkbaar zijn met eenheidstests voordat u resources implementeert. U kunt ook tests uitvoeren die vergelijkbaar zijn met integratietests nadat resources zijn geïmplementeerd. Zie Tests in de Terraform-documentatie.
Voer tests uit die vergelijkbaar zijn met integratietests op de voorbeeldconfiguratie van dit artikel door dit proces te volgen:
Maak een bestand met de naam
cluster.tftest.hcl
en voeg de volgende code toe. Met dit bestand wordt getest of het geïmplementeerde cluster de verwachte clusternaam heeft.# 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" } }
Maak een bestand met de naam
job.tftest.hcl
en voeg de volgende code toe. Met dit bestand wordt getest of de geïmplementeerde taak de verwachte taaknaam heeft.run "job_name_test" { command = apply assert { condition = databricks_job.this.name == var.job_name error_message = "Job name did not match expected name" } }
Maak een bestand met de naam
notebook.tftest.hcl
en voeg de volgende code toe. Met dit bestand wordt getest of het geïmplementeerde notebook het verwachte werkruimtepad heeft.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" } }
Voer
terraform test
uit. Terraform implementeert elke resource in de Azure Databricks-werkruimte, voert elke gerelateerde test uit en rapporteert het testresultaat en verwijdert vervolgens de geïmplementeerde resource.
Voer tests uit die vergelijkbaar zijn met eenheidstests op basis van de voorbeeldconfiguratie van dit artikel met het volgende proces:
- Wijzig de regel
command = apply
in elk van de voorgaande testscommand = plan
in en voer deze uitterraform test
. Terraform voert elke gerelateerde test uit en rapporteert het testresultaat, maar implementeert geen resources. - Simuleer de Databricks Terraform-provider, waarmee u
terraform test
kunt uitvoeren zonder resources te hoeven implementeren en zonder dat hiervoor verificatie nodig is credentials. Zie Mocks in de Terraform-documentatie. Als u mocktests wilt uitvoeren, moet u de regelmock_provider "databricks" {}
toevoegen aan uw tests remove en de regelcommand = apply
ofcommand = plan
, bijvoorbeeld:
# 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"
}
}
Volgende stappen
Unity Catalog instellen automatiseren
Aanvullende bronnen
- Documentatie voor Databricks Provider op de website van Terraform Registry
- Terraform-documentatie op de Terraform-website
- nl-NL: Databricks Terraform voorbeelden Github-opslagplaats