Delen via


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

  1. U moet de Terraform CLI hebben. Zie Terraform downloaden op de Terraform-website.

  2. 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.

  3. 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"
        }
      }
    }
    
  4. 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.

  1. 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" {}
    
  2. Maak een ander bestand met de naam notebook.tfen 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
    }
    
  3. Maak een ander bestand met de naam notebook.auto.tfvarsen 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"
    
  4. Maak een ander bestand met de naam notebook-getting-started.pyen voeg de volgende code toe. Dit bestand vertegenwoordigt de inhoud van het notitieblok.

    display(spark.range(10))
    
  5. Maak een ander bestand met de naam cluster.tfen 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
    }
    
  6. Maak een ander bestand met de naam cluster.auto.tfvarsen 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
    
  7. Maak een ander bestand met de naam job.tfen 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
    }
    
  8. Maak een ander bestand met de naam job.auto.tfvarsen voeg de volgende code toe. Dit bestand geeft de eigenschappen van de taken op.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Voer terraform plan uit. Als er fouten zijn, herstelt u deze en voert u de opdracht opnieuw uit.

  10. Voer terraform apply uit.

  11. Controleer of het notebook, het cluster en de taak zijn gemaakt: zoek in de uitvoer van de terraform apply opdracht de URL's voor notebook_url, cluster_urlen job_urlga naar de url's.

  12. 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.

  13. 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.

  14. 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:

  1. Maak een bestand met de naam cluster.tftest.hclen 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"
      }
    }
    
  2. Maak een bestand met de naam job.tftest.hclen 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"
      }
    }
    
  3. Maak een bestand met de naam notebook.tftest.hclen 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"
      }
    }
    
  4. 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 tests command = planin en voer deze uit terraform 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 regel mock_provider "databricks" {} toevoegen aan uw tests remove en de regel command = apply of command = 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

Aanvullende bronnen