Terraform CDK Databricks Provider
Nota
Questo articolo illustra il Kit di sviluppo cloud per Terraform (CDKTF), che non è fornito né supportato da Databricks. Per contattare il provider, vedere Terraform Community.
Questo articolo illustra come usare Python insieme a Terraform CDK Databricks Provider e Cloud Development Kit per Terraform (CDKTF). CDKTF è una piattaforma IaC (Infrastructure as Code) di terze parti che consente di creare, distribuire e gestire risorse di Azure Databricks usando linguaggi di programmazione, strumenti e procedure di progettazione familiari. Anche se questo articolo illustra come usare Python, CDKTF supporta linguaggi aggiuntivi, ad esempio TypeScript, Java, C# e Go.
Il provider Terraform CDK Databricks si basa sul provider Databricks Terraform. Per altre informazioni, vedere Terraform Cloud. CDKTF si basa su AWS Cloud Development Kit (AWS CDK).
Requisiti
È necessario avere un'area di lavoro di Azure Databricks, perché questo articolo distribuisce le risorse in un'area di lavoro esistente.
Nel computer di sviluppo locale è necessario avere installato quanto segue:
Terraform, versione 1.1 o successiva. Per verificare se Terraform è installato e controllare la versione installata, eseguire il comando
terraform -v
dal terminale o con PowerShell. Installare Terraform, se non è già installato.terraform -v
Node.js, versione 16.13 o successiva e npm. Per verificare se sono stati Node.js e
npm
installati e per controllare le versioni installate, eseguire i comandinode -v
enpm -v
. Le versioni più recenti di Node.js includononpm
già . Installare Node.js e npm usando Node Version Manager (nvm), se non è già installato Node.js enpm
già installato.node -v npm -v
Interfaccia della riga di comando di CDKTF. Per verificare se è installata l'interfaccia della riga di comando di CDKTF e per controllare la versione installata, eseguire il comando
cdktf --version
. Installare l'interfaccia della riga di comando di CDKTF usando npm, se non è già installata.cdktf --version
Suggerimento
È anche possibile installare l'interfaccia della riga di comando di CDKTF in macOS con Homebrew. Vedere Installare CDKTF.
Python versione 3.7 o successiva e pipenv versione 2021.5.29 o successiva. Per verificare se Python è installato e
pipenv
controllare le versioni installate, eseguire ipython --version
comandi epipenv --version
. Installare Python e installare pipenv, se non sono già installati.python --version pipenv --version
Autenticazione di Azure Databricks configurata per il tipo di autenticazione supportato che si vuole usare. Consultare Autenticazione nella documentazione del provider Databricks Terraform.
Passaggio 1: Creare un progetto CDKTF
In questo passaggio, nel computer di sviluppo locale si configura la struttura di directory necessaria per un progetto CDKTF. Creare quindi il progetto CDKTF all'interno di questa struttura di directory.
Creare una directory vuota per il progetto CDKTF e quindi passare a essa. Eseguire i comandi seguenti nel terminale o con PowerShell:
Unix, Linux e macOS
mkdir cdktf-demo cd cdktf-demo
Finestre
md cdktf-demo cd cdktf-demo
Creare un progetto CDKTF eseguendo il comando seguente:
cdktf init --template=python --local
Quando viene richiesto un nome di progetto, accettare il nome predefinito del
cdktf-demo
progetto premendo INVIO.Quando viene richiesta una descrizione progetto, accettare la descrizione predefinita del progetto premendo INVIO.
Se viene richiesto Di iniziare da un progetto Terraform esistente, immettere
N
e premere INVIO.Se viene richiesto Inviare segnalazioni di arresto anomalo al team CDKTF, immettere
n
e premere INVIO.
CDKTF crea i file e le sottodirectory seguenti nella cdktf-demo
directory:
.gitignore
, che è un elenco di file e directory che Git ignora se si vuole eseguire il push di questo progetto in un repository Git remoto.cdktf.json
, che contiene le impostazioni di configurazione per il progetto CDKTF. Per altre informazioni sulle impostazioni di configurazione, vedere File di configurazione.help
, che contiene informazioni su alcuni passaggi successivi che è possibile eseguire per lavorare con il progetto CDKTF.main-test.py
, che contiene unit test di supporto che è possibile scrivere per il progetto CDKTF. Per altre informazioni sugli unit test, vedere Unit Test .main.py
, che contiene il codice Python scritto per il progetto CDKTF.Pipfile
ePipfile.lock
, che gestiscono le dipendenze del codice per il progetto CDKTF.
Passaggio 2: Definire le risorse
In questo passaggio si usa il provider Terraform CDK Databricks per definire un notebook e un processo per eseguire tale notebook.
Installare le dipendenze del progetto: usando
pipenv
, installare nel progetto CDKTF Terraform CDK Databricks Provider per generare le risorse di Azure Databricks. A tale scopo, eseguire le operazioni seguenti:pipenv install cdktf-cdktf-provider-databricks
Sostituire il contenuto del
main.py
file con il codice seguente. Questo codice autentica CDKTF con l'area di lavoro di Azure Databricks, quindi genera un notebook insieme a un processo per eseguire il notebook. Per visualizzare la documentazione sulla sintassi per questo codice, vedere le informazioni di riferimento sul costrutto del provider Databricks di Terraform CDK per 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()
Creare un file denominato
vars.py
nella stessa directory dimain.py
. Sostituire i valori seguenti con i propri valori per specificare un prefisso di risorsa e le impostazioni del cluster, ad esempio il numero di ruoli di lavoro, la stringa della versione del runtime Spark e il tipo di nodo.#!/usr/bin/env python resource_prefix = "cdktf-demo" num_workers = 1 spark_version = "14.3.x-scala2.12" node_type_id = "Standard_D3_v2"
Passaggio 3: Distribuire le risorse
In questo passaggio si usa l'interfaccia della riga di comando di CDKTF per distribuire, nell'area di lavoro di Azure Databricks esistente, nel notebook definito e nel processo per eseguire il notebook.
Generare l'equivalente del codice Terraform per il progetto CDKTF. A tale scopo, eseguire il comando
cdktf synth
.cdktf synth
Prima di apportare modifiche, è possibile esaminare le modifiche delle risorse in sospeso. Esegui le operazioni seguenti:
cdktf diff
Distribuire il notebook e il processo eseguendo il
cdktf deploy
comando .cdktf deploy
Quando viene richiesto di approvare, premere INVIO. Terraform crea e distribuisce il notebook e il processo nell'area di lavoro.
Passaggio 4: Interagire con le risorse
In questo passaggio si esegue il processo nell'area di lavoro di Azure Databricks, che esegue il notebook specificato.
- Per visualizzare il notebook che il processo verrà eseguito nell'area di lavoro, copiare il collegamento URL del notebook visualizzato nell'output del
cdk deploy
comando e incollarlo nella barra degli indirizzi del Web browser. - Per visualizzare il processo che esegue il notebook nell'area di lavoro, copiare il collegamento URL processo visualizzato nell'output del
cdk deploy
comando e incollarlo nella barra degli indirizzi del Web browser. - Per eseguire il processo, fare clic sul pulsante Esegui ora nella pagina del processo.
(Facoltativo) Passaggio 5: Apportare modifiche a una risorsa
In questo passaggio facoltativo si modifica il codice del notebook, si ridistribuisce il notebook modificato e quindi si usa il processo per eseguire nuovamente il notebook modificato.
Se non si desidera apportare modifiche al notebook, passare al passaggio 6: Pulire.
main.py
Nel file modificare la dichiarazione dinotebook
variabile da quanto segue: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") )
Con la seguente:
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") )
Nota
Assicurarsi che le righe di codice tra virgolette triple (
'''
) siano allineate al bordo dell'editor di codice, come illustrato. In caso contrario, Terraform inserisce spazi vuoti aggiuntivi nel notebook che potrebbe causare l'esito negativo dell'esecuzione del nuovo codice Python.Rigenerare l'equivalente del codice Terraform per il progetto CDKTF. A tale scopo, eseguire le operazioni seguenti:
cdktf synth
Prima di apportare modifiche, è possibile esaminare le modifiche delle risorse in sospeso. Esegui le operazioni seguenti:
cdktf diff
Distribuire le modifiche del notebook eseguendo il
cdktf deploy
comando .cdktf deploy
Quando viene richiesto di approvare, premere INVIO. Terraform modifica il contenuto del notebook.
Per visualizzare il notebook modificato che verrà eseguito nell'area di lavoro, aggiornare il notebook aperto in precedenza o copiare il collegamento URL notebook visualizzato nell'output del
cdk deploy
comando e incollarlo nella barra degli indirizzi del Web browser.Per visualizzare il processo che esegue il notebook modificato nell'area di lavoro, aggiornare il processo aperto in precedenza o copiare il collegamento URL processo visualizzato nell'output del
cdk deploy
comando e incollarlo nella barra degli indirizzi del Web browser.Per eseguire il processo, fare clic sul pulsante Esegui ora nella pagina del processo.
Passaggio 6: Pulire
In questo passaggio si usa l'interfaccia della riga di comando di CDKTF per rimuovere il notebook e il processo dall'area di lavoro di Azure Databricks.
Rimuovere le risorse dall'area di lavoro eseguendo il
cdktf destroy
comando :cdktf destroy
Quando viene richiesto di approvare, premere INVIO. Terraform rimuove le risorse dall'area di lavoro.
Test
È possibile testare il progetto CDKTF prima di distribuirlo. Vedere Unit Test nella documentazione di CDKTF.
Per i progetti CDKTF basati su Python, è possibile scrivere ed eseguire test usando il framework di test Python pytest insieme alla cdktf
classe del Testing
pacchetto. Il file di esempio seguente denominato test_main.py
testa il codice CDKTF nel file precedente main.py
di questo articolo. Il primo test verifica se il notebook del progetto conterrà la rappresentazione prevista con codifica Base64 del contenuto del notebook. Il secondo test verifica se il processo del progetto conterrà il nome del processo previsto. Per eseguire questi test, eseguire il pytest
comando dalla directory radice del progetto.
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"
}
)
Altre risorse
- Informazioni di riferimento sul costrutto del provider Databricks per Terraform CDK per TypeScript, Python, Java, C# e Go
- Abilitare la registrazione per le applicazioni CDKTF