Provider Databricks Terraform
HashiCorp Terraform è uno strumento open source diffuso per la creazione di un'infrastruttura cloud sicura e prevedibile in diversi provider di servizi cloud. È possibile usare il provider Databricks Terraform per gestire le aree di lavoro di Azure Databricks e l'infrastruttura cloud associata usando uno strumento flessibile e potente. L'obiettivo del provider Databricks Terraform è supportare tutte le API REST di Databricks, supportando l'automazione degli aspetti più complessi della distribuzione e della gestione delle piattaforme dati. I clienti di Databricks usano il provider Databricks Terraform per distribuire e gestire cluster e processi e per configurare l'accesso ai dati. Usare il provider di Azure per effettuare il provisioning delle aree di lavoro di Azure Databricks.
Attività iniziali
In questa sezione vengono installati e configurati i requisiti per l'uso di Terraform e del provider Databricks Terraform nel computer di sviluppo locale. Configurare quindi l'autenticazione terraform. Seguendo questa sezione, questo articolo fornisce una configurazione di esempio con cui è possibile provare a eseguire il provisioning di un notebook, un cluster e un processo di Azure Databricks per eseguire il notebook nel cluster in un'area di lavoro di Azure Databricks esistente.
Requisiti
È necessario disporre dell'interfaccia della riga di comando di Terraform. Vedere Scaricare Terraform nel sito Web terraform.
È necessario avere un progetto Terraform. Nel terminale creare una directory vuota e quindi passare a essa. Ogni set separato di file di configurazione Terraform deve trovarsi nella propria directory, denominata progetto Terraform. Ad esempio:
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Includere configurazioni terraform per il progetto in uno o più file di configurazione nel progetto Terraform. Per informazioni sulla sintassi del file di configurazione, vedere La documentazione sul linguaggio Terraform nel sito Web Terraform.
È necessario aggiungere al progetto Terraform una dipendenza per il provider Databricks Terraform. Aggiungere quanto segue a uno dei file di configurazione nel progetto Terraform:
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
È necessario configurare l'autenticazione per il progetto Terraform. Vedere Autenticazione nella documentazione del provider Terraform di Databricks.
Configurazione di esempio
Questa sezione fornisce una configurazione di esempio che è possibile sperimentare per effettuare il provisioning di un notebook di Azure Databricks, un cluster e un processo per eseguire il notebook nel cluster, in un'area di lavoro di Azure Databricks esistente. Si presuppone che siano già stati configurati i requisiti, nonché che sia stato creato un progetto Terraform e configurato il progetto con l'autenticazione Terraform, come descritto nella sezione precedente.
Creare un file denominato
me.tf
nel progetto Terraform e aggiungere il codice seguente. Questo file ottiene informazioni sull'utente corrente (l'utente):# Retrieve information about the current user. data "databricks_current_user" "me" {}
Creare un altro file denominato
notebook.tf
e aggiungere il codice seguente. Questo file rappresenta il 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 }
Creare un altro file denominato
notebook.auto.tfvars
e aggiungere il codice seguente. Questo file specifica le proprietà del notebook.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
Creare un altro file denominato
notebook-getting-started.py
e aggiungere il codice seguente. Questo file rappresenta il contenuto del notebook.display(spark.range(10))
Creare un altro file denominato
cluster.tf
e aggiungere il codice seguente. Questo file rappresenta il 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 }
Creare un altro file denominato
cluster.auto.tfvars
e aggiungere il codice seguente. Questo file specifica le proprietà del cluster.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Creare un altro file denominato
job.tf
e aggiungere il codice seguente. Questo file rappresenta il processo che esegue il notebook nel cluster.variable "job_name" { description = "A name for the job." type = string default = "My Job" } resource "databricks_job" "this" { name = var.job_name 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 }
Creare un altro file denominato
job.auto.tfvars
e aggiungere il codice seguente. Questo file specifica le proprietà dei processi.job_name = "My Job"
Eseguire
terraform plan
. Se sono presenti errori, correggerli e quindi eseguire di nuovo il comando.Eseguire
terraform apply
.Verificare che il notebook, il cluster e il processo siano stati creati: nell'output del
terraform apply
comando trovare gli URL pernotebook_url
,cluster_url
ejob_url
e passare a essi.Eseguire il processo: nella pagina Processi fare clic su Esegui ora. Al termine del processo, selezionare la casella di posta elettronica.
Al termine di questo esempio, eliminare il notebook, il cluster e il processo dall'area di lavoro di Azure Databricks eseguendo
terraform destroy
.Nota
Per altre informazioni sui
terraform plan
comandi ,terraform apply
eterraform destroy
, vedere La documentazione dell'interfaccia della riga di comando di Terraform nella documentazione di Terraform.Verificare che il notebook, il cluster e il processo siano stati eliminati: aggiornare le pagine notebook, cluster e Processi per visualizzare ogni messaggio che la risorsa non è stata trovata.
Passaggi successivi
- Creare un'area di lavoro di Azure Databricks.
- Gestire le risorse dell'area di lavoro per un'area di lavoro di Azure Databricks.
Risoluzione dei problemi
Nota
Per il supporto specifico di Terraform, vedere gli argomenti più recenti di Terraform nel sito Web HashiCorp Discuss. Per problemi specifici del provider Terraform di Databricks, vedere Problemi nel repository GitHub databrickslabs/terraform-provider-databricks .
Errore: Impossibile installare il provider
Problema: se non è stato archiviato un terraform.lock.hcl
file nel sistema di controllo della versione ed è stato eseguito il comando , viene visualizzato il terraform init
messaggio seguente: . Failed to install provider
Un output aggiuntivo può includere un messaggio simile al seguente:
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"
Causa: le configurazioni di Terraform fanno riferimento a provider Databricks Terraform obsoleti.
Soluzione:
Sostituire
databrickslabs/databricks
condatabricks/databricks
in tutti i.tf
file.Per automatizzare queste sostituzioni, eseguire il comando Python seguente dalla cartella padre che contiene i
.tf
file da aggiornare:python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
Eseguire il comando Terraform seguente e quindi approvare le modifiche quando richiesto:
terraform state replace-provider databrickslabs/databricks databricks/databricks
Per informazioni su questo comando, vedere Command: state replace-provider nella documentazione di Terraform.
Verificare le modifiche eseguendo il comando Terraform seguente:
terraform init
Errore: Impossibile eseguire query sui pacchetti del provider disponibili
Problema: se non è stato archiviato un terraform.lock.hcl
file nel sistema di controllo della versione ed è stato eseguito il comando , viene visualizzato il terraform init
messaggio seguente: . Failed to query available provider packages
Causa: le configurazioni di Terraform fanno riferimento a provider Databricks Terraform obsoleti.
Soluzione: seguire le istruzioni della soluzione in Errore: Impossibile installare il provider.
Esempi aggiuntivi
Risorse aggiuntive
- Documentazione del provider Databricks nel sito Web del Registro Terraform
- Documentazione di Terraform sul sito Web terraform
- Repository terraform-databricks-examples in GitHub