Provedor do Terraform CDK Databricks
Este artigo aborda o Cloud Development Kit for Terraform (CDKTF), que é desenvolvido por terceiros. Para entrar em contato com o provedor, consulte o site Terraform comunidade.
Este artigo mostra como usar o Python junto com o provedorTerraform CDK Databricks e o Cloud Development Kit for Terraform (CDKTF). O CDKTF é uma plataforma de infraestrutura como código (IaC) de terceiros que permite ao senhor criar, implantar e gerenciar Databricks recurso usando linguagens de programação, ferramentas e práticas de engenharia familiares. Embora este artigo mostre como usar o Python, o CDKTF oferece suporte a outras linguagens, como TypeScript, Java, C# e Go.
O provedor Terraform CDK Databricks é baseado no provedor Databricks Terraform. Para obter mais informações, consulte Terraform Cloud. O CDKTF é baseado no AWS Cloud Development Kit (AWS CDK).
Requisitos
O senhor deve ter um Databricks workspace, pois este artigo implantou recurso em um workspace existente.
Em sua máquina de desenvolvimento local, você deve ter o seguinte instalado:
-
Terraform, versão 1.1 ou superior. Para verificar se o senhor tem o site Terraform instalado e para verificar a versão instalada, execute o comando
terraform -v
em seu terminal ou com PowerShell. Instale o Terraform, se o senhor ainda não o tiver instalado.Bashterraform -v
-
Node.js, versão 16.13 ou superior, e npm. Para verificar se o senhor tem Node.js e
npm
instalados e para verificar as versões instaladas, execute os comandosnode -v
enpm -v
. As versões mais recentes do Node.js já incluemnpm
. Instale o Node.js e o npm usando o Node Version Manager (nvm), se o senhor não tiver o Node.js e onpm
já instalados.Bashnode -v
npm -v -
O CDKTF CLI. Para verificar se o senhor tem o CDKTF CLI instalado e para verificar a versão instalada, execute o comando
cdktf --version
. Instale o CDKTF CLI usando o npm, se o senhor ainda não o tiver instalado.Bashcdktf --version
O senhor também pode instalar o CDKTF CLI no macOS com o Homebrew. Consulte Instalar o CDKTF.
-
Python versão 3.7 ou superior e pipenv versão 2021.5.29 ou superior. Para verificar se o senhor tem Python e
pipenv
instalados e para verificar as versões instaladas, execute os comandospython --version
epipenv --version
. Instale o Python e o pipenv, se ainda não estiverem instalados.Bashpython --version
pipenv --version -
Autenticação do Databricks configurada para o tipo de autenticação compatível que o senhor deseja usar. Consulte Autenticação na documentação do provedor Databricks Terraform.
Etapa 1: criar um projeto CDKTF
Nesta passo, em sua máquina de desenvolvimento local, você configura a estrutura de diretórios necessária para um projeto CDKTF. Em seguida, você cria seu projeto CDKTF nessa estrutura de diretório.
- Crie um diretório vazio para seu projeto CDKTF e, em seguida, mude para ele. Execute o seguinte comando em seu terminal ou com PowerShell:
- Unix, Linux, and macOS
- Windows
mkdir cdktf-demo
cd cdktf-demo
md cdktf-demo
cd cdktf-demo
-
Crie um projeto CDKTF executando o seguinte comando:
Bashcdktf init --template=python --local
-
Quando for solicitado um nome de projeto, aceite o nome de projeto default de
cdktf-demo
pressionando Enter . -
Quando for solicitada uma Descrição do projeto , aceite a descrição do projeto default pressionando Enter .
-
Se for solicitado O senhor deseja começar a partir de um projeto Terraform existente , digite
N
e pressione Enter . -
Se solicitado Deseja enviar relatórios de falhas para a equipe do CDKTF,
n
digite 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 o senhor quiser enviar esse projeto para um repositório Git remoto.cdktf.json
, que contém as configurações do seu projeto CDKTF. Consulte Arquivo de configuração para obter mais informações sobre as definições de configuração.help
que contém informações sobre as próximas etapas que o senhor pode seguir para trabalhar com seu projeto CDKTF.main-test.py
, que contém testes unitários de suporte que você pode escrever para seu projeto CDKTF. Consulte Testes de unidade para obter mais informações sobre testes de unidade.main.py
que contém o código Python que o senhor escreve para o seu projeto CDKTF.Pipfile
ePipfile.lock
, que gerenciam dependências de código para seu projeto CDKTF.
Etapa 2: Definir recurso
Nesta passo, você usará o provedor Terraform CDK Databricks para definir um Notebook e um Job para executar esse Notebook.
-
Instale as dependências do projeto: usando
pipenv
, instale em seu projeto CDKTF o provedorTerraform CDK Databricks para gerar o recurso Databricks. Para fazer isso, execute o seguinte:Bashpipenv install cdktf-cdktf-provider-databricks
-
Substitua o conteúdo do arquivo
main.py
pelo código a seguir. Esse código autentica o CDKTF com seu Databricks workspace e, em seguida, gera um Notebook juntamente com um Job para executá-lo. Para obter a documentação de sintaxe do view para esse código, consulte a referência de construção do provedorTerraform CDK Databricks 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 chamado
vars.py
no mesmo diretório demain.py
. Substitua os valores a seguir por seus próprios valores para especificar um prefixo de recurso e as configurações de clustering, como o número de trabalhadores, as strings de versão de tempo de execução doSpark 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 = "i3.xlarge"
Etapa 3: implantado o recurso
Nesta passo, você usa a CLI do CDKTF para aprimorar, em seu workspace Databricks existente, o Notebook definido e o Job para execução desse Notebook.
-
Gere o código equivalente do Terraform para seu projeto CDKTF. Para isso, execute o comando
cdktf synth
.Bashcdktf synth
-
Antes de fazer alterações, o senhor pode revisar as alterações pendentes no recurso. execução o seguinte:
Bashcdktf diff
-
Implante o Notebook e o Job executando o comando
cdktf deploy
.Bashcdktf deploy
-
Quando solicitado a Aprovar, pressione Enter. Terraform cria e implanta o Notebook e o Job em seu site workspace.
Etapa 4: Interagir com o recurso
Nesta passo, você executa o Job em seu workspace do Databricks, que executa o Notebook especificado.
- Para view o Notebook que o Job executará em seu workspace, copie o link do URLNotebook que aparece na saída do comando
cdk deploy
e cole-o na barra de endereços do navegador da Web. - Para view o trabalho que executa o Notebook em seu workspace, copie o link do URLJob 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.
(Opcional) Etapa 5: fazer alterações em um recurso
Nesta passo opcional, você altera o código do Notebook, reimplementa o Notebook alterado e, em seguida, usa o Job para executar novamente o Notebook alterado.
Se o senhor não quiser fazer nenhuma alteração no Notebook, pule para a Etapa 6: Limpeza.
-
No arquivo
main.py
, altere a declaração da variávelnotebook
da seguinte:Pythonmy_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:
Pythonmy_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")
)
Certifique-se de que as linhas de código entre aspas triplas ('''
) estejam alinhadas com a borda do seu editor de código, conforme mostrado. Caso contrário, o site Terraform inserirá espaços em branco adicionais no Notebook, o que pode fazer com que o novo código Python não seja executado.
-
Gerar novamente o código equivalente do Terraform para seu projeto CDKTF. Para fazer isso, execute o seguinte:
Bashcdktf synth
-
Antes de fazer alterações, o senhor pode revisar as alterações pendentes no recurso. execução o seguinte:
Bashcdktf diff
-
Implante as alterações do Notebook executando o comando
cdktf deploy
.Bashcdktf deploy
-
Quando solicitado a Aprovar, pressione Enter. Terraform altera o conteúdo do Notebook.
-
Para view o Notebook alterado que o Job executará em seu workspace, refresh o Notebook que o senhor abriu anteriormente ou copie o link do URLNotebook que aparece na saída do comando
cdk deploy
e cole-o na barra de endereços do navegador da Web. -
Para view o Job que executa o Notebook alterado em seu workspace, refresh o Job que você abriu anteriormente ou copie o link do URLJob 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: Limpar
Nesta passo, você usa a CLI do CDKTF para remover o Notebook e Job do workspace do Databricks.
-
Remova o recurso do site workspace executando o comando
cdktf destroy
:Bashcdktf destroy
-
Quando solicitado a Aprovar, pressione Enter. Terraform remove o recurso do site workspace.
Testando
O senhor pode testar o projeto CDKTF antes de implantá-lo. Consulte Testes de unidade na documentação do CDKTF.
Para projetos CDKTF baseados em Python, o senhor pode escrever e executar testes usando a estrutura de teste Python pytest juntamente com a classe cdktf
do pacote Testing
. O arquivo de exemplo a seguir, denominado 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 esperado do trabalho. 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 recurso
- Referência de construção do provedor Terraform CDK Databricks para TypeScript, Python, Java, C# e Go
- Ativar registro para aplicativos CDKTF