Provedor Terraform CDK Databricks
Observação
Este artigo aborda o CDKTF (Kit de Desenvolvimento de Nuvem para o Terraform), que não é fornecido nem tem suporte do Databricks. Para entrar em contato com o provedor, confira a Comunidade do Terraform.
Este artigo mostra como usar o Python junto com o Provedor do Terraform CDK Databricks e o Kit de Desenvolvimento em Nuvem para Terraform (CDKTF). O CDKTF é uma plataforma de infraestrutura como código (IaC) de terceiros que permite criar, implantar e gerenciar recursos do Azure Databricks usando linguagens de programação familiares, ferramentas e práticas de engenharia. Embora este artigo mostre como usar o Python, o CDKTF dá suporte a idiomas adicionais, como TypeScript, Java, C# e Go.
O provedor Terraform CDK Databricks é baseado no provedor Databricks Terraform. Para obter mais informações, confira Terraform Cloud. O CDKTF baseia-se no AWS CDK (kit de desenvolvimento de nuvem da AWS).
Requisitos
Você deve ter um workspace do Azure Databricks, pois este artigo implanta recursos em um workspace existente.
No computador de desenvolvimento local, você deve ter o seguinte instalado:
Terraform, versão 1.1 ou superior. Para verificar se você tem o Terraform instalado e verificar a versão instalada, execute o comando
terraform -v
no terminal ou com o PowerShell. Instale o Terraform se você ainda não o tiver instalado.terraform -v
Node.js versão 16.13 ou superior e npm. Para verificar se você tem Node.js e
npm
instalado e verificar as versões instaladas, execute os comandosnode -v
enpm -v
. Versões posteriores do Node.js já incluemnpm
. Instale Node.js e npm usando o Gerenciador de Versão do Nó (nvm), se você não tiver Node.js enpm
já instalado.node -v npm -v
A CLI da CDKTF. Para verificar se você tem a CLI do CDKTF instalada e para verificar a versão instalada, execute o comando
cdktf --version
. Instale a CLI da CDKTF usando o npm, se você ainda não a tiver instalado.cdktf --version
Dica
Você também pode instalar a CLI da CDKTF no macOS com Homebrew. Consulte Instalar CDKTF.
Python versão 3.7 ou superior e pipenv versão 2021.5.29 ou superior. Para verificar se você tem o Python e
pipenv
instalado e verificar as versões instaladas, execute os comandospython --version
epipenv --version
. Instale o Python e instale o pipenv, se eles ainda não estiverem instalados.python --version pipenv --version
Autenticação do Azure Databricks configurada para o tipo de autenticação compatível que você deseja usar. Consulte Autenticação na documentação do provedor Terraform do Databricks.
Etapa 1: criar um projeto CDKTF
Nesta etapa, no seu computador de desenvolvimento local, você configura a estrutura de diretórios necessária para um projeto CDKTF. Em seguida, você cria o projeto do CDKTF dentro dessa estrutura de diretórios.
Crie um diretório vazio para seu projeto CDKTF e alterne para ele. Execute os seguintes comandos no seu terminal ou com o PowerShell:
Unix, Linux, e macOS
mkdir cdktf-demo cd cdktf-demo
Windows
md cdktf-demo cd cdktf-demo
Crie um projeto CDKTF executando o seguinte comando:
cdktf init --template=python --local
Quando solicitado um Nome de Projeto, aceite o nome de projeto padrão
cdktf-demo
pressionando Enter.Quando solicitado uma Descrição de Projeto, aceite a descrição de projeto padrão pressionando Enter.
Se solicitado Você deseja iniciar a partir de um projeto Terraform existente, insira
N
e pressione Enter.Se solicitado Você deseja enviar relatórios de falha para a equipe CDKTF, insira
n
e pressione Enter.
O CDKTF cria os seguintes arquivos e subdiretórios em seu diretório cdktf-demo
:
.gitignore
, que é uma lista de arquivos e diretórios que o Git ignora se você quer efetuar push do projeto para um repositório Git remoto.cdktf.json
, que contém configurações para seu projeto CDKTF. Consulte o Arquivo de Configuração para obter mais informações sobre as configurações.help
, que contém informações sobre algumas próximas etapas que você pode executar para trabalhar com seu projeto CDKTF.main-test.py
, que contém testes de unidade de suporte que você pode escrever para seu projeto CDKTF. Consulte Testes de Unidade para obter mais informações sobre o teste de unidade.main.py
, que contém o código Python que você escreve para o projeto do CDKTF.Pipfile
ePipfile.lock
, que gerenciam dependências de código para seu projeto CDKTF.
Etapa 2: definir recursos
Nesta etapa, você usará o provedor Terraform CDK Databricks para definir um notebook e um trabalho para executar esse notebook.
Instale as dependências do projeto: usando
pipenv
, instale em seu projeto do CDKTF o Provedor CDK do Databricks Terraform para gerar recursos do Azure Databricks. Para fazer isso, execute o seguinte comando:pipenv install cdktf-cdktf-provider-databricks
Substitua o conteúdo do arquivo
main.py
pelo código a seguir. Este código autentica o CDKTF com o seu workspace do Azure Databricks e, em seguida, gera um notebook junto com um trabalho para executar o notebook. Para exibir a documentação de sintaxe desse código, confira a Referência de constructo do provedor do CDK Databricks do Terraform para 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()
Crie um arquivo nomeado
vars.py
no mesmo diretório quemain.py
. Substitua os valores a seguir por seus próprios valores para especificar um prefixo de recurso e configurações de cluster, como o número de trabalhadores, a cadeia de caracteres de versão do runtime do Spark e o tipo de nó.#!/usr/bin/env python resource_prefix = "cdktf-demo" num_workers = 1 spark_version = "14.3.x-scala2.12" node_type_id = "Standard_D3_v2"
Etapa 3: Implantar os recursos
Nesta etapa, você usará a CLI da CDKTF para implantar, no workspace do Azure Databricks existente, o notebook definido e o trabalho para executar esse notebook.
Gerar o equivalente do código do Terraform para seu projeto CDKTF. Para fazer isso, execute o comando
cdktf synth
.cdktf synth
Antes de fazer alterações, você pode examinar as alterações de recursos pendentes. Execute o seguinte:
cdktf diff
Implante o notebook e o trabalho executando o comando
cdktf deploy
.cdktf deploy
Quando solicitado a aprovar, pressione Enter. O Terraform cria e implanta o notebook e o trabalho em seu workspace.
Etapa 4: Interagir com os recursos
Nesta etapa, você executa o trabalho no workspace do Azure Databricks, que executa o notebook especificado.
- Para exibir o notebook que o trabalho executará em seu workspace, copie o link da URL do Notebook que aparece na saída do comando
cdk deploy
e cole-o na barra de endereços do navegador da web. - Para visualizar o trabalho que executa o notebook em seu workspace, copie o link URL do trabalho que aparece na saída do comando
cdk deploy
e cole-o na barra de endereços do seu navegador da web. - Para executar o trabalho, clique no botão Executar agora na página do trabalho.
(Opcional) Etapa 5: Fazer alterações em um recurso
Nesta etapa opcional, você altera o código do notebook, reimplanta o notebook alterado e usa o trabalho para executá-lo novamente.
Se não quiser fazer nenhuma alteração no notebook, pule para a Etapa 6: Limpar.
No arquivo
main.py
, altere a declaração de variávelnotebook
do seguinte: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") )
Para o seguinte:
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") )
Observação
Certifique-se de que as linhas de código entre aspas triplas (
'''
) estejam alinhadas com a borda do editor de código, conforme mostrado. Caso contrário, o Terraform inserirá espaço em branco adicional no notebook que poderá fazer com que o novo código Python falhe na execução.Gere novamente o equivalente de código do Terraform para seu projeto CDKTF. Para fazer isso, execute o seguinte comando:
cdktf synth
Antes de fazer alterações, você pode examinar as alterações de recursos pendentes. Execute o seguinte:
cdktf diff
Implante as alterações do notebook executando o comando
cdktf deploy
.cdktf deploy
Quando solicitado a aprovar, pressione Enter. O Terraform altera o conteúdo do notebook.
Para visualizar o notebook alterado que o trabalho executará em seu workspace, atualize o notebook que você abriu anteriormente ou copie o link de URL do notebook que aparece na saída do comando
cdk deploy
e cole-o na barra de endereços do navegador da web.Para visualizar o trabalho que executa o notebook alterado em seu workspace, atualize o trabalho que você abriu anteriormente ou copie o link URL do trabalho que aparece na saída do comando
cdk deploy
e cole-o na barra de endereços do navegador da web.Para executar o trabalho, clique no botão Executar agora na página do trabalho.
Etapa 6: Limpeza
Nesta etapa, você usará a CLI da CDKTF para remover o notebook e o trabalho do workspace do Azure Databricks.
Remova os recursos do seu workspace executando o comando
cdktf destroy
:cdktf destroy
Quando solicitado a aprovar, pressione Enter. O Terraform remove os recursos do seu workspace.
Testando
Você pode testar o seu projeto CDKTF antes de implantá-lo. Confira testes de unidade na documentação do CDKTF.
Para projetos CDKTF baseados em Python, você pode escrever e executar testes usando a estrutura de teste pytest do Python junto com a classe Testing
do pacote cdktf
. O arquivo de exemplo a seguir chamado test_main.py
testa o código CDKTF no arquivo main.py
anterior deste artigo. O primeiro teste verifica se o notebook do projeto conterá a representação codificada em Base64 esperada do conteúdo do notebook. O segundo teste verifica se o trabalho do projeto conterá o nome do trabalho esperado. Para executar esses testes, execute o comando pytest
no diretório raiz do projeto.
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"
}
)
Mais recursos
- Referência de construção do provedor Terraform CDK Databricks para TypeScript, Python, Java, C# e Go
- Habilitar o registro em log para aplicativos CDKTF