Udostępnij za pośrednictwem


Dostawca narzędzia Terraform dla usługi Databricks

HashiCorp Terraform to popularne narzędzie typu open source do tworzenia bezpiecznej i przewidywalnej infrastruktury chmury u kilku dostawców chmury. Za pomocą dostawcy narzędzia Terraform usługi Databricks można zarządzać obszarami roboczymi usługi Azure Databricks i powiązaną infrastrukturą chmury przy użyciu elastycznego, zaawansowanego narzędzia. Celem dostawcy narzędzia Terraform usługi Databricks jest obsługa wszystkich interfejsów API REST usługi Databricks, które obsługują automatyzację najbardziej skomplikowanych aspektów wdrażania platform danych i zarządzania nimi. Klienci usługi Databricks używają dostawcy narzędzia Terraform usługi Databricks do wdrażania klastrów i zadań oraz zarządzania nimi oraz konfigurowania dostępu do danych. Dostawca platformy Azure służy do aprowizowania obszarów roboczych usługi Azure Databricks.

Wprowadzenie

W tej sekcji zainstalujesz i skonfigurujesz wymagania dotyczące używania programu Terraform i dostawcy narzędzia Terraform usługi Databricks na lokalnej maszynie dewelopera. Następnie skonfigurujesz uwierzytelnianie programu Terraform. W tej sekcji ten artykuł zawiera przykładową konfigurację , z którą można eksperymentować w celu aprowizacji notesu, klastra i klastra usługi Azure Databricks oraz zadania uruchamiania notesu w klastrze w istniejącym obszarze roboczym usługi Azure Databricks.

Wymagania

  1. Musisz mieć interfejs wiersza polecenia narzędzia Terraform. Zobacz Pobieranie narzędzia Terraform w witrynie internetowej programu Terraform.

  2. Musisz mieć projekt Terraform. W terminalu utwórz pusty katalog, a następnie przejdź do niego. (Każdy oddzielny zestaw plików konfiguracji programu Terraform musi znajdować się we własnym katalogu, który jest nazywany projektem Terraform). Na przykład: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    Uwzględnij konfiguracje programu Terraform dla projektu w co najmniej jednym pliku konfiguracji w projekcie programu Terraform. Aby uzyskać informacje na temat składni pliku konfiguracji, zobacz dokumentację programu Terraform Language w witrynie internetowej programu Terraform.

  3. Musisz dodać do projektu Terraform zależność dostawcy narzędzia Terraform usługi Databricks. Dodaj następujące elementy do jednego z plików konfiguracji w projekcie programu Terraform:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. Należy skonfigurować uwierzytelnianie dla projektu Terraform. Zobacz Uwierzytelnianie w dokumentacji dostawcy narzędzia Terraform usługi Databricks.

Przykładowa konfiguracja

Ta sekcja zawiera przykładową konfigurację, z którą można eksperymentować, aby aprowizować notes usługi Azure Databricks, klaster i zadanie uruchamiania notesu w klastrze w istniejącym obszarze roboczym usługi Azure Databricks. Przyjęto założenie, że zostały już skonfigurowane wymagania, a także utworzono projekt terraform i skonfigurowano projekt przy użyciu uwierzytelniania narzędzia Terraform zgodnie z opisem w poprzedniej sekcji.

  1. Utwórz plik o nazwie me.tf w projekcie terraform i dodaj następujący kod. Ten plik pobiera informacje o bieżącym użytkowniku (ty):

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. Utwórz inny plik o nazwie notebook.tfi dodaj następujący kod. Ten plik reprezentuje notes.

    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. Utwórz inny plik o nazwie notebook.auto.tfvarsi dodaj następujący kod. Ten plik określa właściwości notesu.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Utwórz inny plik o nazwie notebook-getting-started.pyi dodaj następujący kod. Ten plik reprezentuje zawartość notesu.

    display(spark.range(10))
    
  5. Utwórz inny plik o nazwie cluster.tfi dodaj następujący kod. Ten plik reprezentuje klaster.

    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. Utwórz inny plik o nazwie cluster.auto.tfvarsi dodaj następujący kod. Ten plik określa właściwości klastra.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Utwórz inny plik o nazwie job.tfi dodaj następujący kod. Ten plik reprezentuje zadanie uruchamiające notes w klastrze.

    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. Utwórz inny plik o nazwie job.auto.tfvarsi dodaj następujący kod. Ten plik określa właściwości zadań.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Uruchom program terraform plan. Jeśli występują jakiekolwiek błędy, napraw je, a następnie uruchom polecenie ponownie.

  10. Uruchom program terraform apply.

  11. Sprawdź, czy notes, klaster i zadanie zostały utworzone: w danych wyjściowych terraform apply polecenia znajdź adresy URL , notebook_urlcluster_urli job_urlprzejdź do nich.

  12. Uruchom zadanie: na stronie Zadania kliknij pozycję Uruchom teraz. Po zakończeniu zadania sprawdź skrzynkę odbiorczą wiadomości e-mail.

  13. Po zakończeniu pracy z tym przykładem usuń notes, klaster i zadanie z obszaru roboczego usługi Azure Databricks, uruchamiając polecenie terraform destroy.

    Uwaga

    Aby uzyskać więcej informacji na temat poleceń , terraform applyi, zobacz Dokumentację interfejsu terraform planwiersza polecenia narzędzia Terraform w dokumentacji terraform destroy narzędzia Terraform.

  14. Sprawdź, czy notes, klaster i zadanie zostały usunięte: odśwież strony notesu, klastra i zadań , aby wyświetlić komunikat, że nie można odnaleźć zasobu.

Testowanie

Przetestuj konfiguracje programu Terraform przed wdrożeniem lub po ich wdrożeniu. Testy można uruchamiać analogicznie do testów jednostkowych przed wdrożeniem zasobów. Testy można również uruchamiać analogicznie do testowania integracji po wdrożeniu zasobów. Zobacz Testy w dokumentacji narzędzia Terraform.

Uruchom testy analogiczne do testów integracji względem przykładowej konfiguracji tego artykułu, wykonując następujący proces:

  1. Utwórz plik o nazwie cluster.tftest.hcli dodaj następujący kod. Ten plik sprawdza, czy wdrożony klaster ma oczekiwaną nazwę klastra.

    # 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. Utwórz plik o nazwie job.tftest.hcli dodaj następujący kod. Ten plik sprawdza, czy wdrożone zadanie ma oczekiwaną nazwę zadania.

    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. Utwórz plik o nazwie notebook.tftest.hcli dodaj następujący kod. Ten plik sprawdza, czy wdrożony notes ma oczekiwaną ścieżkę obszaru roboczego.

    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. Uruchom program terraform test. Narzędzie Terraform wdraża każdy zasób w obszarze roboczym usługi Azure Databricks, uruchamia każdy powiązany test i raportuje jego wynik testu, a następnie usuwa wdrożony zasób.

Uruchom testy podobne do testów jednostkowych względem przykładowej konfiguracji tego artykułu przy użyciu następującego procesu:

  • Zmień wiersz command = apply w każdym z powyższych testów na command = plan, a następnie uruchom polecenie terraform test. Narzędzie Terraform uruchamia każdy powiązany test i raportuje jego wynik testu, ale nie wdraża żadnych zasobów.
  • Wyśmiewa dostawcę narzędzia Terraform usługi Databricks, który umożliwia uruchamianie terraform test bez wdrażania zasobów, a także bez konieczności uwierzytelniania poświadczeń. Zobacz Makiety w dokumentacji programu Terraform. Aby uruchomić pozorne testy, jednym z podejść jest dodanie wiersza mock_provider "databricks" {} do testów i usunięcie wiersza command = apply lub command = plan, na przykład:
# 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"
  }
}

Następne kroki

  1. Tworzenie obszaru roboczego usługi Azure Databricks.
  2. Zarządzanie zasobami obszaru roboczego dla obszaru roboczego usługi Azure Databricks.

Rozwiązywanie problemów

Uwaga

Aby uzyskać pomoc techniczną specyficzną dla programu Terraform, zobacz najnowsze tematy programu Terraform w witrynie internetowej HashiCorp Omówienie. W przypadku problemów specyficznych dla dostawcy narzędzia Terraform usługi Databricks zobacz Problemy w repozytorium GitHub databricks/terraform-provider-databricks .

Błąd: Nie można zainstalować dostawcy

Problem: Jeśli nie zaewidencjonujesz pliku w terraform.lock.hcl systemie kontroli wersji i uruchomisz terraform init polecenie, zostanie wyświetlony następujący komunikat: Failed to install provider. Dodatkowe dane wyjściowe mogą zawierać komunikat podobny do następującego:

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"

Przyczyna: Konfiguracje narzędzia Terraform odwołują się do nieaktualnych dostawców narzędzia Terraform usługi Databricks.

Rozwiązanie 2.

  1. Zastąp ciąg databrickslabs/databricks ciągiem databricks/databricks we wszystkich plikach .tf .

    Aby zautomatyzować te zamiany, uruchom następujące polecenie języka Python z folderu nadrzędnego zawierającego .tf pliki do zaktualizowania:

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. Uruchom następujące polecenie narzędzia Terraform, a następnie zatwierdź zmiany po wyświetleniu monitu:

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    Aby uzyskać informacje o tym poleceniu, zobacz Polecenie: state replace-provider w dokumentacji narzędzia Terraform.

  3. Sprawdź zmiany, uruchamiając następujące polecenie narzędzia Terraform:

    terraform init
    

Błąd: Nie można wysłać zapytania o dostępne pakiety dostawcy

Problem: Jeśli nie zaewidencjonujesz pliku w terraform.lock.hcl systemie kontroli wersji i uruchomisz terraform init polecenie, zostanie wyświetlony następujący komunikat: Failed to query available provider packages.

Przyczyna: Konfiguracje narzędzia Terraform odwołują się do nieaktualnych dostawców narzędzia Terraform usługi Databricks.

Rozwiązanie: postępuj zgodnie z instrukcjami w temacie Błąd: Nie można zainstalować dostawcy.

Włącz rejestrowanie

Dostawca narzędzia Terraform usługi Databricks generuje dzienniki, które można włączyć, ustawiając zmienną TF_LOG środowiskową na DEBUG lub dowolny inny poziom dziennika, który obsługuje program Terraform.

Domyślnie dzienniki są wysyłane do programu stderr. Aby wysyłać dzienniki do pliku, ustaw TF_LOG_PATH zmienną środowiskową na docelową ścieżkę pliku.

Możesz na przykład uruchomić następujące polecenie, aby włączyć rejestrowanie na poziomie debugowania, a następnie wyświetlić dzienniki w formacie monochromatycznym do pliku o nazwie tf.log względnej względem bieżącego katalogu roboczego, podczas gdy terraform apply polecenie jest uruchamiane:

TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform apply -no-color

Aby uzyskać więcej informacji na temat rejestrowania programu Terraform, zobacz Debugowanie programu Terraform.

Dodatkowe przykłady

Dodatkowe zasoby