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
Musisz mieć interfejs wiersza polecenia narzędzia Terraform. Zobacz Pobieranie narzędzia Terraform w witrynie internetowej programu Terraform.
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.
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" } } }
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.
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" {}
Utwórz inny plik o nazwie
notebook.tf
i 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 }
Utwórz inny plik o nazwie
notebook.auto.tfvars
i 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"
Utwórz inny plik o nazwie
notebook-getting-started.py
i dodaj następujący kod. Ten plik reprezentuje zawartość notesu.display(spark.range(10))
Utwórz inny plik o nazwie
cluster.tf
i 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 }
Utwórz inny plik o nazwie
cluster.auto.tfvars
i 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
Utwórz inny plik o nazwie
job.tf
i 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 }
Utwórz inny plik o nazwie
job.auto.tfvars
i dodaj następujący kod. Ten plik określa właściwości zadań.job_name = "My Job" task_key = "my_task"
Uruchom program
terraform plan
. Jeśli występują jakiekolwiek błędy, napraw je, a następnie uruchom polecenie ponownie.Uruchom program
terraform apply
.Sprawdź, czy notes, klaster i zadanie zostały utworzone: w danych wyjściowych
terraform apply
polecenia znajdź adresy URL ,notebook_url
cluster_url
ijob_url
przejdź do nich.Uruchom zadanie: na stronie Zadania kliknij pozycję Uruchom teraz. Po zakończeniu zadania sprawdź skrzynkę odbiorczą wiadomości e-mail.
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 apply
i, zobacz Dokumentację interfejsuterraform plan
wiersza polecenia narzędzia Terraform w dokumentacjiterraform destroy
narzędzia Terraform.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:
Utwórz plik o nazwie
cluster.tftest.hcl
i 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" } }
Utwórz plik o nazwie
job.tftest.hcl
i 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" } }
Utwórz plik o nazwie
notebook.tftest.hcl
i 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" } }
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 nacommand = plan
, a następnie uruchom polecenieterraform 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 wierszamock_provider "databricks" {}
do testów i usunięcie wierszacommand = apply
lubcommand = 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
- Tworzenie obszaru roboczego usługi Azure Databricks.
- 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.
Zastąp ciąg
databrickslabs/databricks
ciągiemdatabricks/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)"
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.
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
Wdrażanie obszaru roboczego usługi Azure Databricks przy użyciu narzędzia Terraform
Zarządzanie obszarami roboczymi usługi Databricks przy użyciu narzędzia Terraform
Dodatkowe zasoby
- Dokumentacja dostawcy usługi Databricks w witrynie internetowej usługi Terraform Registry
- Dokumentacja narzędzia Terraform w witrynie internetowej programu Terraform
- Repozytorium terraform-databricks-examples w usłudze GitHub