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říkazynode -v
anpm -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 anpm
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říkazypython --version
apipenv --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.
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
Spuštěním následujícího příkazu vytvořte projekt CDKTF:
cdktf init --template=python --local
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.Po zobrazení výzvy k zadání popisu projektu přijměte výchozí popis projektu stisknutím klávesy Enter.
Pokud se zobrazí výzva , že chcete začít z existujícího projektu Terraformu, zadejte
N
a stiskněte Enter.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
aPipfile.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.
Nainstalujte závislosti projektu: pomocí
pipenv
pří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
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()
Vytvořte soubor s názvem
vars.py
ve stejném adresáři jakomain.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.
Vygenerujte ekvivalent kódu Terraformu pro váš projekt CDKTF. K těmto účelům spusťte příkaz
cdktf synth
.cdktf synth
Před provedením změn můžete zkontrolovat čekající změny prostředků. Spusťte následující:
cdktf diff
Spuštěním
cdktf deploy
příkazu nasaďte poznámkový blok a úlohu.cdktf deploy
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.
- 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. - 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. - 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í.
main.py
V souboru změňtenotebook
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.Znovu vygenerujte ekvivalent kódu Terraformu pro váš projekt CDKTF. Provedete to spuštěním následujícího příkazu:
cdktf synth
Před provedením změn můžete zkontrolovat čekající změny prostředků. Spusťte následující:
cdktf diff
Spuštěním příkazu nasaďte změny poznámkového
cdktf deploy
bloku.cdktf deploy
Po zobrazení výzvy ke schválení stiskněte Enter. Terraform změní obsah poznámkového bloku.
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.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.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.
Odeberte prostředky z pracovního prostoru spuštěním
cdktf destroy
příkazu:cdktf destroy
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
- Referenční informace o konstruktoru zprostředkovatele Terraform CDK Databricks pro TypeScript, Python, Java, C# a Go
- Povolení protokolování pro aplikace CDKTF