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 -vem 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
npminstalados e para verificar as versões instaladas, execute os comandosnode -venpm -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 onpmjá 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
pipenvinstalados e para verificar as versões instaladas, execute os comandospython --versionepipenv --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-demopressionando 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
Ne pressione Enter . -
Se solicitado Deseja enviar relatórios de falhas para a equipe do CDKTF,
ndigite e pressione Enter.
O CDKTF cria os seguintes arquivos e subdiretórios em seu diretório cdktf-demo:
.gitignoreque é 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.helpque 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.pyque contém o código Python que o senhor escreve para o seu projeto CDKTF.PipfileePipfile.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.pypelo 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.pyno 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 = "n1-standard-4"
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 deploye 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 deploye 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
Nessa etapa opcional, o senhor altera o código do Notebook, reimplanta 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ávelnotebookda 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 deploye 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 o senhor abriu anteriormente ou copie o link do URLJob que aparece na saída do comando
cdk deploye 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 Pythonprojetos CDKTF baseados Python em, o cdktf senhor pode escrever e executar testes usando a estrutura de teste pytest do juntamente com a Testing classe do pacote. 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