Databricks Terraform-provider

HashiCorp Terraform är ett populärt öppen källkod verktyg för att skapa säker och förutsägbar molninfrastruktur för 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, etablera Databricks-arbetsytor och konfigurera dataåtkomst.

Komma igång

I det här avsnittet installerar och konfigurerar du krav för att använda Terraform och Databricks Terraform-providern. 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 i klustret på en befintlig Azure Databricks-arbetsyta.

Krav

Om du vill använda Terraform för att skapa resurser på Azure-kontonivå och använda Databricks Terraform-providern för att skapa resurser på Azure Databricks-kontonivå måste du ha följande:

Om du vill använda Databricks Terraform-providern för att även skapa resurser på arbetsytenivå i Azure Databricks måste du ha följande:

Konfigurera Terraform-autentisering

I Terraform-projektet måste du skapa en konfiguration för att autentisera Terraform med ditt Azure-konto och autentisera Databricks Terraform-providern med ditt Azure Databricks-konto och din Azure Databricks-arbetsyta på följande sätt:

  1. 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
    
  2. I den här tomma katalogen skapar du en fil med namnet auth.tf. Lägg till följande innehåll i den här filen, beroende på din autentiseringsmetod, och spara sedan filen.

    Tips

    Om du använder Visual Studio Code lägger HashiCorp Terraform-tillägget för Visual Studio Code till redigeringsfunktioner för Terraform-filer som syntaxmarkering, IntelliSense, kodnavigering, kodformatering, en modulutforskare och mycket mer.

    Om du vill använda Azure CLI för att autentisera på Azure-kontonivå och på Azure Databricks-kontonivå och för att använda en Databricks CLI-konfigurationsprofil för att autentisera på Azure Databricks-arbetsytenivå lägger du till följande innehåll:

    variable "databricks_connection_profile" {}
    
    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
        }
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    # Use Databricks CLI authentication.
    provider "databricks" {
      profile = var.databricks_connection_profile
    }
    

    Om du vill använda Azure CLI för att autentisera på Azure-kontonivå, Azure Databricks-kontonivå och Azure Databricks-arbetsytenivå lägger du till följande innehåll i stället:

    variable "databricks_host" {}
    
    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
        }
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    # Use Azure CLI authentication.
    provider "databricks" {
      host = var.databricks_host
    }
    

    Om du vill använda Azure CLI för att autentisera på Azure-kontonivå och på Azure Databricks-kontonivå och för att använda miljövariabler för att autentisera på Azure Databricks-arbetsytenivå lägger du till följande innehåll i stället:

    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
        }
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    # Use environment variables for authentication.
    provider "databricks" {}
    

    Tips

    Om du bara vill skapa resurser på Databricks-arbetsytenivå kan du ta bort azurerm blocket från någon av föregående required_providers deklarationer tillsammans med deklarationen provider "azurerm" .

  3. Om du använder en Databricks CLI-konfigurationsprofil eller Azure CLI för att autentisera på arbetsytenivå i Azure Databricks skapar du en annan fil med namnet auth.auto.tfvars, lägger till följande innehåll i filen och ändrar värdet efter behov.

    Tips

    *.auto.tfvars med filer kan du ange variabelvärden separat från koden. Detta gör dina .tf filer mer modulära och återanvändbara i olika användningsscenarier.

    Om du använder en Databricks CLI-konfigurationsprofil för att autentisera på arbetsytenivå i Azure Databricks lägger du till följande innehåll:

    databricks_connection_profile = "DEFAULT"
    

    Om du använder Azure CLI för att autentisera på arbetsytenivå i Azure Databricks lägger du till följande innehåll i stället:

    databricks_host = "https://<workspace-instance-name>"
    
  4. Initiera arbetskatalogen auth.tf som innehåller filen genom att terraform init köra kommandot . Mer information finns i Kommando: init på Terraform-webbplatsen.

    terraform init
    

    Terraform laddar ned de angivna providrar och installerar dem i en dold underkatalog i din aktuella arbetskatalog med namnet .terraform. Kommandot terraform init skriver ut vilken version av providrar som installerades. Terraform skapar också en låsfil med namnet .terraform.lock.hcl som anger de exakta providerversioner som används, så att du kan styra när du vill uppdatera de leverantörer som används för projektet.

  5. Kontrollera om projektet har konfigurerats korrekt genom att terraform plan köra kommandot . Om det finns fel kan du åtgärda dem och köra kommandot igen. Mer information finns i Kommando: planera på Terraform-webbplatsen.

    terraform plan
    
  6. Tillämpa de ändringar som krävs för att uppnå önskat tillstånd för konfigurationen genom att terraform apply köra kommandot . Mer information finns i Kommando: tillämpa på Terraform-webbplatsen.

    terraform apply
    

    Eftersom inga resurser ännu har angetts i auth.tf filen är Apply complete! Resources: 0 added, 0 changed, 0 destroyed. utdata också, Terraform skriver data till en fil med namnet terraform.tfstate. Om du vill skapa resurser fortsätter du med Exempelkonfiguration, Nästa steg eller båda för att ange önskade resurser att skapa och kör terraform apply sedan kommandot igen. Terraform lagrar ID:t och egenskaperna för de resurser som den hanterar i den här terraform.tfstate filen, så att den kan uppdatera eller förstöra dessa resurser framöver.

Exempelkonfiguration

Det här avsnittet innehåller en exempelkonfiguration som du kan experimentera med för att etablera en Notebook-fil för Azure Databricks, 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 annan fil med namnet me.tf i samma katalog som du skapade i Konfigurera Terraform-autentisering 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 fel kan du åtgärda dem och sedan köra kommandot igen.

  10. Kör terraform apply.

  11. Kontrollera att notebook-filen, 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 har slutförts 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.

  14. Kontrollera att anteckningsboken, klustret och jobbet har tagits bort: uppdatera sidorna notebook, kluster och jobb så att var och en visar 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

Anteckning

Terraform-specifikt stöd finns i de senaste Terraform-ämnena på webbplatsen HashiCorp Discuss. Information om 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 i 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 Kommandot: state replace-provider 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 i 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ösningsanvisningarna i Fel: Det gick inte att installera providern.

Ytterligare exempel

Ytterligare resurser