Freigeben über


Databricks-Terraform-Anbieter

HashiCorp Terraform ist ein beliebtes Open-Source-Tool zum Erstellen von sicherer und vorhersagbarer Cloudinfrastruktur für mehrere Cloudanbieter. Sie können den Databricks-Terraform-Anbieter nutzen, um Ihre Azure Databricks-Arbeitsbereiche und die zugehörige Cloudinfrastruktur mit einem flexiblen und leistungsstarken Tool zu verwalten. Das Ziel des Databricks-Terraform-Anbieters ist die Unterstützung aller Databricks-REST-APIs, um die Automatisierung der kompliziertesten Aspekte in Bezug auf die Bereitstellung und Verwaltung Ihrer Datenplattformen zu unterstützen. Der Databricks-Terraform-Anbieter wird von Databricks-Kunden genutzt, um Cluster und Aufträge bereitzustellen und zu verwalten und den Datenzugriff zu konfigurieren. Sie verwenden den Azure-Anbieter, um Azure Databricks-Arbeitsbereiche bereitzustellen.

Erste Schritte

In diesem Abschnitt installieren und konfigurieren Sie Anforderungen für die Verwendung von Terraform und des Databricks Terraform-Anbieters auf Ihrem lokalen Computer. Anschließend konfigurieren Sie Terraform-Authentifizierung. Im Anschluss an diesen Abschnitt finden Sie in diesem Artikel eine Beispielkonfiguration, mit der Sie experimentieren können, um in einem vorhandenen Azure Databricks-Arbeitsbereich ein Azure Databricks-Notebook, einen Cluster und einen Auftrag zur Ausführung des Notebooks im Cluster bereitzustellen.

Anforderungen

  1. Sie benötigen die Terraform CLI. Ausführlichere Informationen finden Sie auf der Terraform-Website unter Herunterladen von Terraform.

  2. Sie benötigen ein Terraform-Projekt. Erstellen Sie in Ihrem Terminal ein leeres Verzeichnis, und wechseln Sie dann in dieses Verzeichnis. (Jeder separate Satz von Terraform-Konfigurationsdateien muss sich in einem eigenen Verzeichnis befinden, das als Terraform-Projekt bezeichnet wird.) Beispiel: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    Sie fügen die Terraform-Konfigurationen für Ihr Projekt in mindestens eine Konfigurationsdatei in Ihrem Terraform-Projekt ein. Weitere Informationen zur Syntax von Konfigurationsdateien finden Sie in der Terraform-Sprachdokumentation auf der Terraform-Website.

  3. Sie müssen Ihrem Terraform-Projekt eine Abhängigkeit für den Databricks Terraform-Anbieter hinzufügen. Fügen Sie einer der Konfigurationsdateien in Ihrem Terraform-Projekt Folgendes hinzu:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. Sie müssen die Authentifizierung für Ihr Terraform-Projekt konfigurieren. Weitere Informationen finden Sie unter Authentifizierung in der Dokumentation zum Databricks Terraform-Anbieter.

Beispielkonfiguration

In diesem Abschnitt finden Sie eine Beispielkonfiguration, mit der Sie experimentieren können, um in einem vorhandenen Azure Databricks-Arbeitsbereich ein Azure Databricks-Notebook, einen Cluster und einen Auftrag zur Ausführung des Notebooks auf dem Cluster bereitzustellen. Es wird davon ausgegangen, dass Sie bereits die Anforderungen eingerichtet sowie ein Terraform-Projekt erstellt und das Projekt mit Terraform-Authentifizierung konfiguriert haben, wie im vorherigen Abschnitt beschrieben.

  1. Erstellen Sie in Ihrem Terraform-Projekt eine Datei namens me.tf, und fügen Sie darin folgenden Code hinzu. Diese Datei ruft Informationen zum aktuellen Benutzer (Sie) ab:

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. Erstellen Sie eine weitere Datei namens notebook.tf, und fügen Sie den folgenden Code hinzu. Diese Datei stellt das Notebook dar.

    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. Erstellen Sie eine weitere Datei namens notebook.auto.tfvars, und fügen Sie den folgenden Code hinzu. Diese Datei gibt die Eigenschaften des Notebooks an.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Erstellen Sie eine weitere Datei namens notebook-getting-started.py, und fügen Sie den folgenden Code hinzu. Diese Datei stellt den Inhalt des Notebooks dar.

    display(spark.range(10))
    
  5. Erstellen Sie eine weitere Datei namens cluster.tf, und fügen Sie den folgenden Code hinzu. Diese Datei stellt den Cluster dar.

    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. Erstellen Sie eine weitere Datei namens cluster.auto.tfvars, und fügen Sie den folgenden Code hinzu. Diese Datei gibt die Eigenschaften des Clusters an.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Erstellen Sie eine weitere Datei namens job.tf, und fügen Sie den folgenden Code hinzu. Diese Datei stellt den Auftrag dar, der das Notebook im Cluster ausführt.

    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. Erstellen Sie eine weitere Datei namens job.auto.tfvars, und fügen Sie den folgenden Code hinzu. Diese Datei gibt die Eigenschaften des Auftrags an.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Führen Sie terraform planaus. Wenn Fehler auftreten, beheben Sie diese, und führen Sie den Befehl dann erneut aus.

  10. Führen Sie terraform applyaus.

  11. Überprüfen Sie, ob das Notebook,der Cluster und der Auftrag erstellt wurden: Suchen Sie in der Ausgabe des Befehls terraform apply nach den URLs für notebook_url, cluster_url und job_url, und rufen Sie diese auf.

  12. Führen Sie den Auftrag aus: Klicken Sie auf der Seite Aufträge auf Jetzt ausführen. Überprüfen Sie nach Abschluss des Auftrags Ihren E-Mail-Posteingang.

  13. Wenn Sie mit diesem Beispiel fertig sind, löschen Sie das Notebook, den Cluster und den Auftrag aus dem Azure Databricks-Arbeitsbereich, indem Sie terraform destroy ausführen.

    Hinweis

    Weitere Informationen zu den Befehlen terraform plan, terraform apply und terraform destroy finden Sie in der Dokumentation zur Terraform CLI in der Terraform-Dokumentation.

  14. Überprüfen Sie, ob das Notebook, der Cluster und der Auftrag gelöscht wurden: Aktualisieren Sie die Seiten für das Notebook, den Cluster und die Aufträge, um jeweils eine Meldung anzuzeigen, dass die Ressourcen nicht gefunden wurden.

Testen

Testen Sie Ihre Terraform-Konfigurationen vor oder nach der Bereitstellung. Sie können Tests analog zu Unittests ausführen, bevor Sie Ressourcen bereitstellen. Sie können Tests auch analog zu Integrationstests ausführen, nachdem Ressourcen bereitgestellt wurden. Siehe Tests in der Terraform-Dokumentation.

Führen Sie Tests analog zu Integrationstests anhand der Beispielkonfiguration in diesem Artikel folgendermaßen aus:

  1. Erstellen Sie eine Datei namens cluster.tftest.hcl, und fügen Sie den folgenden Code hinzu. Diese Datei testet, ob der bereitgestellte Cluster den erwarteten Clusternamen aufweist.

    # 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. Erstellen Sie eine Datei namens job.tftest.hcl, und fügen Sie den folgenden Code hinzu. Diese Datei testet, ob der bereitgestellte Auftrag den erwarteten Auftragsnamen aufweist.

    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. Erstellen Sie eine Datei namens notebook.tftest.hcl, und fügen Sie den folgenden Code hinzu. Diese Datei testet, ob das bereitgestellte Notebook den erwarteten Arbeitsbereichspfad aufweist.

    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. Führen Sie terraform testaus. Terraform stellt jede Ressource im Azure Databricks-Arbeitsbereich bereit, führt jeden zugehörigen Test aus, meldet die Testergebnisse und löscht dann die bereitgestellte Ressource.

Führen Sie Tests analog zu Unittests anhand der Beispielkonfiguration in diesem Artikel folgendermaßen aus:

  • Ändern Sie die Zeile command = apply in jedem der vorherigen Tests in command = plan, und führen Sie dann terraform test aus. Terraform führt jeden zugehörigen Test aus und meldet die Testergebnisse, stellt jedoch keine Ressourcen bereit.
  • Simulieren Sie den Databricks Terraform-Anbieter. Auf diese Weise können Sie terraform test ausführen, ohne Ressourcen bereitzustellen und ohne dass Anmeldeinformationen für die Authentifizierung erforderlich sind. Siehe Simulationen in der Terraform-Dokumentation. Sie können simulierte Tests ausführen, indem Sie Ihren Tests die Zeile mock_provider "databricks" {} hinzufügen und die Zeile command = apply oder command = plan entfernen. Zum Beispiel:
# 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"
  }
}

Nächste Schritte

Zusätzliche Ressourcen