Megosztás a következőn keresztül:


Terraform CDK Databricks-szolgáltató

Feljegyzés

Ez a cikk a Terraformhoz készült Cloud Development Kitet (CDKTF) ismerteti, amelyet egy harmadik fél fejlesztett ki. Ha kapcsolatba szeretne lépni a szolgáltatóval, tekintse meg a Terraform-közösséget.

Ez a cikk bemutatja, hogyan használhatja a Pythont a Terraform CDK Databricks Provider és a Cloud Development Kit for Terraform (CDKTF) segítségével. A CDKTF egy harmadik féltől származó, kódként szolgáló infrastruktúra (IaC), amely lehetővé teszi az Azure Databricks-erőforrások létrehozását, üzembe helyezését és kezelését ismert programozási nyelvek, eszközök és mérnöki eljárások használatával. Bár ez a cikk bemutatja a Python használatát, a CDKTF további nyelveket támogat, például a TypeScriptet, a Java-t, a C#-ot és a Go-t.

A Terraform CDK Databricks-szolgáltató a Databricks Terraform szolgáltatón alapul. További információ: Terraform Cloud. A CDKTF az AWS Cloud Development Kiten (AWS CDK) alapul.

Követelmények

Azure Databricks-munkaterületet kell használnia, mivel ez a cikk erőforrásokat helyez üzembe egy meglévő munkaterületen.

A helyi fejlesztőgépen a következőket kell telepítenie:

  • Terraform, 1.1-es vagy újabb verzió. Annak ellenőrzéséhez, hogy telepítve van-e a Terraform, és ellenőrizni szeretné a telepített verziót, futtassa a parancsot terraform -v a terminálról vagy a PowerShell-lel. Telepítse a Terraformot, ha még nincs telepítve.

    terraform -v
    
  • Node.js, 16.13-es vagy újabb verzió és npm. Annak ellenőrzéséhez, hogy rendelkezik-e Node.js és npm telepítve van-e, és ellenőrizze a telepített verziókat, futtassa a parancsokat node -v és npm -va . A Node.js legújabb verziói már tartalmazzák a következőt npm: . Telepítse Node.js és npm-et a Node Version Manager (nvm) használatával, ha nincs Node.js, és npm már telepítve van.

    node -v
    npm -v
    
  • A CDKTF parancssori felület. Annak ellenőrzéséhez, hogy telepítve van-e a CDKTF PARANCSSOR, és a telepített verzió ellenőrzéséhez futtassa a parancsot cdktf --version. Telepítse a CDKTF PARANCSSORI-t az npm használatával, ha még nincs telepítve.

    cdktf --version
    

    Tipp.

    A CDKTF CLI macOS rendszerre is telepíthető a Homebrew használatával. Lásd: CDKTF telepítése.

  • A Python 3.7-es vagy újabb verziója és a Pipenv 2021.5.29-es vagy újabb verziója. A Python és pipenv a telepített verziók ellenőrzéséhez futtassa a parancsokat python --version és pipenv --versiona . Telepítse a Pythont , és telepítse a pipenv-t, ha még nincs telepítve.

    python --version
    pipenv --version
    
  • A használni kívánt támogatott hitelesítési típushoz konfigurált Azure Databricks-hitelesítés. Lásd a Hitelesítést a Databricks Terraform szolgáltató dokumentációjában.

1. lépés: CDKTF-projekt létrehozása

Ebben a lépésben a helyi fejlesztőgépen beállítja a CDKTF-projekthez szükséges címtárstruktúrát. Ezután létrehozza a CDKTF-projektet ebben a címtárstruktúrában.

  1. Hozzon létre egy üres könyvtárat a CDKTF-projekthez, majd váltson rá. Futtassa a következő parancsokat a terminálon vagy a PowerShell-lel:

    Unix, Linux és macOS

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. Hozzon létre egy CDKTF-projektet a következő parancs futtatásával:

    cdktf init --template=python --local
    
  3. Amikor a rendszer a projektnév megadását kéri, fogadja el az alapértelmezett projektnevet az Enter billentyűtcdktf-demo.

  4. Amikor a rendszer a projekt leírását kéri, fogadja el az alapértelmezett projektleírást az Enter billentyűt lenyomva.

  5. Ha a rendszer arra kéri, hogy egy meglévő Terraform-projektből induljon, írja be N és nyomja le az Enter billentyűt.

  6. Ha a rendszer kéri, küldjön összeomlási jelentéseket a CDKTF-csapatnak, írja be n és nyomja le az Enter billentyűt.

A CDKTF a következő fájlokat és alkönyvtárakat hozza létre a cdktf-demo címtárban:

  • .gitignore, amely azon fájlok és könyvtárak listája, amelyeket a Git figyelmen kívül hagy, ha le szeretné küldeni ezt a projektet egy távoli Git-adattárba.
  • cdktf.json, amely a CDKTF-projekt konfigurációs beállításait tartalmazza. A konfigurációs beállításokról további információt a konfigurációs fájlban talál.
  • help, amely információkat tartalmaz a CDKTF-projekttel végzett munka néhány következő lépéséről.
  • main-test.py, amely a CDKTF-projekthez írható kiegészítő egységteszteket tartalmazza. Az egységtesztelésről további információt az Egységtesztek című témakörben talál.
  • main.py, amely tartalmazza a CDKTF-projekthez írt Python-kódot.
  • Pipfile és Pipfile.lock, amely kezeli a CDKTF-projekt kódfüggőségeit.

2. lépés: Erőforrások definiálása

Ebben a lépésben a Terraform CDK Databricks-szolgáltatóval definiál egy jegyzetfüzetet és egy feladatot a jegyzetfüzet futtatásához.

  1. Telepítse a projektfüggőségeket: az Azure Databricks-erőforrások létrehozásához használja pipenva Terraform CDK Databricks-szolgáltatót a CDKTF-projektbe. Ehhez futtassa a következőket:

    pipenv install cdktf-cdktf-provider-databricks
    
  2. Cserélje le a main.py fájl tartalmát a következő kódra. Ez a kód hitelesíti a CDKTF-et az Azure Databricks-munkaterülettel, majd létrehoz egy jegyzetfüzetet és egy feladatot a jegyzetfüzet futtatásához. A kód szintaxisdokumentációjának megtekintéséhez tekintse meg a Python Terraform CDK Databricks-szolgáltatói szerkezetének referenciáját.

    #!/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. Hozzon létre egy fájlt vars.py ugyanabban a könyvtárban, mint a main.py. Cserélje le a következő értékeket a saját értékeire az erőforrás-előtag és a fürtbeállítások megadásához, például a feldolgozók számának, a Spark futtatókörnyezet verziójának sztringjének és a csomópont típusának megadásához.

    #!/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. lépés: Az erőforrások üzembe helyezése

Ebben a lépésben a CDKTF parancssori felületével telepítheti a meglévő Azure Databricks-munkaterületen a definiált jegyzetfüzetet és a jegyzetfüzet futtatásához szükséges feladatot.

  1. Hozza létre a CDKTF-projekthez megfelelő Terraform-kódot. Ehhez futtassa a cdktf synth parancsot.

    cdktf synth
    
  2. A módosítások végrehajtása előtt áttekintheti a függőben lévő erőforrás-módosításokat. Futtassa a következőt:

    cdktf diff
    
  3. Telepítse a jegyzetfüzetet és a feladatot a cdktf deploy parancs futtatásával.

    cdktf deploy
    
  4. Amikor a rendszer jóváhagyásra kéri, nyomja le az Enter billentyűt. A Terraform létrehozza és üzembe helyezi a jegyzetfüzetet és a feladatot a munkaterületen.

4. lépés: Az erőforrások interakciója

Ebben a lépésben a feladatot az Azure Databricks-munkaterületen futtatja, amely a megadott jegyzetfüzetet futtatja.

  1. A feladat által a munkaterületen futtatandó jegyzetfüzet megtekintéséhez másolja ki a , és illessze be a webböngésző címsorába.
  2. A jegyzetfüzetet a munkaterületen futtató feladat megtekintéséhez másolja ki a , és illessze be a webböngésző címsorába.
  3. A feladat futtatásához kattintson a Feladat lapon a Futtatás most gombra.

(Nem kötelező) 5. lépés: Erőforrás módosítása

Ebben az opcionális lépésben módosíthatja a jegyzetfüzet kódját, újra üzembe helyezheti a módosított jegyzetfüzetet, majd a feladat használatával újrafuttathatja a módosított jegyzetfüzetet.

Ha nem szeretne módosításokat végezni a jegyzetfüzeten, ugorjon a 6. lépésre : Törlés.

  1. A fájlban main.py módosítsa a notebook változódeklarációt a következőről:

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

    A következőre:

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

    Feljegyzés

    Győződjön meg arról, hogy a három idézőjel (''') közötti kódsorok igazodnak a kódszerkesztő széléhez, ahogyan az látható. Ellenkező esetben a Terraform további szóközt szúr be a jegyzetfüzetbe, ami miatt az új Python-kód futtatása meghiúsulhat.

  2. Hozza létre újra a CDKTF-projekt Terraform-kódjának megfelelő kódját. Ehhez futtassa a következőket:

    cdktf synth
    
  3. A módosítások végrehajtása előtt áttekintheti a függőben lévő erőforrás-módosításokat. Futtassa a következőt:

    cdktf diff
    
  4. A jegyzetfüzet módosításainak üzembe helyezése a cdktf deploy parancs futtatásával.

    cdktf deploy
    
  5. Amikor a rendszer jóváhagyásra kéri, nyomja le az Enter billentyűt. A Terraform megváltoztatja a jegyzetfüzet tartalmát.

  6. A feladat által a munkaterületen futtatott módosított jegyzetfüzet megtekintéséhez frissítse a korábban megnyitott jegyzetfüzetet, vagy másolja a , és illessze be a webböngésző címsorába.

  7. A munkaterületen a módosított jegyzetfüzetet futtató feladat megtekintéséhez frissítse a korábban megnyitott feladatot, vagy másolja a , és illessze be a webböngésző címsorába.

  8. A feladat futtatásához kattintson a Feladat lapon a Futtatás most gombra.

6. lépés: Törlés

Ebben a lépésben a CDKTF parancssori felületével távolíthatja el a jegyzetfüzetet és a feladatot az Azure Databricks-munkaterületről.

  1. Távolítsa el az erőforrásokat a munkaterületről a cdktf destroy parancs futtatásával:

    cdktf destroy
    
  2. Amikor a rendszer jóváhagyásra kéri, nyomja le az Enter billentyűt. A Terraform eltávolítja az erőforrásokat a munkaterületről.

Tesztelés

A CDKTF-projektet az üzembe helyezés előtt tesztelheti. Lásd: Egységtesztek a CDKTF dokumentációjában.

Python-alapú CDKTF-projektek esetén a Python-teszt keretrendszer pytest és a cdktf csomag Testing osztálya használatával írhat és futtathat teszteket. Az alábbi példafájl neve test_main.py teszteli a CDKTF-kódot a cikk előző main.py fájljában. Az első teszt ellenőrzi, hogy a projekt jegyzetfüzete tartalmazza-e a jegyzetfüzet tartalmának várt Base64 kódolású megjelenítését. A második teszt ellenőrzi, hogy a projekt feladata tartalmazza-e a várt feladatnevet. A tesztek futtatásához futtassa a pytest parancsot a projekt gyökérkönyvtárából.

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

További erőforrások