Penyedia Databricks Terraform

HashiCorp Terraform adalah alat sumber terbuka yang populer untuk menciptakan infrastruktur cloud yang aman dan dapat diprediksi di beberapa penyedia cloud. Anda dapat menggunakan penyedia Databricks Terraform untuk mengelola ruang kerja Azure Databricks Anda dan infrastruktur cloud terkait menggunakan alat yang fleksibel dan kuat. Tujuan dari penyedia Databricks Terraform adalah untuk mendukung semua API Databricks REST, mendukung otomatisasi aspek yang paling rumit dalam menyebarkan dan mengelola platform data Anda. Pelanggan Databricks menggunakan penyedia Databricks Terraform untuk menyebarkan dan mengelola kluster dan pekerjaan serta untuk mengonfigurasi akses data. Anda menggunakan Penyedia Azure untuk memprovisikan ruang kerja Azure Databricks.

Memulai

Di bagian ini, Anda menginstal dan mengonfigurasi persyaratan untuk menggunakan Terraform dan penyedia Databricks Terraform di komputer pengembangan lokal Anda. Anda kemudian mengonfigurasi autentikasi Terraform. Mengikuti bagian ini, artikel ini menyediakan konfigurasi sampel yang dapat Anda eksperimen untuk memprovisikan notebook, kluster, dan pekerjaan Azure Databricks untuk menjalankan buku catatan pada kluster di ruang kerja Azure Databricks yang sudah ada.

Persyaratan

  1. Anda harus memiliki Terraform CLI. Harap lihat Mengunduh Terraform di situs web Terraform.

  2. Anda harus memiliki proyek Terraform. Di terminal Anda, buat direktori kosong lalu beralih ke sana. (Setiap set terpisah file konfigurasi Terraform harus berada di direktorinya sendiri, yang disebut proyek Terraform.) Misalnya: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    Sertakan konfigurasi Terraform untuk proyek Anda dalam satu atau beberapa file konfigurasi di proyek Terraform Anda. Untuk informasi tentang sintaks file konfigurasi, lihat Dokumentasi Bahasa Terraform di situs web Terraform.

  3. Anda harus menambahkan ke proyek Terraform Anda dependensi untuk penyedia Databricks Terraform. Tambahkan yang berikut ini ke salah satu file konfigurasi di proyek Terraform Anda:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. Anda harus mengonfigurasi autentikasi untuk proyek Terraform Anda. Lihat Autentikasi dalam dokumentasi penyedia Databricks Terraform.

Konfigurasi sampel

Bagian ini menyediakan konfigurasi sampel yang dapat Anda eksperimen untuk menyediakan buku catatan Azure Databricks, kluster, dan pekerjaan untuk menjalankan buku catatan di kluster, di ruang kerja Azure Databricks yang sudah ada. Ini mengasumsikan bahwa Anda telah menyiapkan persyaratan, serta membuat proyek Terraform dan mengonfigurasi proyek dengan autentikasi Terraform seperti yang dijelaskan di bagian sebelumnya.

  1. Buat file bernama me.tf di proyek Terraform Anda, dan tambahkan kode berikut. File ini mendapatkan informasi tentang pengguna saat ini (Anda):

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. Buat file lain bernama notebook.tf, dan tambahkan kode berikut. File ini mewakili buku catatan.

    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. Buat file lain bernama notebook.auto.tfvars, dan tambahkan kode berikut. File ini menentukan properti buku catatan.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Buat file lain bernama notebook-getting-started.py, dan tambahkan kode berikut. File ini mewakili isi buku catatan.

    display(spark.range(10))
    
  5. Buat file lain bernama cluster.tf, dan tambahkan kode berikut. File ini mewakili kluster.

    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. Buat file lain bernama cluster.auto.tfvars, dan tambahkan kode berikut. File ini menentukan properti kluster.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Buat file lain bernama job.tf, dan tambahkan kode berikut. File ini mewakili pekerjaan yang menjalankan buku catatan pada kluster.

    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. Buat file lain bernama job.auto.tfvars, dan tambahkan kode berikut. File ini menentukan properti pekerjaan.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Jalankan terraform plan. Jika ada kesalahan, perbaiki, lalu jalankan perintah lagi.

  10. Jalankan terraform apply.

  11. Verifikasi bahwa buku catatan, kluster, dan pekerjaan dibuat: dalam output terraform apply perintah, temukan URL untuk notebook_url, , cluster_urldan job_url, dan buka.

  12. Jalankan pekerjaan: di halaman Pekerjaan, klik Jalankan Sekarang. Setelah pekerjaan selesai, periksa kotak masuk email Anda.

  13. Setelah selesai dengan sampel ini, hapus buku catatan, kluster, dan pekerjaan dari ruang kerja Azure Databricks dengan menjalankan terraform destroy.

    Catatan

    Untuk informasi selengkapnya tentang terraform planperintah , terraform apply, dan terraform destroy , lihat Dokumentasi Terraform CLI dalam dokumentasi Terraform.

  14. Verifikasi bahwa buku catatan, kluster, dan pekerjaan dihapus: refresh halaman buku catatan, kluster, dan Pekerjaan untuk setiap menampilkan pesan bahwa sumber daya tidak dapat ditemukan.

Pengujian

Uji konfigurasi Terraform Anda sebelum atau sesudah Anda menyebarkannya. Anda dapat menjalankan pengujian yang dianalogikan ke pengujian unit sebelum menyebarkan sumber daya. Anda juga dapat menjalankan pengujian yang dianalogikan dengan pengujian integrasi setelah sumber daya disebarkan. Lihat Pengujian dalam dokumentasi Terraform.

Jalankan pengujian yang dianalogikan untuk pengujian integrasi terhadap konfigurasi sampel artikel ini dengan mengikuti proses ini:

  1. Buat file bernama cluster.tftest.hcl, dan tambahkan kode berikut. File ini menguji apakah kluster yang disebarkan memiliki nama kluster yang diharapkan.

    # 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. Buat file bernama job.tftest.hcl, dan tambahkan kode berikut. File ini menguji apakah pekerjaan yang disebarkan memiliki nama pekerjaan yang diharapkan.

    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. Buat file bernama notebook.tftest.hcl, dan tambahkan kode berikut. File ini menguji apakah notebook yang disebarkan memiliki jalur ruang kerja yang diharapkan.

    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. Jalankan terraform test. Terraform menyebarkan setiap sumber daya ke ruang kerja Azure Databricks, menjalankan setiap pengujian terkait dan melaporkan hasil pengujiannya, lalu merobek sumber daya yang disebarkan.

Jalankan pengujian yang dianalogikan ke pengujian unit terhadap konfigurasi sampel artikel ini dengan proses berikut:

  • Ubah baris command = apply di setiap pengujian sebelumnya menjadi command = plan, lalu jalankan terraform test. Terraform menjalankan setiap pengujian terkait dan melaporkan hasil pengujiannya tetapi tidak menyebarkan sumber daya apa pun.
  • Mock penyedia Databricks Terraform, yang memungkinkan Anda untuk menjalankan terraform test tanpa menyebarkan sumber daya dan juga tanpa memerlukan kredensial autentikasi apa pun. Lihat Tiruan dalam dokumentasi Terraform. Untuk menjalankan pengujian tiruan, salah satu pendekatannya adalah menambahkan baris mock_provider "databricks" {} ke pengujian Anda dan untuk menghapus baris command = apply atau command = plan, misalnya:
# 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"
  }
}

Langkah berikutnya

  1. Membuat ruang kerja Azure Databricks.
  2. Mengelola sumber daya ruang kerja untuk ruang kerja Azure Databricks.

Pemecahan Masalah

Catatan

Untuk dukungan khusus Terraform, lihat topik Terraform Terbaru di situs web HashiCorp Discuss. Untuk masalah khusus untuk Penyedia Terraform Databricks, lihat Masalah di repositori databrickslabs/terraform-provider-databricks GitHub.

Kesalahan: Gagal menginstal penyedia

Masalah: Jika Anda tidak memeriksa file terraform.lock.hcl ke sistem kontrol versi Anda, lalu Anda menjalankan perintah terraform init, pesan berikut akan muncul: Failed to install provider. Output tambahan dapat mencakup pesan yang serupa dengan yang berikut ini:

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"

Penyebab: Konfigurasi Terraform Anda mereferensikan penyedia Databricks Terraform yang sudah kedaluwarsa.

Solusi:

  1. Ganti databrickslabs/databricks menjadi databricks/databricks pada semua file .tf Anda.

    Untuk mengotomatiskan penggantian ini, jalankan perintah Python berikut dari folder induk yang berisi file .tf untuk diperbarui:

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. Jalankan perintah Terraform berikut, kemudian setujui perubahan saat diminta:

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    Untuk informasi mengenai perintah ini, lihat Perintah: state replace-provider pada dokumentasi Terraform.

  3. Anda dapat memverifikasi perubahan tersebut dengan cara menjalankan perintah berikut:

    terraform init
    

Kesalahan: Gagal mengkueri paket penyedia yang telah tersedia

Masalah: Jika Anda tidak memeriksa file terraform.lock.hcl ke sistem kontrol versi Anda, lalu Anda menjalankan perintah terraform init, pesan berikut akan muncul: Failed to query available provider packages.

Penyebab: Konfigurasi Terraform Anda mereferensikan penyedia Databricks Terraform yang sudah kedaluwarsa.

Solusi: Ikuti instruksi solusi pada Kesalahan: Gagal menginstal penyedia.

Aktifkan pencatatan log

Penyedia Databricks Terraform menghasilkan log yang dapat Anda aktifkan dengan mengatur TF_LOG variabel lingkungan ke DEBUG atau tingkat log lain yang didukung Terraform.

Secara default, log dikirim ke stderr. Untuk mengirim log ke file, atur TF_LOG_PATH variabel lingkungan ke jalur file target.

Misalnya, Anda dapat menjalankan perintah berikut untuk mengaktifkan pengelogan di tingkat debug, dan untuk mengeluarkan log dalam format monokrom ke file bernama tf.log relatif terhadap direktori kerja saat ini, sementara terraform apply perintah berjalan:

TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform apply -no-color

Untuk informasi selengkapnya tentang pengelogan Terraform, lihat Men-debug Terraform.

Contoh tambahan

Sumber Daya Tambahan: