Databricks Terraform sağlayıcısı
HashiCorp Terraform, çeşitli bulut sağlayıcıları arasında güvenli ve öngörülebilir bulut altyapısı oluşturmaya yönelik popüler bir açık kaynak aracıdır. Esnek ve güçlü bir araç kullanarak Azure Databricks çalışma alanlarınızı ve ilişkili bulut altyapınızı yönetmek için Databricks Terraform sağlayıcısını kullanabilirsiniz. Databricks Terraform sağlayıcısının amacı tüm Databricks REST API'lerini desteklemek ve veri platformlarınızı dağıtmanın ve yönetmenin en karmaşık yönlerinin otomasyonunu desteklemektir. Databricks müşterileri, kümeleri ve işleri dağıtmak ve yönetmek ve veri erişimini yapılandırmak için Databricks Terraform sağlayıcısını kullanıyor. Azure Databricks çalışma alanlarını sağlamak için Azure Sağlayıcısı'nı kullanırsınız.
Başlarken
Bu bölümde, yerel geliştirme makinenizde Terraform ve Databricks Terraform sağlayıcısını kullanmak için gereksinimleri yükleyip yapılandıracaksınız. Ardından Terraform kimlik doğrulamayı yapılandırabilirsiniz. Bu bölümün ardından, bu makale azure databricks not defteri, küme ve mevcut bir Azure Databricks çalışma alanında kümede not defterini çalıştırmak için bir iş sağlamak için deneyebileceğiniz örnek bir yapılandırma sağlar.
Gereksinimler
Terraform CLI'nız olmalıdır. Terraform web sitesinde Terraform'ı indirme bölümüne bakın.
Terraform projeniz olmalıdır. Terminalinizde boş bir dizin oluşturun ve ardından bu dizine geçin. (Her ayrı Terraform yapılandırma dosyası kümesi, Terraform projesi olarak adlandırılan kendi dizininde olmalıdır.) Örneğin:
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Terraform projenizdeki bir veya daha fazla yapılandırma dosyasında projeniz için Terraform yapılandırmalarını ekleyin. Yapılandırma dosyası söz dizimi hakkında bilgi için Terraform web sitesindeki Terraform Dil Belgeleri'ne bakın.
Terraform projenize Databricks Terraform sağlayıcısı için bir bağımlılık eklemeniz gerekir. Terraform projenizdeki yapılandırma dosyalarından birine aşağıdakileri ekleyin:
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
Terraform projeniz için kimlik doğrulamasını yapılandırmanız gerekir. Databricks Terraform sağlayıcısı belgelerinde kimlik doğrulaması bölümüne bakın.
Örnek yapılandırma
Bu bölümde, mevcut bir Azure Databricks çalışma alanında Azure Databricks not defterini, kümeyi ve not defterini kümede çalıştırma işini sağlamak için deneyebileceğiniz örnek bir yapılandırma sağlanır. Gereksinimleri önceden ayarladığınızı ve bir Terraform projesi oluşturduğunuzu ve projeyi önceki bölümde açıklandığı gibi Terraform kimlik doğrulamasıyla yapılandırdığınız varsayılır.
Terraform projenizde adlı
me.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya geçerli kullanıcı (siz) hakkında bilgi alır:# Retrieve information about the current user. data "databricks_current_user" "me" {}
adlı
notebook.tf
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya not defterini temsil eder.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 }
adlı
notebook.auto.tfvars
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya not defterinin özelliklerini belirtir.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
adlı
notebook-getting-started.py
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya not defterinin içeriğini temsil eder.display(spark.range(10))
adlı
cluster.tf
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya kümeyi temsil eder.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 }
adlı
cluster.auto.tfvars
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya kümenin özelliklerini belirtir.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
adlı
job.tf
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya, kümede not defterini çalıştıran işi temsil eder.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 }
adlı
job.auto.tfvars
başka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya işlerin özelliklerini belirtir.job_name = "My Job" task_key = "my_task"
terraform plan
'i çalıştırın. Herhangi bir hata varsa bunları düzeltin ve komutu yeniden çalıştırın.terraform apply
'i çalıştırın.Not defterinin, kümenin ve işin oluşturulduğunu doğrulayın: komutun
terraform apply
çıkışında ,cluster_url
ve url'lerininotebook_url
bulun vejob_url
bunlara gidin.İşi çalıştırın: İşler sayfasında Şimdi Çalıştır'a tıklayın. İş tamamlandıktan sonra e-posta gelen kutunuzu denetleyin.
Bu örnekle işiniz bittiğinde komutunu çalıştırarak
terraform destroy
Azure Databricks çalışma alanından not defterini, kümeyi ve işi silin.Not
,
terraform apply
ve komutları hakkındaterraform plan
daha fazla bilgi için Terraform belgelerindeki Terraform CLI Belgeleri'ne bakınterraform destroy
.Not defterinin, kümenin ve işin silindiğini doğrulayın: Not defterini, kümeyi ve İşler sayfalarını yenileyin ve her birinde kaynağın bulunamadığını belirten bir ileti görüntüleyin.
Test Etme
Terraform yapılandırmalarınızı dağıtmadan önce veya sonra test edin. Kaynakları dağıtmadan önce birim testine benzer testler çalıştırabilirsiniz. Kaynaklar dağıtıldıktan sonra tümleştirme testlerine benzer testler de çalıştırabilirsiniz. Terraform belgelerindeki Testler'e bakın.
Bu işlemi izleyerek bu makalenin örnek yapılandırmasıyla tümleştirme testlerine benzer testler çalıştırın:
adlı
cluster.tftest.hcl
bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya, dağıtılan kümenin beklenen küme adına sahip olup olmadığını test eder.# 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" } }
adlı
job.tftest.hcl
bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya, dağıtılan işin beklenen iş adına sahip olup olmadığını test eder.run "job_name_test" { command = apply assert { condition = databricks_job.this.name == var.job_name error_message = "Job name did not match expected name" } }
adlı
notebook.tftest.hcl
bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya, dağıtılan not defterinin beklenen çalışma alanı yoluna sahip olup olmadığını test eder.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" } }
terraform test
'i çalıştırın. Terraform her kaynağı Azure Databricks çalışma alanına dağıtır, ilgili her testi çalıştırır ve test sonucunu bildirir ve ardından dağıtılan kaynağı yok eder.
Aşağıdaki işlemle bu makalenin örnek yapılandırmasında birim testlerine benzer testler çalıştırın:
- Önceki testlerin her birindeki satırı
command = apply
olarakcommand = plan
değiştirin ve komutunu çalıştırınterraform test
. Terraform ilgili her testi çalıştırır ve test sonucunu bildirir, ancak herhangi bir kaynak dağıtmaz. - Kaynakları dağıtmadan ve kimlik doğrulaması kimlik bilgilerine gerek kalmadan çalıştırmanızı
terraform test
sağlayan Databricks Terraform sağlayıcısıyla dalga geçin. Terraform belgelerinde Mocks bölümüne bakın. Sahte testleri çalıştırmak için bir yaklaşım, testlerinize çizgimock_provider "databricks" {}
eklemek ve çizgiyicommand = apply
veyacommand = plan
öğesini kaldırmaktır, örneğin:
# 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"
}
}
Sonraki adımlar
- Azure Databricks çalışma alanı oluşturun.
- Azure Databricks çalışma alanı için çalışma alanı kaynaklarını yönetme.
Sorun giderme
Not
Terraform'a özgü destek için HashiCorp Tartışma web sitesindeki En son Terraform konularına bakın. Databricks Terraform Sağlayıcısına özgü sorunlar için bkz. databrickslabs/terraform-provider-databricks GitHub deposundaki sorunlar.
Hata: Sağlayıcı yüklenemedi
Sorun: Bir dosyayı sürüm denetim sisteminizde iade terraform.lock.hcl
etmediyseniz ve komutunu çalıştırırsanız terraform init
şu ileti görüntülenir: Failed to install provider
. Ek çıkış aşağıdakine benzer bir ileti içerebilir:
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"
Neden: Terraform yapılandırmalarınız eski Databricks Terraform sağlayıcılarına başvurur.
Çözüm:
öğesini tüm dosyalarınızda
.tf
iledatabricks/databricks
değiştirindatabrickslabs/databricks
.Bu değişiklikleri otomatikleştirmek için, güncelleştirilecek dosyaları içeren üst klasörden
.tf
aşağıdaki Python komutunu çalıştırın:python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
Aşağıdaki Terraform komutunu çalıştırın ve istendiğinde değişiklikleri onaylayın:
terraform state replace-provider databrickslabs/databricks databricks/databricks
Bu komut hakkında bilgi için Terraform belgelerindeki Command: state replace-provider bölümüne bakın.
Aşağıdaki Terraform komutunu çalıştırarak değişiklikleri doğrulayın:
terraform init
Hata: Kullanılabilir sağlayıcı paketleri sorgulanamadı
Sorun: Bir dosyayı sürüm denetim sisteminizde iade terraform.lock.hcl
etmediyseniz ve komutunu çalıştırırsanız terraform init
şu ileti görüntülenir: Failed to query available provider packages
.
Neden: Terraform yapılandırmalarınız eski Databricks Terraform sağlayıcılarına başvurur.
Çözüm: Hata: Sağlayıcı yüklenemedi başlığı altında yer alan çözüm yönergelerini izleyin.
Günlü kaydını etkinleştir
Databricks Terraform sağlayıcısı, ortam değişkenini DEBUG
veya Terraform'un desteklediği başka bir günlük düzeyini ayarlayarak TF_LOG
etkinleştirebileceğiniz günlükleri döndürür.
Günlükler varsayılan olarak adresine stderr
gönderilir. Günlükleri bir dosyaya göndermek için ortam değişkenini TF_LOG_PATH
hedef dosya yoluna ayarlayın.
Örneğin, hata ayıklama düzeyinde günlüğe kaydetmeyi etkinleştirmek ve komut çalışırken günlükleri geçerli çalışma dizinine terraform apply
göre adlı tf.log
bir dosyaya tek renkli biçimde çıkarmak için aşağıdaki komutu çalıştırabilirsiniz:
TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform apply -no-color
Terraform günlüğü hakkında daha fazla bilgi için bkz . Terraform'da Hata Ayıklama.
Ek örnekler
Ek kaynaklar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin