Bagikan melalui


Penyedia Databricks CDK Terraform

Catatan

Artikel ini membahas Cloud Development Kit for Terraform (CDKTF), yang tidak disediakan atau didukung oleh Databricks. Untuk menghubungi penyedia, lihat Komunitas Terraform.

Artikel ini menunjukkan kepada Anda cara menggunakan Python bersama dengan Penyedia Databricks CDK Terraform dan Cloud Development Kit for Terraform (CDKTF). CDKTF adalah platform pihak ketiga, infrastruktur sebagai kode (IaC) yang memungkinkan Anda membuat, menyebarkan, dan mengelola sumber daya Azure Databricks dengan menggunakan bahasa pemrograman, alat, dan praktik teknik yang sudah dikenal. Meskipun artikel ini menunjukkan cara menggunakan Python, CDKTF mendukung bahasa tambahan seperti TypeScript, Java, C#, dan Go.

Penyedia Terraform CDK Databricks didasarkan pada penyedia Databricks Terraform. Untuk informasi selengkapnya, lihat Terraform Cloud. CDKTF didasarkan pada AWS Cloud Development Kit (AWS CDK).

Persyaratan

Anda harus memiliki ruang kerja Azure Databricks, karena artikel ini menyebarkan sumber daya ke ruang kerja yang ada.

Pada komputer pengembangan lokal, Anda harus menginstal hal berikut:

  • Terraform, versi 1.1 atau lebih tinggi. Untuk memeriksa apakah Anda telah menginstal Terraform, dan untuk memeriksa versi yang diinstal, jalankan perintah terraform -v dari terminal Anda atau dengan PowerShell. Instal Terraform, jika Anda belum menginstalnya.

    terraform -v
    
  • Node.js, versi 16.13 atau lebih tinggi, dan npm. Untuk memeriksa apakah Anda telah Node.js dan npm menginstal, dan untuk memeriksa versi yang diinstal, jalankan perintah node -v dan npm -v. Versi terbaru Node.js sudah menyertakan npm. Instal Node.js dan npm dengan menggunakan Node Version Manager (nvm), jika Anda tidak memiliki Node.js dan npm sudah diinstal.

    node -v
    npm -v
    
  • CDKTF CLI. Untuk memeriksa apakah Anda telah menginstal CDKTF CLI, dan untuk memeriksa versi yang diinstal, jalankan perintah cdktf --version. Instal CDKTF CLI dengan menggunakan npm, jika Anda belum menginstalnya.

    cdktf --version
    

    Tip

    Anda juga dapat menginstal CDKTF CLI di macOS dengan Homebrew. Lihat Menginstal CDKTF.

  • Python versi 3.7 atau lebih tinggi dan pipenv versi 2021.5.29 atau lebih tinggi. Untuk memeriksa apakah Anda memiliki Python dan pipenv diinstal, dan untuk memeriksa versi yang diinstal, jalankan perintah python --version dan pipenv --version. Instal Python dan instal pipenv, jika belum diinstal.

    python --version
    pipenv --version
    
  • Autentikasi Azure Databricks dikonfigurasi untuk jenis autentikasi yang didukung yang ingin Anda gunakan. Lihat Autentikasi dalam dokumentasi penyedia Databricks Terraform.

Langkah 1: Membuat proyek CDKTF

Dalam langkah ini, pada komputer pengembangan lokal Anda, Anda menyiapkan struktur direktori yang diperlukan untuk proyek CDKTF. Anda kemudian membuat proyek CDKTF dalam struktur direktori ini.

  1. Buat direktori kosong untuk proyek CDKTF Anda, lalu beralihlah ke direktori tersebut. Jalankan perintah berikut di terminal Anda atau dengan PowerShell:

    Unix, Linux, dan macOS

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. Buat proyek CDKTF dengan menjalankan perintah berikut:

    cdktf init --template=python --local
    
  3. Saat dimintai Nama Proyek, terima nama cdktf-demo proyek default dengan menekan Enter.

  4. Saat dimintai Deskripsi Proyek, terima deskripsi proyek default dengan menekan Enter.

  5. Jika diminta Apakah Anda ingin memulai dari proyek Terraform yang sudah ada, masukkan N dan tekan Enter.

  6. Jika diminta Apakah Anda ingin mengirim laporan crash ke tim CDKTF, masukkan n dan tekan Enter.

CDKTF membuat file dan subdirektori berikut di direktori Anda cdktf-demo :

  • .gitignore, yang merupakan daftar file dan direktori yang diabaikan Git jika Anda ingin mendorong proyek ini ke repositori Git jarak jauh.
  • cdktf.json, yang berisi pengaturan konfigurasi untuk proyek CDKTF Anda. Lihat File Konfigurasi untuk informasi selengkapnya tentang pengaturan konfigurasi.
  • help, yang berisi informasi tentang beberapa langkah berikutnya yang dapat Anda ambil untuk bekerja dengan proyek CDKTF Anda.
  • main-test.py, yang berisi pengujian unit pendukung yang dapat Anda tulis untuk proyek CDKTF Anda. Lihat Pengujian Unit untuk informasi selengkapnya tentang pengujian unit.
  • main.py, yang berisi kode Python yang Anda tulis untuk proyek CDKTF Anda.
  • Pipfile dan Pipfile.lock, yang mengelola dependensi kode untuk proyek CDKTF Anda.

Langkah 2: Tentukan sumber daya

Dalam langkah ini, Anda menggunakan penyedia Terraform CDK Databricks untuk menentukan buku catatan dan pekerjaan untuk menjalankan buku catatan tersebut.

  1. Instal dependensi proyek: menggunakan pipenv, instal ke proyek CDKTF Anda, Penyedia Databricks CDK Terraform untuk menghasilkan sumber daya Azure Databricks. Untuk melakukan ini, jalankan hal berikut:

    pipenv install cdktf-cdktf-provider-databricks
    
  2. Ganti konten main.py file dengan kode berikut. Kode ini mengautentikasi CDKTF dengan ruang kerja Azure Databricks Anda, lalu menghasilkan buku catatan bersama dengan pekerjaan untuk menjalankan buku catatan. Untuk melihat dokumentasi sintaks untuk kode ini, lihat referensi konstruksi penyedia Terraform CDK Databricks untuk Python.

    #!/usr/bin/env python
    from constructs import Construct
    from cdktf import (
      App, TerraformStack, TerraformOutput
    )
    from cdktf_cdktf_provider_databricks import (
      data_databricks_current_user,
      job, notebook, provider
    )
    import vars
    from base64 import b64encode
    
    class MyStack(TerraformStack):
      def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)
    
        provider.DatabricksProvider(
          scope = self,
          id    = "databricksAuth"
        )
    
        current_user = data_databricks_current_user.DataDatabricksCurrentUser(
          scope     = self,
          id_       = "currentUser"
        )
    
        # Define the notebook.
        my_notebook = notebook.Notebook(
          scope          = self,
          id_            = "notebook",
          path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
          language       = "PYTHON",
          content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
        )
    
        # Define the job to run the notebook.
        my_job = job.Job(
          scope = self,
          id_ = "job",
          name = f"{vars.resource_prefix}-job",
          task = [ 
            job.JobTask(
              task_key = f"{vars.resource_prefix}-task",
              new_cluster = job.JobTaskNewCluster(
                num_workers   = vars.num_workers,
                spark_version = vars.spark_version,
                node_type_id  = vars.node_type_id
              ),
              notebook_task = job.JobTaskNotebookTask(
                notebook_path = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py"
              ),
              email_notifications = job.JobTaskEmailNotifications(
                on_success = [ current_user.user_name ],
                on_failure = [ current_user.user_name ]
              )
            )
          ]
        )
    
        # Output the notebook and job URLs.
        TerraformOutput(
          scope = self,
          id    = "Notebook URL",
          value = my_notebook.url
        )
    
        TerraformOutput(
          scope = self,
          id    = "Job URL",
          value = my_job.url
        )
    
    app = App()
    MyStack(app, "cdktf-demo")
    app.synth()
    
  3. Buat file bernama vars.py dalam direktori yang sama dengan main.py. Ganti nilai berikut dengan nilai Anda sendiri untuk menentukan awalan sumber daya dan pengaturan kluster seperti jumlah pekerja, string versi runtime Spark, dan jenis node.

    #!/usr/bin/env python
    resource_prefix = "cdktf-demo"
    num_workers     = 1
    spark_version   = "14.3.x-scala2.12"
    node_type_id    = "Standard_D3_v2"
    

Langkah 3: Menyebarkan sumber daya

Dalam langkah ini, Anda menggunakan CDKTF CLI untuk menyebarkan, ke ruang kerja Azure Databricks yang sudah ada, buku catatan yang ditentukan, dan pekerjaan untuk menjalankan buku catatan tersebut.

  1. Hasilkan kode Terraform yang setara untuk proyek CDKTF Anda. Untuk melakukan hal ini, jalankan perintah cdktf synth.

    cdktf synth
    
  2. Sebelum membuat perubahan, Anda dapat meninjau perubahan sumber daya yang tertunda. Jalankan berikut ini:

    cdktf diff
    
  3. Sebarkan buku catatan dan pekerjaan dengan menjalankan cdktf deploy perintah .

    cdktf deploy
    
  4. Saat diminta untuk Menyetujui, tekan Enter. Terraform membuat dan menyebarkan buku catatan dan pekerjaan ke ruang kerja Anda.

Langkah 4: Berinteraksi dengan sumber daya

Dalam langkah ini, Anda menjalankan pekerjaan di ruang kerja Azure Databricks Anda, yang menjalankan buku catatan yang ditentukan.

  1. Untuk menampilkan buku catatan yang akan dijalankan pekerjaan di ruang kerja Anda, salin tautan URL Buku Catatan yang muncul di output cdk deploy perintah dan tempelkan ke bilah alamat browser web Anda.
  2. Untuk menampilkan pekerjaan yang menjalankan buku catatan di ruang kerja Anda, salin tautan URL Pekerjaan yang muncul di output cdk deploy perintah dan tempelkan ke bilah alamat browser web Anda.
  3. Untuk menjalankan pekerjaan, klik tombol Jalankan sekarang di halaman pekerjaan.

(Opsional) Langkah 5: Membuat perubahan pada sumber daya

Dalam langkah opsional ini, Anda mengubah kode buku catatan, menyebarkan ulang buku catatan yang diubah, lalu menggunakan pekerjaan untuk menjalankan ulang buku catatan yang diubah.

Jika Anda tidak ingin membuat perubahan apa pun pada buku catatan, lewati ke Langkah 6: Bersihkan.

  1. main.py Dalam file, ubah notebook deklarasi variabel dari yang berikut:

    my_notebook = notebook.Notebook(
      scope          = self,
      id_            = "notebook",
      path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
      language       = "PYTHON",
      content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
    )
    

    Untuk hal berikut:

    my_notebook = notebook.Notebook(
      scope          = self,
      id_            = "notebook",
      path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
      language       = "PYTHON",
      content_base64 = b64encode(b'''
    data = [
       { "Category": 'A', "ID": 1, "Value": 121.44 },
       { "Category": 'B', "ID": 2, "Value": 300.01 },
       { "Category": 'C', "ID": 3, "Value": 10.99 },
       { "Category": 'E', "ID": 4, "Value": 33.87}
    ]
    
    df = spark.createDataFrame(data)
    
    display(df)
    ''').decode("UTF-8")
    )
    

    Catatan

    Pastikan bahwa baris kode antara dengan tanda kutip tiga (''') diselaraskan dengan tepi editor kode Anda, seperti yang ditunjukkan. Jika tidak, Terraform akan menyisipkan spasi kosong tambahan ke dalam buku catatan yang dapat menyebabkan kode Python baru gagal dijalankan.

  2. Regenerasi kode Terraform yang setara untuk proyek CDKTF Anda. Untuk melakukan ini, jalankan hal berikut:

    cdktf synth
    
  3. Sebelum membuat perubahan, Anda dapat meninjau perubahan sumber daya yang tertunda. Jalankan berikut ini:

    cdktf diff
    
  4. Sebarkan perubahan buku catatan dengan menjalankan cdktf deploy perintah .

    cdktf deploy
    
  5. Saat diminta untuk Menyetujui, tekan Enter. Terraform mengubah konten buku catatan.

  6. Untuk menampilkan buku catatan yang diubah yang akan dijalankan pekerjaan di ruang kerja Anda, refresh buku catatan yang Anda buka sebelumnya, atau salin tautan URL Buku Catatan yang muncul di output cdk deploy perintah dan tempelkan ke bilah alamat browser web Anda.

  7. Untuk menampilkan pekerjaan yang menjalankan buku catatan yang diubah di ruang kerja Anda, refresh pekerjaan yang Anda buka sebelumnya, atau salin tautan URL Pekerjaan yang muncul di output cdk deploy perintah dan tempelkan ke bilah alamat browser web Anda.

  8. Untuk menjalankan pekerjaan, klik tombol Jalankan sekarang di halaman pekerjaan.

Langkah 6: Bersihkan

Dalam langkah ini, Anda menggunakan CDKTF CLI untuk menghapus buku catatan dan pekerjaan dari ruang kerja Azure Databricks Anda.

  1. Hapus sumber daya dari ruang kerja Anda dengan menjalankan cdktf destroy perintah:

    cdktf destroy
    
  2. Saat diminta untuk Menyetujui, tekan Enter. Terraform menghapus sumber daya dari ruang kerja Anda.

Pengujian

Anda dapat menguji proyek CDKTF sebelum menyebarkannya. Lihat Pengujian Unit dalam dokumentasi CDKTF.

Untuk proyek CDKTF berbasis Python, Anda dapat menulis dan menjalankan pengujian dengan menggunakan pytest kerangka kerja pengujian Python bersama dengan cdktf kelas paketTesting. Contoh file berikut bernama test_main.py menguji kode CDKTF dalam file sebelumnya main.py artikel ini. Pengujian pertama memeriksa apakah notebook proyek akan berisi representasi konten buku catatan yang dikodekan Base64 yang diharapkan. Pengujian kedua memeriksa apakah pekerjaan proyek akan berisi nama pekerjaan yang diharapkan. Untuk menjalankan pengujian ini, jalankan pytest perintah dari direktori akar proyek.

from cdktf import App, Testing
from cdktf_cdktf_provider_databricks import job, notebook
from main import MyStack

class TestMain:
  app = App()
  stack = MyStack(app, "cdktf-demo")
  synthesized = Testing.synth(stack)

  def test_notebook_should_have_expected_base64_content(self):
    assert Testing.to_have_resource_with_properties(
      received = self.synthesized,
      resource_type = notebook.Notebook.TF_RESOURCE_TYPE,
      properties = {
        "content_base64": "ZGlzcGxheShzcGFyay5yYW5nZSgxMCkp"
      }
    )

  def test_job_should_have_expected_job_name(self):
    assert Testing.to_have_resource_with_properties(
      received = self.synthesized,
      resource_type = job.Job.TF_RESOURCE_TYPE,
      properties = {
        "name": "cdktf-demo-job"
      }
    )

Sumber daya lainnya