Delen via


Terraform CDK Databricks-provider

Notitie

In dit artikel wordt de Cloud Development Kit voor Terraform (CDKTF) beschreven die is ontwikkeld door een derde partij. Als u contact wilt opnemen met de provider, raadpleegt u de Terraform-community.

In dit artikel leest u hoe u Python samen met de Terraform CDK Databricks Provider en de Cloud Development Kit voor Terraform (CDKTF) gebruikt. Het CDKTF is een platform van derden, infrastructuur als code (IaC) waarmee u Azure Databricks-resources kunt maken, implementeren en beheren met behulp van vertrouwde programmeertalen, hulpprogramma's en technische procedures. Hoewel in dit artikel wordt beschreven hoe u Python gebruikt, ondersteunt het CDKTF aanvullende talen, zoals TypeScript, Java, C# en Go.

De Terraform CDK Databricks-provider is gebaseerd op de Databricks Terraform-provider. Zie Terraform Cloud voor meer informatie. De CDKTF is gebaseerd op de AWS Cloud Development Kit (AWS CDK).

Vereisten

U moet een Azure Databricks-werkruimte hebben, omdat in dit artikel resources worden geïmplementeerd in een bestaande werkruimte.

Op uw lokale ontwikkelcomputer moet het volgende zijn geïnstalleerd:

  • Terraform, versie 1.1 of hoger. Als u wilt controleren of Terraform is geïnstalleerd en om de geïnstalleerde versie te controleren, voert u de opdracht terraform -v uit vanuit uw terminal of met PowerShell. Installeer Terraform als u deze nog niet hebt geïnstalleerd.

    terraform -v
    
  • Node.js, versie 16.13 of hoger en npm. Als u wilt controleren of u Node.js en npm geïnstalleerd en om de geïnstalleerde versies te controleren, voert u de opdrachten node -v uit en npm -v. De nieuwste versies van Node.js al bevatten npm. Installeer Node.js en npm met behulp van Node Version Manager (nvm) als u nog geen Node.js hebt en npm al hebt geïnstalleerd.

    node -v
    npm -v
    
  • De CDKTF CLI. Voer de opdracht cdktf --versionuit om te controleren of de CDKTF CLI is geïnstalleerd en om de geïnstalleerde versie te controleren. Installeer de CDKTF CLI met npm als u deze nog niet hebt geïnstalleerd.

    cdktf --version
    

    Tip

    U kunt de CDKTF CLI ook installeren in macOS met Homebrew. Zie CDKTF installeren.

  • Python-versie 3.7 of hoger en pipenv versie 2021.5.29 of hoger. Voer de opdrachten pipenv uit en om te controleren of u Python hebt geïnstalleerd en python --version om de geïnstalleerde versies te controleren.pipenv --version Installeer Python en installeer pipenv, als ze nog niet zijn geïnstalleerd.

    python --version
    pipenv --version
    
  • Azure Databricks-verificatie die is geconfigureerd voor het ondersteunde verificatietype dat u wilt gebruiken. Zie verificatie in de documentatie van de Databricks Terraform-provider.

Stap 1: Een CDKTF-project maken

In deze stap stelt u op uw lokale ontwikkelcomputer de benodigde mapstructuur in voor een CDKTF-project. Vervolgens maakt u uw CDKTF-project binnen deze mapstructuur.

  1. Maak een lege map voor uw CDKTF-project en schakel naar het project. Voer de volgende opdrachten uit in uw terminal of met PowerShell:

    Unix, Linux en macOS

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. Maak een CDKTF-project door de volgende opdracht uit te voeren:

    cdktf init --template=python --local
    
  3. Wanneer u om een projectnaam wordt gevraagd, accepteert u de standaardprojectnaam cdktf-demo door op Enter te drukken.

  4. Wanneer u wordt gevraagd om een projectbeschrijving, accepteert u de standaardprojectbeschrijving door op Enter te drukken.

  5. Als u wordt gevraagd of u wilt beginnen met een bestaand Terraform-project, voert u Enter N in en drukt u op Enter.

  6. Als u hierom wordt gevraagd , wilt u crashrapporten verzenden naar het CDKTF-team, voert u enter n in en drukt u op Enter.

De CDKTF maakt de volgende bestanden en submappen in uw cdktf-demo map:

  • .gitignore, een lijst met bestanden en mappen die Door Git worden genegeerd als u dit project naar een externe Git-opslagplaats wilt pushen.
  • cdktf.json, dat configuratie-instellingen voor uw CDKTF-project bevat. Zie Configuratiebestand voor meer informatie over configuratie-instellingen.
  • help, die informatie bevat over een aantal volgende stappen die u kunt uitvoeren om met uw CDKTF-project te werken.
  • main-test.py, dat ondersteunende eenheidstests bevat die u kunt schrijven voor uw CDKTF-project. Zie Eenheidstests voor meer informatie over eenheidstests.
  • main.py, die de Python-code bevat die u schrijft voor uw CDKTF-project.
  • Pipfile en Pipfile.lock, waarmee codeafhankelijkheden voor uw CDKTF-project worden beheerd.

Stap 2: Resources definiëren

In deze stap gebruikt u de Terraform CDK Databricks-provider om een notebook en een taak te definiëren om dat notebook uit te voeren.

  1. Installeer de projectafhankelijkheden: installeer in uw CDKTF-project pipenvde Terraform CDK Databricks Provider om Azure Databricks-resources te genereren. Voer hiervoor het volgende uit:

    pipenv install cdktf-cdktf-provider-databricks
    
  2. Vervang de inhoud van het main.py bestand door de volgende code. Deze code verifieert het CDKTF met uw Azure Databricks-werkruimte en genereert vervolgens een notebook samen met een taak om het notebook uit te voeren. Als u de syntaxisdocumentatie voor deze code wilt bekijken, raadpleegt u de referentie voor de Terraform CDK Databricks-provider voor 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. Maak een bestand met de naam vars.py in dezelfde map als main.py. Vervang de volgende waarden door uw eigen waarden om een resourcevoorvoegsel en clusterinstellingen op te geven, zoals het aantal werkrollen, runtimeversietekenreeks van Sparken knooppunttype.

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

Stap 3: De resources implementeren

In deze stap gebruikt u de CDKTF CLI om deze te implementeren in uw bestaande Azure Databricks-werkruimte, het gedefinieerde notebook en de taak om dat notebook uit te voeren.

  1. Genereer het Terraform-code-equivalent voor uw CDKTF-project. Voer de opdracht cdktf synth uit om dit te doen.

    cdktf synth
    
  2. Voordat u wijzigingen aanbrengt, kunt u de resourcewijzigingen controleren die in behandeling zijn. Voer het volgende uit:

    cdktf diff
    
  3. Implementeer het notebook en de taak door de opdracht uit te cdktf deploy voeren.

    cdktf deploy
    
  4. Druk op Enter wanneer u wordt gevraagd om goed te keuren. Terraform maakt en implementeert het notebook en de taak in uw werkruimte.

Stap 4: Interactie met de resources

In deze stap voert u de taak uit in uw Azure Databricks-werkruimte, waarmee het opgegeven notebook wordt uitgevoerd.

  1. Als u het notitieblok wilt weergeven dat de taak in uw werkruimte wordt uitgevoerd, kopieert u de koppeling naar de notebook-URL die wordt weergegeven in de uitvoer van de opdracht en plakt u deze cdk deploy in de adresbalk van uw webbrowser.
  2. Als u de taak wilt weergeven waarop het notitieblok in uw werkruimte wordt uitgevoerd, kopieert u de taak-URL-koppeling die wordt weergegeven in de uitvoer van de opdracht en plakt u deze cdk deploy in de adresbalk van uw webbrowser.
  3. Als u de taak wilt uitvoeren, klikt u op de knop Nu uitvoeren op de taakpagina.

(Optioneel) Stap 5: Wijzigingen aanbrengen in een resource

In deze optionele stap wijzigt u de code van het notitieblok, implementeert u het gewijzigde notitieblok opnieuw en gebruikt u vervolgens de taak om het gewijzigde notitieblok opnieuw uit te voeren.

Als u geen wijzigingen wilt aanbrengen in het notitieblok, gaat u verder met stap 6: Opschonen.

  1. Wijzig in het main.py bestand de notebook variabeledeclaratie van het volgende:

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

    In het volgende:

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

    Notitie

    Zorg ervoor dat de regels met code tussen drie aanhalingstekens (''') zijn uitgelijnd met de rand van de code-editor, zoals wordt weergegeven. Anders voegt Terraform extra witruimte in het notebook in, waardoor de nieuwe Python-code niet kan worden uitgevoerd.

  2. Genereer het Terraform-code-equivalent voor uw CDKTF-project opnieuw. Voer hiervoor het volgende uit:

    cdktf synth
    
  3. Voordat u wijzigingen aanbrengt, kunt u de resourcewijzigingen controleren die in behandeling zijn. Voer het volgende uit:

    cdktf diff
    
  4. Implementeer de wijzigingen in het notitieblok door de opdracht uit te cdktf deploy voeren.

    cdktf deploy
    
  5. Druk op Enter wanneer u wordt gevraagd om goed te keuren. Terraform wijzigt de inhoud van het notitieblok.

  6. Als u het gewijzigde notitieblok wilt weergeven dat door de taak wordt uitgevoerd in uw werkruimte, vernieuwt u het notitieblok dat u eerder hebt geopend of kopieert u de notebook-URL koppeling die wordt weergegeven in de uitvoer van de opdracht cdk deploy en plakt u het in de adresbalk van uw webbrowser.

  7. Als u de taak wilt weergeven waarop het gewijzigde notitieblok in uw werkruimte wordt uitgevoerd, vernieuwt u de taak die u eerder hebt geopend of kopieert u de taak-URL koppeling die wordt weergegeven in de uitvoer van de opdracht cdk deploy en plakt u deze in de adresbalk van uw webbrowser.

  8. Als u de taak wilt uitvoeren, klikt u op de knop Nu uitvoeren op de taakpagina.

Stap 6: Opschonen

In deze stap gebruikt u de CDKTF CLI om het notebook en de taak uit uw Azure Databricks-werkruimte te verwijderen.

  1. Verwijder de resources uit uw werkruimte door de opdracht cdktf destroy uit te voeren:

    cdktf destroy
    
  2. Druk op Enter wanneer u wordt gevraagd om goed te keuren. Terraform verwijdert de resources uit uw werkruimte.

Testen

U kunt uw CDKTF-project testen voordat u het implementeert. Zie Eenheidstests in de CDKTF-documentatie.

Voor CDKTF-projecten op basis van Python kunt u tests schrijven en uitvoeren met behulp van het Python-testframework pytest samen met de klasse van cdktf het Testing pakket. In het volgende voorbeeldbestand met de naam test_main.py wordt de CDKTF-code in het voorgaande bestand van dit artikel getest main.py . De eerste test controleert of het notebook van het project de verwachte Base64-gecodeerde weergave van de inhoud van het notebook bevat. Met de tweede test wordt gecontroleerd of de taak van het project de verwachte taaknaam bevat. Als u deze tests wilt uitvoeren, voert u de pytest opdracht uit vanuit de hoofdmap van het project.

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

Meer resources