Sdílet prostřednictvím


Zprostředkovatel Terraform CDK Databricks

Poznámka:

Tento článek se zabývá sadou Cloud Development Kit pro Terraform (CDKTF), kterou vyvíjí třetí strana. Pokud chcete kontaktovat poskytovatele, podívejte se na komunitu Terraformu.

V tomto článku se dozvíte, jak používat Python společně s poskytovatelem Terraform CDK Databricks a sadou Cloud Development Kit pro Terraform (CDKTF). CDKTF je platforma třetí strany , infrastruktura jako kód (IaC), která umožňuje vytvářet, nasazovat a spravovat prostředky Azure Databricks pomocí známých programovacích jazyků, nástrojů a technických postupů. I když tento článek ukazuje, jak používat Python, CDKTF podporuje další jazyky, jako je TypeScript, Java, C# a Go.

Zprostředkovatel Terraform CDK Databricks je založený na zprostředkovateli Databricks Terraform. Další informace najdete v tématu Terraform Cloud. CDKTF je založená na sadě AWS Cloud Development Kit (AWS CDK).

Požadavky

Musíte mít pracovní prostor Azure Databricks, protože tento článek nasazuje prostředky do existujícího pracovního prostoru.

Na místním počítači pro vývoj musíte mít nainstalovanou následující:

  • Terraform verze 1.1 nebo vyšší Pokud chcete zkontrolovat, jestli máte nainstalovaný Terraform a chcete zkontrolovat nainstalovanou verzi, spusťte příkaz terraform -v z terminálu nebo pomocí PowerShellu. Nainstalujte Terraform, pokud ho ještě nemáte nainstalovaný.

    terraform -v
    
  • Node.js verze 16.13 nebo vyšší a npm. Pokud chcete zkontrolovat, jestli máte Node.js a npm nainstalovali, a zkontrolujte nainstalované verze, spusťte příkazy node -v a npm -v. Nejnovější verze Node.js již obsahují npm. Nainstalujte Node.js a npm pomocí nástroje Node Version Manager (nvm), pokud ještě nemáte Node.js a npm ještě jste je nainstalovali.

    node -v
    npm -v
    
  • Rozhraní příkazového řádku CDKTF. Pokud chcete zkontrolovat, jestli máte nainstalované rozhraní příkazového řádku CDKTF a chcete zkontrolovat nainstalovanou verzi, spusťte příkaz cdktf --version. Pokud ho ještě nemáte nainstalovaný, nainstalujte rozhraní příkazového řádku CDKTF pomocí npm.

    cdktf --version
    

    Tip

    Pomocí Homebrew můžete také nainstalovat rozhraní příkazového řádku CDKTF v systému macOS. Viz Instalace CDKTF.

  • Python verze 3.7 nebo vyšší a pipenv verze 2021.5.29 nebo vyšší. Pokud chcete zkontrolovat, jestli máte Python a pipenv nainstalovaný a chcete zkontrolovat nainstalované verze, spusťte příkazy python --version a pipenv --version. Nainstalujte Python a nainstalujte pipenv, pokud ještě nejsou nainstalované.

    python --version
    pipenv --version
    
  • Ověřování Azure Databricks nakonfigurované pro podporovaný typ ověřování, který chcete použít. Viz Ověřování v dokumentaci zprostředkovatele Databricks Terraform.

Krok 1: Vytvoření projektu CDKTF

V tomto kroku na místním vývojovém počítači nastavíte potřebnou adresářovou strukturu pro projekt CDKTF. Pak vytvoříte projekt CDKTF v rámci této adresářové struktury.

  1. Vytvořte prázdný adresář pro projekt CDKTF a přepněte na něj. V terminálu nebo v PowerShellu spusťte následující příkazy:

    Unix, Linux a macOS

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. Spuštěním následujícího příkazu vytvořte projekt CDKTF:

    cdktf init --template=python --local
    
  3. Po zobrazení výzvy k zadání názvu projektu přijměte výchozí název cdktf-demo projektu stisknutím klávesy Enter.

  4. Po zobrazení výzvy k zadání popisu projektu přijměte výchozí popis projektu stisknutím klávesy Enter.

  5. Pokud se zobrazí výzva , že chcete začít z existujícího projektu Terraformu, zadejte N a stiskněte Enter.

  6. Pokud se zobrazí výzva k odeslání zpráv o chybách týmu CDKTF, zadejte n a stiskněte Enter.

CDKTF vytvoří v adresáři následující soubory a podadresáře cdktf-demo :

  • .gitignore, což je seznam souborů a adresářů, které Git ignoruje, pokud chcete tento projekt odeslat do vzdáleného úložiště Git.
  • cdktf.json, který obsahuje nastavení konfigurace pro váš projekt CDKTF. Další informace o nastavení konfigurace najdete v konfiguračním souboru .
  • help, který obsahuje informace o některých dalších krocích, které můžete provést při práci s projektem CDKTF.
  • main-test.py, který obsahuje podpůrné testy jednotek, které můžete psát pro projekt CDKTF. Další informace o testování jednotek najdete v tématu Testy jednotek.
  • main.py, který obsahuje kód Pythonu, který napíšete pro projekt CDKTF.
  • Pipfile a Pipfile.lock, které spravují závislosti kódu pro váš projekt CDKTF.

Krok 2: Definování prostředků

V tomto kroku použijete zprostředkovatele Terraform CDK Databricks k definování poznámkového bloku a úlohy pro spuštění tohoto poznámkového bloku.

  1. Nainstalujte závislosti projektu: pomocí pipenvpříkazu , nainstalujte ho do projektu CDKTF, zprostředkovatele Terraform CDK Databricks pro generování prostředků Azure Databricks. Provedete to spuštěním následujícího příkazu:

    pipenv install cdktf-cdktf-provider-databricks
    
  2. main.py Obsah souboru nahraďte následujícím kódem. Tento kód ověří CDKTF v pracovním prostoru Azure Databricks a pak vygeneruje poznámkový blok spolu s úlohou pro spuštění poznámkového bloku. Pokud chcete zobrazit dokumentaci ke syntaxi pro tento kód, přečtěte si referenční informace o konstruktoru zprostředkovatele Terraform CDK Databricks pro 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. Vytvořte soubor s názvem vars.py ve stejném adresáři jako main.py. Nahraďte následující hodnoty vlastními hodnotami, které určují předponu prostředku a nastavení clusteru, například počet pracovních procesů, řetězec verze modulu runtime Sparku a typ uzlu.

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

Krok 3: Nasazení prostředků

V tomto kroku pomocí rozhraní příkazového řádku CDKTF nasadíte do existujícího pracovního prostoru Azure Databricks definovaný poznámkový blok a úlohu pro spuštění tohoto poznámkového bloku.

  1. Vygenerujte ekvivalent kódu Terraformu pro váš projekt CDKTF. K těmto účelům spusťte příkaz cdktf synth.

    cdktf synth
    
  2. Před provedením změn můžete zkontrolovat čekající změny prostředků. Spusťte následující:

    cdktf diff
    
  3. Spuštěním cdktf deploy příkazu nasaďte poznámkový blok a úlohu.

    cdktf deploy
    
  4. Po zobrazení výzvy ke schválení stiskněte Enter. Terraform vytvoří a nasadí poznámkový blok a úlohu do pracovního prostoru.

Krok 4: Interakce s prostředky

V tomto kroku spustíte úlohu v pracovním prostoru Azure Databricks, ve kterém se spustí zadaný poznámkový blok.

  1. Pokud chcete zobrazit poznámkový blok, který bude úloha běžet ve vašem pracovním prostoru, zkopírujte odkaz URL poznámkového bloku, který se zobrazí ve výstupu cdk deploy příkazu, a vložte ho do adresního řádku webového prohlížeče.
  2. Pokud chcete zobrazit úlohu, která spouští poznámkový blok v pracovním prostoru, zkopírujte odkaz adresa URL úlohy, který se zobrazí ve výstupu cdk deploy příkazu, a vložte ho do adresního řádku webového prohlížeče.
  3. Pokud chcete úlohu spustit, klikněte na tlačítko Spustit hned na stránce úlohy.

(Volitelné) Krok 5: Provedení změn prostředku

V tomto volitelném kroku změníte kód poznámkového bloku, znovu nasadíte změněný poznámkový blok a pak pomocí úlohy znovu spustíte změněný poznámkový blok.

Pokud nechcete v poznámkovém bloku provádět žádné změny, přeskočte k kroku 6: Vyčištění.

  1. main.py V souboru změňte notebook deklaraci proměnné z následujícího:

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

    Na následující:

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

    Poznámka:

    Ujistěte se, že řádky kódu mezi trojitými uvozovkami (''') jsou zarovnané s okrajem editoru kódu, jak je znázorněno. Jinak Terraform vloží do poznámkového bloku další prázdné znaky, které můžou způsobit selhání spuštění nového kódu Pythonu.

  2. Znovu vygenerujte ekvivalent kódu Terraformu pro váš projekt CDKTF. Provedete to spuštěním následujícího příkazu:

    cdktf synth
    
  3. Před provedením změn můžete zkontrolovat čekající změny prostředků. Spusťte následující:

    cdktf diff
    
  4. Spuštěním příkazu nasaďte změny poznámkového cdktf deploy bloku.

    cdktf deploy
    
  5. Po zobrazení výzvy ke schválení stiskněte Enter. Terraform změní obsah poznámkového bloku.

  6. Pokud chcete zobrazit změněný poznámkový blok, který bude úloha běžet ve vašem pracovním prostoru, aktualizujte poznámkový blok, který jste otevřeli dříve, nebo zkopírujte odkaz URL poznámkového bloku, který se zobrazí ve výstupu cdk deploy příkazu, a vložte ho do adresního řádku webového prohlížeče.

  7. Pokud chcete zobrazit úlohu, která spouští změněný poznámkový blok v pracovním prostoru, aktualizujte úlohu, kterou jste otevřeli dříve, nebo zkopírujte odkaz URL úlohy, který se zobrazí ve výstupu cdk deploy příkazu, a vložte ho do adresního řádku webového prohlížeče.

  8. Pokud chcete úlohu spustit, klikněte na tlačítko Spustit hned na stránce úlohy.

Krok 6: Vyčištění

V tomto kroku pomocí rozhraní příkazového řádku CDKTF odeberete poznámkový blok a úlohu z pracovního prostoru Azure Databricks.

  1. Odeberte prostředky z pracovního prostoru spuštěním cdktf destroy příkazu:

    cdktf destroy
    
  2. Po zobrazení výzvy ke schválení stiskněte Enter. Terraform odebere prostředky z pracovního prostoru.

Testování

Před nasazením můžete svůj projekt CDKTF otestovat. Viz Testy jednotek v dokumentaci CDKTF.

V projektech CDKTF založených na Pythonu můžete psát a spouštět testy pomocí pytestu testovací architektury Následující ukázkový soubor s názvem test_main.py testuje kód CDKTF v předchozím main.py souboru tohoto článku. První test zkontroluje, jestli poznámkový blok projektu bude obsahovat očekávanou reprezentaci obsahu poznámkového bloku s kódováním Base64. Druhý test zkontroluje, jestli úloha projektu bude obsahovat očekávaný název úlohy. Pokud chcete tyto testy spustit, spusťte pytest příkaz z kořenového adresáře projektu.

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

Další materiály