Aracılığıyla paylaş


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

  1. Terraform CLI'nız olmalıdır. Terraform web sitesinde Terraform'ı indirme bölümüne bakın.

  2. 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.

  3. 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"
        }
      }
    }
    
  4. 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.

  1. 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" {}
    
  2. adlı notebook.tfbaş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
    }
    
  3. adlı notebook.auto.tfvarsbaş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"
    
  4. adlı notebook-getting-started.pybaşka bir dosya oluşturun ve aşağıdaki kodu ekleyin. Bu dosya not defterinin içeriğini temsil eder.

    display(spark.range(10))
    
  5. adlı cluster.tfbaş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
    }
    
  6. adlı cluster.auto.tfvarsbaş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
    
  7. adlı job.tfbaş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
    }
    
  8. adlı job.auto.tfvarsbaş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"
    
  9. terraform plan'i çalıştırın. Herhangi bir hata varsa bunları düzeltin ve komutu yeniden çalıştırın.

  10. terraform apply'i çalıştırın.

  11. Not defterinin, kümenin ve işin oluşturulduğunu doğrulayın: komutun terraform apply çıkışında , cluster_urlve url'lerini notebook_urlbulun ve job_urlbunlara gidin.

  12. İşi çalıştırın: İşler sayfasında Şimdi Çalıştır'a tıklayın. İş tamamlandıktan sonra e-posta gelen kutunuzu denetleyin.

  13. Bu örnekle işiniz bittiğinde komutunu çalıştırarak terraform destroyAzure Databricks çalışma alanından not defterini, kümeyi ve işi silin.

    Not

    , terraform applyve komutları hakkında terraform plandaha fazla bilgi için Terraform belgelerindeki Terraform CLI Belgeleri'ne bakınterraform destroy.

  14. 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:

  1. adlı cluster.tftest.hclbir 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"
      }
    }
    
  2. adlı job.tftest.hclbir 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"
      }
    }
    
  3. adlı notebook.tftest.hclbir 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"
      }
    }
    
  4. 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 olarak command = plandeğiştirin ve komutunu çalıştırın terraform 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 çizgi mock_provider "databricks" {} eklemek ve çizgiyi command = apply veya command = 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

  1. Azure Databricks çalışma alanı oluşturun.
  2. 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:

  1. öğesini tüm dosyalarınızda .tf ile databricks/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)"
    
  2. 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.

  3. 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 stderrgö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