Condividi tramite


Provider Databricks Terraform

HashiCorp Terraform è uno strumento open source diffuso per la creazione di un'infrastruttura cloud sicura e prevedibile in diversi providerscloud. È possibile usare il provider Databricks Terraform per gestire le aree di lavoro di Databricks di Azure e l'infrastruttura cloud associata usando uno strumento versatile e potente. L'obiettivo del provider Databricks Terraform è supportare tutte le API REST di Databricks, ovvero l'automazione degli aspetti più complessi della distribuzione e 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 Databricks di Azure.

Introduzione

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. Dopo questa sezione, l’articolo che segue fornisce una configurazione di esempio da testare, per 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

  1. È necessario disporre della CLI di Terraform. Vedere Scaricare Terraform nel sito web Terraform.

  2. È necessario avere un progetto Terraform. Nel terminale creare una directory vuota e quindi passare a essa. Ogni set separato dei file di configurazione di Terraform deve trovarsi in una propria directory, denominata un 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 Documentazione sul linguaggio Terraform nel sito web Terraform.

  3. È 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"
        }
      }
    }
    
  4. È necessario configurare l'autenticazione per il progetto Terraform. Consultare Autenticazione nella documentazione del provider Databricks Terraform.

Configurazione di esempio

Questa sezione fornisce una configurazione di esempio con cui sperimentare, per 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. Si presuppone di avere già set i requisiti di , nonché di creare un progetto Terraform e di configurare il progetto con l'autenticazione terraform come descritto nella sezione precedente.

  1. 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" {}
    
  2. Creare un altro file denominato notebook.tf e aggiungere il seguente codice. 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
    }
    
  3. Creare un altro file denominato notebook.auto.tfvars e aggiungere il seguente codice. Questo file specifica le proprietà del notebook.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Creare un altro file denominato notebook-getting-started.py e aggiungere il seguente codice. Questo file rappresenta i contenuti del notebook.

    display(spark.range(10))
    
  5. Creare un altro file denominato cluster.tf e aggiungere il seguente codice. 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
    }
    
  6. Creare un altro file denominato cluster.auto.tfvars e aggiungere il seguente codice. Questo file specifica le proprietà del cluster.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Creare un altro file denominato job.tf e aggiungere il seguente codice. 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"
    }
    
    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
    }
    
  8. Creare un altro file denominato job.auto.tfvars e aggiungere il seguente codice. Questo file specifica le proprietà dei processi.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Eseguire terraform plan. Se sono presenti errori, correggerli e quindi eseguire di nuovo il comando.

  10. Eseguire terraform apply.

  11. Verificare che il notebook, il cluster e il processo siano stati creati: nell'output del comando terraform apply trovare e andare agli URL per notebook_url, cluster_url e job_url.

  12. Eseguire il processo: nella pagina Processi, fare clic su Esegui ora. Al termine del processo, controllare la propria casella di posta elettronica.

  13. Al termine di questo esempio, eliminare il notebook, il cluster e il processo dall'area di lavoro di Databricks di Azure eseguendo terraform destroy.

    Nota

    Per altre informazioni sui comandi terraform plan, terraform apply e terraform destroy, vedere la documentazione CLI di Terraform nella documentazione di Terraform.

  14. Verificare che il notebook, il cluster e i lavori siano stati eliminati: vai alla pagina del notebook refresh, alla pagina del cluster e alle pagine dei lavori per visualizzare un messaggio che indica che non è possibile trovare la risorsa.

Test

Testare le configurazioni di Terraform prima o dopo la distribuzione. È possibile eseguire test analoghi agli unit test prima di distribuire le risorse. È anche possibile eseguire test analoghi ai test di integrazione dopo la distribuzione delle risorse. Vedere Test nella documentazione di Terraform.

Eseguire test analoghi ai test di integrazione rispetto alla configurazione di esempio di questo articolo seguendo questo processo:

  1. Creare un file denominato cluster.tftest.hcl e aggiungere il seguente codice. Questo file verifica se il cluster distribuito ha il nome del cluster previsto.

    # 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"
      }
    }
    
  2. Creare un file denominato job.tftest.hcl e aggiungere il seguente codice. Questo file verifica se il processo distribuito ha il nome del processo previsto.

    run "job_name_test" {
      command = apply
    
      assert {
        condition     = databricks_job.this.name == var.job_name
        error_message = "Job name did not match expected name"
      }
    }
    
  3. Creare un file denominato notebook.tftest.hcl e aggiungere il seguente codice. Questo file verifica se il notebook distribuito ha il percorso previsto dell'area di lavoro.

    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"
      }
    }
    
  4. Eseguire terraform test. Terraform distribuisce ogni risorsa nell'area di lavoro di Databricks di Azure, esegue ogni test correlato e ne segnala il risultato e quindi rimuove la risorsa distribuita.

Eseguire test analoghi agli unit test rispetto alla configurazione di esempio di questo articolo seguendo questo processo:

  • Modificare la riga command = apply in ognuno dei test precedenti in command = plan e quindi eseguire terraform test. Terraform esegue ogni test correlato e ne segnala il risultato, ma non distribuisce alcuna risorsa.
  • Simulare il provider Databricks Terraform, che consente di eseguire terraform test senza distribuire risorse e senza richiedere alcuna autenticazione credentials. Vedere Simulazioni nella documentazione di Terraform. Per eseguire test fittizi, un approccio consiste nell'aggiungere il mock_provider "databricks" {} di riga ai test e per remove la riga command = apply o command = plan, ad esempio:
# 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"
  }
}

Passaggi successivi

Risorse aggiuntive