Dostawca narzędzia Terraform dla usługi Databricks
HashiCorp Terraform to popularne narzędzie typu open source do tworzenia bezpiecznej i przewidywalnej infrastruktury w różnych środowiskach chmurowych providers. 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 plik set konfiguracji 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. Zakłada się, że masz już set wymagania , a także utworzyłeś projekt Terraform i skonfigurowałeś projekt, korzystając z uwierzytelniania 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
.Sprawdź, czy notes, klaster i zadania zostały usunięte: strony refresh notesu, klastra oraz Zadań powinny wyświetlać 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. - Symuluj dostawcę Terraform dla Databricks, który umożliwia uruchamianie
terraform test
bez wdrażania zasobów, a także bez konieczności uwierzytelniania credentials. Zobacz Makiety w dokumentacji programu Terraform. Aby uruchomić testy próbne, jednym z podejść jest dodanie wierszamock_provider "databricks" {}
do testów oraz wiersza remove zcommand = 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.
Dodatkowe zasoby
- Dokumentacja dostawcy usługi Databricks w witrynie internetowej usługi Terraform Registry
- Dokumentacja narzędzia Terraform w witrynie internetowej programu Terraform
- repozytorium Github przykładów narzędzia Terraform usługi Databricks