Bagikan melalui


Bermigrasi ke mesin penyebaran langsung

Penting

Fitur ini bersifat Percobaan.

Bundel Aset Databricks awalnya dibangun di atas penyedia Databricks Terraform untuk mengelola proses penyebaran. Namun, dalam upaya untuk menjauh dari dependensi ini, Databricks CLI versi 0.279.0 ke atas mendukung dua mesin penyebaran yang berbeda: terraform dan langsung. Mesin penempatan langsung tidak bergantung pada Terraform dan akan segera menjadi default. Mesin penyebaran Terraform pada akhirnya tidak digunakan lagi.

Apa keuntungan dari penyebaran langsung?

Mesin penyebaran langsung baru menggunakan Databricks Go SDK dan memberikan manfaat berikut:

  • Tidak ada persyaratan untuk mengunduh Terraform dan terraform-provider-databricks sebelum penyebaran
  • Menghindari masalah dengan firewall, proksi, dan registri penyedia kustom
  • Detail perbedaan perubahan tersedia menggunakan bundle plan -o json
  • Penyebaran yang lebih cepat
  • Mengurangi waktu untuk merilis sumber daya bundel baru, karena tidak perlu selaras dengan rilis penyedia Terraform

Bagaimana cara mulai menggunakan penyebaran langsung?

Untuk mulai menggunakan mesin penyebaran langsung baru:

  • Untuk bundel yang ada, migrasikan menggunakan databricks bundle deployment migrate.
  • Untuk bundel baru, sebarkan dengan variabel lingkungan DATABRICKS_BUNDLE_ENGINE disetel ke direct.

Memigrasikan bundel yang ada

Mesin penyebaran langsung menggunakan file status JSON sendiri. Skema ini berbeda dari file status Terraform JSON. Perintah migrasi penyebaran bundel mengonversi file status Terrform (terraform.tfstate) ke file status penyebaran langsung (resources.json). Perintah membaca ID dari implementasi yang ada.

  1. Lakukan penyebaran penuh dengan Terraform:

    databricks bundle deploy -t my_target
    
  2. Migrasikan penerapan:

    databricks bundle deployment migrate -t my_target
    
  3. Verifikasi bahwa migrasi berhasil. Perintah databricks bundle plan harus berhasil dan seharusnya tidak menunjukkan perubahan.

    databricks bundle plan -t my_target
    
    • Jika verifikasi gagal, hapus file status baru:

      rm .databricks/bundle/my_target/resources.json
      
    • Jika verifikasi berhasil, sebarkan bundel untuk menyinkronkan file status ke ruang kerja:

      databricks bundle deploy -t my_target
      

Menyebarkan bundel baru secara langsung

Perintah bundle migrate tidak berfungsi pada bundel yang belum pernah disebarkan karena tidak ada file status. Sebagai gantinya, atur variabel lingkungan dan sebarkan DATABRICKS_BUNDLE_ENGINE :

DATABRICKS_BUNDLE_ENGINE=direct databricks bundle deploy -t my_target

Apa saja perubahan dalam mesin penyebaran langsung?

Mesin penyebaran langsung baru sebagian besar bertingkah sama dengan mesin penyebaran Terrform, tetapi ada beberapa perbedaan.

Perhitungan perbedaan keadaan sumber daya

Tidak seperti Terraform yang mempertahankan satu status sumber daya (campuran konfigurasi lokal dan status jarak jauh), mesin baru ini tetap terpisah dan hanya merekam konfigurasi lokal dalam file statusnya.

Perhitungan diff status sumber daya dilakukan dalam dua langkah:

  1. Konfigurasi bundel lokal dibandingkan dengan konfigurasi rekam jepret yang digunakan untuk penyebaran terbaru. Status jarak jauh tidak memainkan peran.
  2. Status remote dibandingkan dengan konfigurasi snapshot yang digunakan untuk penyebaran terbaru.

Hasilnya adalah bahwa:

  • databricks.yml perubahan sumber daya tidak pernah diabaikan dan akan selalu memicu pembaruan.
  • Bidang sumber daya yang tidak ditangani oleh implementasi tidak memicu kesalahan hasil yang tidak konsisten. Sumber daya ini berhasil disebarkan oleh mesin langsung, tetapi ini dapat mengakibatkan penyimpangan. Sumber daya yang disebarkan diperbarui pada rencana atau penyebaran berikutnya.

pencarian substitusi sumber daya $

Penggunaan $resources yang paling umum adalah untuk menyelesaikan ID substitusi (misalnya, $resources.jobs.my_job.id) yang bertindak sama persis antara Terraform dan mesin penerapan langsung.

Namun, resolusi $resources substitusi di mesin penyebaran langsung (misalnya, $resources.pipelines.my_pipeline.name) dilakukan dalam dua langkah:

  1. Referensi yang menunjuk ke bidang yang ada dalam konfigurasi lokal diterjemahkan menjadi nilai yang disediakan dalam konfigurasi lokal.
  2. Referensi yang tidak ada dalam konfigurasi lokal akan diselesaikan dari status jarak jauh. Ini adalah status yang diambil menggunakan permintaan yang sesuai GET untuk sumber daya tertentu.

Skema yang digunakan untuk $resource resolusi tersedia dalam file out.fields.txt. Bidang yang ditandai sebagai ALL dan STATE dapat digunakan untuk resolusi lokal. Bidang yang ditandai sebagai ALL atau REMOTE dapat digunakan untuk resolusi jarak jauh.