Aracılığıyla paylaş


Terraform CDK Databricks Sağlayıcısı

Not

Bu makale, bir üçüncü taraf tarafından geliştirilen Terraform için Bulut Geliştirme Seti'ni (CDKTF) kapsar. Sağlayıcıyla iletişim kurmak için terraform topluluğuna bakın.

Bu makalede, Python'ın Terraform CDK Databricks Sağlayıcısı ve Terraform için Bulut Geliştirme Seti (CDKTF) ile birlikte nasıl kullanılacağı gösterilmektedir. CDKTF, tanıdık programlama dillerini, araçları ve mühendislik uygulamalarını kullanarak Azure Databricks kaynakları oluşturmanızı, dağıtmanızı ve yönetmenizi sağlayan üçüncü taraf bir kod olarak altyapı (IaC) platformudur. Bu makalede Python'ın nasıl kullanılacağı gösterse de CDKTF, TypeScript, Java, C# ve Go gibi ek dilleri destekler.

Terraform CDK Databricks sağlayıcısı Databricks Terraform sağlayıcısını temel alır. Daha fazla bilgi için bkz . Terraform Cloud. CDKTF, AWS Cloud Development Kit'i (AWS CDK) temel alır.

Gereksinimler

Bu makale kaynakları mevcut bir çalışma alanına dağıttığı için bir Azure Databricks çalışma alanınız olmalıdır.

Yerel geliştirme makinenizde aşağıdakilerin yüklü olması gerekir:

  • Terraform, sürüm 1.1 veya üzeri. Terraform'un yüklü olup olmadığını denetlemek ve yüklü sürümü denetlemek için terminalden veya PowerShell ile komutunu terraform -v çalıştırın. Terraform'u henüz yüklemediyseniz yükleyin.

    terraform -v
    
  • Node.js, sürüm 16.13 veya üzeri ve npm. Node.js ve npm yüklü olup olmadığınızı denetlemek ve yüklü sürümleri denetlemek için ve node -vkomutlarını npm -v çalıştırın. Node.js'nin en son sürümleri zaten içerir npm. Node.js ve zaten yüklü değilse Node Version Manager (nvm) kullanarak Node.js ve npm npm'yi yükleyin.

    node -v
    npm -v
    
  • CDKTF CLI. CDKTF CLI yüklü olup olmadığını denetlemek ve yüklü sürümü denetlemek için komutunu cdktf --versionçalıştırın. CdKTF CLI'yi npm kullanarak yükleyin( henüz yüklü değilse).

    cdktf --version
    

    İpucu

    CdKTF CLI'yi Homebrew ile macOS'a da yükleyebilirsiniz. Bkz . CDKTF'yi yükleme.

  • Python sürüm 3.7 veya üzeri ve pipenv sürüm 2021.5.29 veya üzeri. Python ve pipenv yüklü olup olmadığınızı denetlemek ve yüklü sürümleri denetlemek için ve python --versionkomutlarını pipenv --version çalıştırın. Python'ı yükleyin ve henüz yüklü değilse pipenv yükleyin.

    python --version
    pipenv --version
    
  • Kullanmak istediğiniz desteklenen kimlik doğrulama türü için yapılandırılmış Azure Databricks kimlik doğrulaması. Databricks Terraform sağlayıcısı belgelerinde kimlik doğrulaması bölümüne bakın.

1. Adım: CDKTF projesi oluşturma

Bu adımda, yerel geliştirme makinenizde bir CDKTF projesi için gerekli dizin yapısını ayarlarsınız. Ardından CDKTF projenizi bu dizin yapısı içinde oluşturursunuz.

  1. CDKTF projeniz için boş bir dizin oluşturun ve bu dizine geçin. Terminalinizde veya PowerShell ile aşağıdaki komutları çalıştırın:

    Unix, Linux ve macOS

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. Aşağıdaki komutu çalıştırarak bir CDKTF projesi oluşturun:

    cdktf init --template=python --local
    
  3. Proje Adı istendiğinde, Enter tuşuna basarak varsayılan proje adını cdktf-demo kabul edin.

  4. Proje Açıklaması istendiğinde, Enter tuşuna basarak varsayılan proje açıklamasını kabul edin.

  5. Mevcut bir Terraform projesinden başlamak istiyor musunuz sorulursa, girin ve Enter tuşunaN.

  6. CDKTF ekibine kilitlenme raporları göndermek istiyor musunuz sorulursa, girin ve Enter tuşuna n.

CDKTF dizininizde cdktf-demo aşağıdaki dosyaları ve alt dizinleri oluşturur:

  • .gitignore, bu projeyi uzak bir Git deposuna göndermek istiyorsanız Git'in yoksaydığı dosya ve dizinlerin listesidir.
  • cdktf.json, CDKTF projenizin yapılandırma ayarlarını içerir. Yapılandırma ayarları hakkında daha fazla bilgi için bkz . Yapılandırma Dosyası .
  • help, CDKTF projenizle çalışmak için atabileceğiniz bazı sonraki adımlar hakkında bilgi içerir.
  • main-test.py, CDKTF projeniz için yazabileceğiniz destekleyici birim testlerini içerir. Birim testi hakkında daha fazla bilgi için bkz . Birim Testleri .
  • main.py, CDKTF projeniz için yazdığınız Python kodunu içerir.
  • Pipfile ve Pipfile.lockcdktf projeniz için kod bağımlılıklarını yönetir.

2. Adım: Kaynakları tanımlama

Bu adımda Terraform CDK Databricks sağlayıcısını kullanarak bir not defteri ve bu not defterini çalıştıracak bir iş tanımlarsınız.

  1. Proje bağımlılıklarını yükleyin: kullanarak pipenvAzure Databricks kaynakları oluşturmak için Terraform CDK Databricks Sağlayıcısı'nıCDKTF projenize yükleyin. Bunu yapmak için aşağıdakileri çalıştırın:

    pipenv install cdktf-cdktf-provider-databricks
    
  2. Dosyanın içeriğini main.py aşağıdaki kodla değiştirin. Bu kod, Azure Databricks çalışma alanınızla CDKTF'nin kimliğini doğrular, ardından not defterini çalıştırmak için bir iş ile birlikte bir not defteri oluşturur. Bu kodun söz dizimi belgelerini görüntülemek için Bkz. Python için Terraform CDK Databricks sağlayıcı yapısı başvurusu.

    #!/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. ile aynı dizinde vars.pyadlı main.py bir dosya oluşturun. Çalışan sayısı, Spark çalışma zamanı sürüm dizesi ve düğüm türü gibi bir kaynak ön eki ve küme ayarları belirtmek için aşağıdaki değerleri kendi değerlerinizle değiştirin.

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

3. Adım: Kaynakları dağıtma

Bu adımda, mevcut Azure Databricks çalışma alanınıza, tanımlı not defterine ve bu not defterini çalıştırma işini dağıtmak için CDKTF CLI'sini kullanırsınız.

  1. CDKTF projeniz için terraform kodunun eşdeğerini oluşturun. Bunu yapmak için cdktf synth komutunu çalıştırın.

    cdktf synth
    
  2. Değişiklik yapmadan önce bekleyen kaynak değişikliklerini gözden geçirebilirsiniz. Aşağıdakileri çalıştırın:

    cdktf diff
    
  3. komutunu çalıştırarak not defterini ve işi dağıtın cdktf deploy .

    cdktf deploy
    
  4. Onaylamanız istendiğinde Enter tuşuna basın. Terraform, not defterini ve işi oluşturur ve çalışma alanınıza dağıtır.

4. Adım: Kaynaklarla etkileşim kurma

Bu adımda, işi belirtilen not defterini çalıştıran Azure Databricks çalışma alanınızda çalıştırırsınız.

  1. İşin çalışma alanınızda çalıştırılacağı not defterini görüntülemek için, komutun bağlantısını kopyalayın ve web tarayıcınızın adres çubuğuna yapıştırın.
  2. Çalışma alanınızda not defterini çalıştıran işi görüntülemek için, komutun bağlantısını kopyalayın ve web tarayıcınızın adres çubuğuna yapıştırın.
  3. İşi çalıştırmak için iş sayfasındaki Şimdi çalıştır düğmesine tıklayın.

(İsteğe bağlı) 5. Adım: Kaynakta değişiklik yapma

Bu isteğe bağlı adımda not defterinin kodunu değiştirir, değiştirilen not defterini yeniden dağıtıp değiştirilen not defterini yeniden çalıştırmak için işi kullanırsınız.

Not defterinde değişiklik yapmak istemiyorsanız, 6. Adım: Temizleme'ye atlayın.

  1. main.py dosyasında, değişken bildirimini notebook aşağıdakilerden değiştirin:

    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")
    )
    

    Şu şekilde:

    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")
    )
    

    Not

    Üç tırnak işaretiyle (''') arasındaki kod satırlarının gösterildiği gibi kod düzenleyicinizin kenarıyla hizalandığından emin olun. Aksi takdirde Terraform not defterine yeni Python kodunun çalışmamasına neden olabilecek ek boşluk ekler.

  2. CDKTF projeniz için Terraform kodu eşdeğerini yeniden üretin. Bunu yapmak için aşağıdakileri çalıştırın:

    cdktf synth
    
  3. Değişiklik yapmadan önce bekleyen kaynak değişikliklerini gözden geçirebilirsiniz. Aşağıdakileri çalıştırın:

    cdktf diff
    
  4. komutunu çalıştırarak not defteri değişikliklerini dağıtın cdktf deploy .

    cdktf deploy
    
  5. Onaylamanız istendiğinde Enter tuşuna basın. Terraform not defterinin içeriğini değiştirir.

  6. İşin çalışma alanınızda çalıştırılacağı değiştirilmiş not defterini görüntülemek için, daha önce açtığınız not defterini yenileyin veya komutun çıkışında görüntülenen Not Defteri URL'si bağlantısını kopyalayıp web tarayıcınızın cdk deploy adres çubuğuna yapıştırın.

  7. Çalışma alanınızda değiştirilen not defterini çalıştıran işi görüntülemek için, daha önce açtığınız işi yenileyin veya komutun bağlantısını kopyalayıp web tarayıcınızın adres çubuğuna yapıştırın.

  8. İşi çalıştırmak için iş sayfasındaki Şimdi çalıştır düğmesine tıklayın.

6. Adım: Temizleme

Bu adımda, AZURE Databricks çalışma alanınızdan not defterini ve işi kaldırmak için CDKTF CLI'yi kullanırsınız.

  1. komutunu çalıştırarak cdktf destroy kaynakları çalışma alanınızdan kaldırın:

    cdktf destroy
    
  2. Onaylamanız istendiğinde Enter tuşuna basın. Terraform kaynakları çalışma alanınızdan kaldırır.

Test Etme

CDKTF projenizi dağıtmadan önce test edebilirsiniz. CDKTF belgelerinde Birim Testleri'ne bakın.

Python tabanlı CDKTF projeleri için, paketin sınıfıyla cdktf birlikte Python test çerçevesi Testing kullanarak testler yazabilir ve çalıştırabilirsiniz. adlı test_main.py aşağıdaki örnek dosya, bu makalenin önceki dosyasındaki CDKTF kodunu test ediyor main.py . İlk test, projenin not defterinin not defterinin beklenen Base64 kodlu gösterimini içerip içermediğini denetler. İkinci test, projenin işinin beklenen iş adını içerip içermediğini denetler. Bu testleri çalıştırmak için projenin kök dizininden komutunu çalıştırın pytest .

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"
      }
    )

Diğer kaynaklar