Databricks Terraform-provider

HashiCorp Terraform är ett populärt öppen källkod verktyg för att skapa säker och förutsägbar molninfrastruktur mellan flera molnleverantörer. Du kan använda Databricks Terraform-providern för att hantera dina Azure Databricks-arbetsytor och den associerade molninfrastrukturen med hjälp av ett flexibelt och kraftfullt verktyg. Målet med Databricks Terraform-providern är att stödja alla Databricks REST-API:er, vilket stöder automatisering av de mest komplicerade aspekterna av att distribuera och hantera dina dataplattformar. Databricks-kunder använder Databricks Terraform-providern för att distribuera och hantera kluster och jobb och för att konfigurera dataåtkomst. Du använder Azure-providern för att etablera Azure Databricks-arbetsytor.

Komma igång

I det här avsnittet installerar och konfigurerar du krav för att använda Terraform och Databricks Terraform-providern på din lokala utvecklingsdator. Sedan konfigurerar du Terraform-autentisering. I det här avsnittet innehåller den här artikeln en exempelkonfiguration som du kan experimentera med för att etablera en Azure Databricks-notebook-fil, ett kluster och ett jobb för att köra notebook-filen på klustret på en befintlig Azure Databricks-arbetsyta.

Behov

  1. Du måste ha Terraform CLI. Se Ladda ned Terraform på Terraforms webbplats.

  2. Du måste ha ett Terraform-projekt. Skapa en tom katalog i terminalen och växla sedan till den. (Varje separat uppsättning Terraform-konfigurationsfiler måste finnas i en egen katalog, som kallas för ett Terraform-projekt.) Till exempel: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    Inkludera Terraform-konfigurationer för projektet i en eller flera konfigurationsfiler i Terraform-projektet. Information om syntaxen för konfigurationsfilen finns i Dokumentation om Terraform-språk på Terraforms webbplats.

  3. Du måste lägga till ett beroende för Databricks Terraform-providern i Terraform-projektet. Lägg till följande i en av konfigurationsfilerna i Terraform-projektet:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. Du måste konfigurera autentisering för Terraform-projektet. Se Autentisering i dokumentationen för Databricks Terraform-providern.

Exempelkonfiguration

Det här avsnittet innehåller en exempelkonfiguration som du kan experimentera med för att etablera en Azure Databricks-anteckningsbok, ett kluster och ett jobb för att köra notebook-filen i klustret på en befintlig Azure Databricks-arbetsyta. Det förutsätter att du redan har konfigurerat kraven, samt skapat ett Terraform-projekt och konfigurerat projektet med Terraform-autentisering enligt beskrivningen i föregående avsnitt.

  1. Skapa en fil med namnet me.tf i Terraform-projektet och lägg till följande kod. Den här filen hämtar information om den aktuella användaren (du):

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. Skapa en annan fil med namnet notebook.tfoch lägg till följande kod. Den här filen representerar anteckningsboken.

    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. Skapa en annan fil med namnet notebook.auto.tfvarsoch lägg till följande kod. Den här filen anger notebook-filens egenskaper.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Skapa en annan fil med namnet notebook-getting-started.pyoch lägg till följande kod. Den här filen representerar anteckningsbokens innehåll.

    display(spark.range(10))
    
  5. Skapa en annan fil med namnet cluster.tfoch lägg till följande kod. Den här filen representerar klustret.

    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. Skapa en annan fil med namnet cluster.auto.tfvarsoch lägg till följande kod. Den här filen anger klustrets egenskaper.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Skapa en annan fil med namnet job.tfoch lägg till följande kod. Den här filen representerar det jobb som kör notebook-filen i klustret.

    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
    }
    
  8. Skapa en annan fil med namnet job.auto.tfvarsoch lägg till följande kod. Den här filen anger jobbens egenskaper.

    job_name = "My Job"
    
  9. Kör terraform plan. Om det finns några fel kan du åtgärda dem och sedan köra kommandot igen.

  10. Kör terraform apply.

  11. Kontrollera att anteckningsboken, klustret och jobbet har skapats: i kommandots terraform apply utdata letar du upp URL:erna för notebook_url, cluster_urloch job_urloch går till dem.

  12. Kör jobbet: På sidan Jobb klickar du på Kör nu. När jobbet är klart markerar du din e-postinkorg.

  13. När du är klar med det här exemplet tar du bort notebook-filen, klustret och jobbet från Azure Databricks-arbetsytan genom att köra terraform destroy.

    Kommentar

    Mer information om kommandona terraform plan, terraform applyoch terraform destroy finns i Terraform CLI-dokumentationen i Terraform-dokumentationen.

  14. Kontrollera att anteckningsboken, klustret och jobbet har tagits bort: uppdatera sidorna notebook, kluster och jobb för att visa ett meddelande om att resursen inte kan hittas.

Nästa steg

  1. Skapa en Azure Databricks-arbetsyta.
  2. Hantera arbetsyteresurser för en Azure Databricks-arbetsyta.

Felsökning

Kommentar

Terraform-specifikt stöd finns i de senaste Terraform-ämnena på webbplatsen HashiCorp Discuss. Problem som är specifika för Databricks Terraform-providern finns i Problem i GitHub-lagringsplatsen databrickslabs/terraform-provider-databricks .

Fel: Det gick inte att installera providern

Problem: Om du inte checkade in en terraform.lock.hcl fil till versionskontrollsystemet och kör terraform init kommandot visas följande meddelande: Failed to install provider. Ytterligare utdata kan innehålla ett meddelande som liknar följande:

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"

Orsak: Terraform-konfigurationerna refererar till inaktuella Databricks Terraform-providers.

Lösning:

  1. Ersätt databrickslabs/databricks med databricks/databricks i alla dina .tf filer.

    Om du vill automatisera dessa ersättningar kör du följande Python-kommando från den överordnade mappen som innehåller de .tf filer som ska uppdateras:

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. Kör följande Terraform-kommando och godkänn sedan ändringarna när du uppmanas att göra det:

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    Information om det här kommandot finns i Kommando: tillståndserbytningsprovider i Terraform-dokumentationen.

  3. Kontrollera ändringarna genom att köra följande Terraform-kommando:

    terraform init
    

Fel: Det gick inte att fråga efter tillgängliga providerpaket

Problem: Om du inte checkade in en terraform.lock.hcl fil till versionskontrollsystemet och kör terraform init kommandot visas följande meddelande: Failed to query available provider packages.

Orsak: Terraform-konfigurationerna refererar till inaktuella Databricks Terraform-providers.

Lösning: Följ lösningsinstruktionerna i Fel: Det gick inte att installera providern.

Ytterligare exempel

Ytterligare resurser