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 opdrachtennode -v
uit ennpm -v
. De nieuwste versies van Node.js al bevattennpm
. Installeer Node.js en npm met behulp van Node Version Manager (nvm) als u nog geen Node.js hebt ennpm
al hebt geïnstalleerd.node -v npm -v
De CDKTF CLI. Voer de opdracht
cdktf --version
uit 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 enpython --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.
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
Maak een CDKTF-project door de volgende opdracht uit te voeren:
cdktf init --template=python --local
Wanneer u om een projectnaam wordt gevraagd, accepteert u de standaardprojectnaam
cdktf-demo
door op Enter te drukken.Wanneer u wordt gevraagd om een projectbeschrijving, accepteert u de standaardprojectbeschrijving door op Enter te drukken.
Als u wordt gevraagd of u wilt beginnen met een bestaand Terraform-project, voert u Enter
N
in en drukt u op Enter.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
enPipfile.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.
Installeer de projectafhankelijkheden: installeer in uw CDKTF-project
pipenv
de Terraform CDK Databricks Provider om Azure Databricks-resources te genereren. Voer hiervoor het volgende uit:pipenv install cdktf-cdktf-provider-databricks
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()
Maak een bestand met de naam
vars.py
in dezelfde map alsmain.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.
Genereer het Terraform-code-equivalent voor uw CDKTF-project. Voer de opdracht
cdktf synth
uit om dit te doen.cdktf synth
Voordat u wijzigingen aanbrengt, kunt u de resourcewijzigingen controleren die in behandeling zijn. Voer het volgende uit:
cdktf diff
Implementeer het notebook en de taak door de opdracht uit te
cdktf deploy
voeren.cdktf deploy
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.
- 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. - 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. - 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.
Wijzig in het
main.py
bestand denotebook
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.Genereer het Terraform-code-equivalent voor uw CDKTF-project opnieuw. Voer hiervoor het volgende uit:
cdktf synth
Voordat u wijzigingen aanbrengt, kunt u de resourcewijzigingen controleren die in behandeling zijn. Voer het volgende uit:
cdktf diff
Implementeer de wijzigingen in het notitieblok door de opdracht uit te
cdktf deploy
voeren.cdktf deploy
Druk op Enter wanneer u wordt gevraagd om goed te keuren. Terraform wijzigt de inhoud van het notitieblok.
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.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.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.
Verwijder de resources uit uw werkruimte door de opdracht
cdktf destroy
uit te voeren:cdktf destroy
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
- Naslaginformatie over de Terraform CDK Databricks-provider voor TypeScript, Python, Java, C# en Go
- Logboekregistratie inschakelen voor CDKTF-toepassingen