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 ,notebook_url
ve url'lerinicluster_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 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.
- çalışma alanı kaynaklarını yönetme
- Küme, not defteri ve iş oluşturma
- Unity Kataloğu kurulumunu otomatikleştirme
- Databricks SQL tablolarına erişimi denetleme
- Örnek pano oluşturma