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 parancsokatnode -v
ésnpm -v
a . A Node.js legújabb verziói már tartalmazzák a következőtnpm
: . Telepítse Node.js és npm-et a Node Version Manager (nvm) használatával, ha nincs Node.js, ésnpm
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 parancsokatpython --version
éspipenv --version
a . 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.
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
Hozzon létre egy CDKTF-projektet a következő parancs futtatásával:
cdktf init --template=python --local
Amikor a rendszer a projektnév megadását kéri, fogadja el az alapértelmezett projektnevet az Enter billentyűt
cdktf-demo
.Amikor a rendszer a projekt leírását kéri, fogadja el az alapértelmezett projektleírást az Enter billentyűt lenyomva.
Ha a rendszer arra kéri, hogy egy meglévő Terraform-projektből induljon, írja be
N
és nyomja le az Enter billentyűt.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
ésPipfile.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.
Telepítse a projektfüggőségeket: az Azure Databricks-erőforrások létrehozásához használja
pipenv
a Terraform CDK Databricks-szolgáltatót a CDKTF-projektbe. Ehhez futtassa a következőket:pipenv install cdktf-cdktf-provider-databricks
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()
Hozzon létre egy fájlt
vars.py
ugyanabban a könyvtárban, mint amain.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.
Hozza létre a CDKTF-projekthez megfelelő Terraform-kódot. Ehhez futtassa a
cdktf synth
parancsot.cdktf synth
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
Telepítse a jegyzetfüzetet és a feladatot a
cdktf deploy
parancs futtatásával.cdktf deploy
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.
- 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.
- 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.
- 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.
A fájlban
main.py
módosítsa anotebook
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.Hozza létre újra a CDKTF-projekt Terraform-kódjának megfelelő kódját. Ehhez futtassa a következőket:
cdktf synth
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
A jegyzetfüzet módosításainak üzembe helyezése a
cdktf deploy
parancs futtatásával.cdktf deploy
Amikor a rendszer jóváhagyásra kéri, nyomja le az Enter billentyűt. A Terraform megváltoztatja a jegyzetfüzet tartalmát.
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.
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.
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.
Távolítsa el az erőforrásokat a munkaterületről a
cdktf destroy
parancs futtatásával:cdktf destroy
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"
}
)