Fornecedor do Terraform do Databricks
HashiCorp Terraform é uma ferramenta de código aberto popular para criar infraestrutura de nuvem segura e previsível em vários provedores de nuvem. Você pode usar o provedor Databricks Terraform para gerenciar seus espaços de trabalho do Azure Databricks e a infraestrutura de nuvem associada usando uma ferramenta flexível e poderosa. O objetivo do provedor Databricks Terraform é oferecer suporte a todas as APIs REST do Databricks, suportando a automação dos aspetos mais complicados da implantação e gerenciamento de suas plataformas de dados. Os clientes do Databricks estão usando o provedor Databricks Terraform para implantar e gerenciar clusters e trabalhos e configurar o acesso aos dados. Você usa o Provedor do Azure para provisionar espaços de trabalho do Azure Databricks.
Introdução
Nesta seção, você instala e configura requisitos para usar o Terraform e o provedor Databricks Terraform em sua máquina de desenvolvimento local. Em seguida, configure a autenticação Terraform. Após esta seção, este artigo fornece uma configuração de exemplo que você pode experimentar para provisionar um bloco de anotações, cluster e um trabalho do Azure Databricks para executar o bloco de anotações no cluster em um espaço de trabalho existente do Azure Databricks.
Requisitos
Você deve ter a CLI Terraform. Consulte Download Terraform no site Terraform.
Você deve ter um projeto Terraform. No seu terminal, crie um diretório vazio e, em seguida, mude para ele. (Cada conjunto separado de arquivos de configuração do Terraform deve estar em seu próprio diretório, que é chamado de projeto Terraform.) Por exemplo:
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Inclua configurações do Terraform para seu projeto em um ou mais arquivos de configuração em seu projeto Terraform. Para obter informações sobre a sintaxe do arquivo de configuração, consulte Documentação da linguagem Terraform no site da Terraform.
Você deve adicionar ao seu projeto Terraform uma dependência para o provedor Databricks Terraform. Adicione o seguinte a um dos arquivos de configuração em seu projeto Terraform:
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
Você deve configurar a autenticação para seu projeto Terraform. Consulte Autenticação na documentação do provedor Databricks Terraform.
Configuração de exemplo
Esta seção fornece uma configuração de exemplo que você pode experimentar para provisionar um bloco de anotações do Azure Databricks, um cluster e um trabalho para executar o bloco de anotações no cluster, em um espaço de trabalho existente do Azure Databricks. Ele pressupõe que você já tenha configurado os requisitos, bem como criado um projeto Terraform e configurado o projeto com autenticação Terraform, conforme descrito na seção anterior.
Crie um arquivo nomeado
me.tf
em seu projeto Terraform e adicione o código a seguir. Este arquivo obtém informações sobre o usuário atual (você):# Retrieve information about the current user. data "databricks_current_user" "me" {}
Crie outro arquivo chamado
notebook.tf
e adicione o código a seguir. Este ficheiro representa o bloco de notas.variable "notebook_subdirectory" { description = "A name for the subdirectory to store the notebook." type = string default = "Terraform" } variable "notebook_filename" { description = "The notebook's filename." type = string } variable "notebook_language" { description = "The language of the notebook." type = string } resource "databricks_notebook" "this" { path = "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" language = var.notebook_language source = "./${var.notebook_filename}" } output "notebook_url" { value = databricks_notebook.this.url }
Crie outro arquivo chamado
notebook.auto.tfvars
e adicione o código a seguir. Este ficheiro especifica as propriedades do bloco de notas.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
Crie outro arquivo chamado
notebook-getting-started.py
e adicione o código a seguir. Este ficheiro representa o conteúdo do bloco de notas.display(spark.range(10))
Crie outro arquivo chamado
cluster.tf
e adicione o código a seguir. Esse arquivo representa o cluster.variable "cluster_name" { description = "A name for the cluster." type = string default = "My Cluster" } variable "cluster_autotermination_minutes" { description = "How many minutes before automatically terminating due to inactivity." type = number default = 60 } variable "cluster_num_workers" { description = "The number of workers." type = number default = 1 } # Create the cluster with the "smallest" amount # of resources allowed. data "databricks_node_type" "smallest" { local_disk = true } # Use the latest Databricks Runtime # Long Term Support (LTS) version. data "databricks_spark_version" "latest_lts" { long_term_support = true } resource "databricks_cluster" "this" { cluster_name = var.cluster_name node_type_id = data.databricks_node_type.smallest.id spark_version = data.databricks_spark_version.latest_lts.id autotermination_minutes = var.cluster_autotermination_minutes num_workers = var.cluster_num_workers } output "cluster_url" { value = databricks_cluster.this.url }
Crie outro arquivo chamado
cluster.auto.tfvars
e adicione o código a seguir. Esse arquivo especifica as propriedades do cluster.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Crie outro arquivo chamado
job.tf
e adicione o código a seguir. Esse arquivo representa o trabalho que executa o bloco de anotações no cluster.variable "job_name" { description = "A name for the job." type = string default = "My Job" } variable "task_key" { description = "A name for the task." type = string default = "my_task" } resource "databricks_job" "this" { name = var.job_name task { task_key = var.task_key existing_cluster_id = databricks_cluster.this.cluster_id notebook_task { notebook_path = databricks_notebook.this.path } } email_notifications { on_success = [ data.databricks_current_user.me.user_name ] on_failure = [ data.databricks_current_user.me.user_name ] } } output "job_url" { value = databricks_job.this.url }
Crie outro arquivo chamado
job.auto.tfvars
e adicione o código a seguir. Este arquivo especifica as propriedades dos trabalhos.job_name = "My Job" task_key = "my_task"
Execute o
terraform plan
. Se houver erros, corrija-os e execute o comando novamente.Execute o
terraform apply
.Verifique se o bloco de anotações, o cluster e o trabalho foram criados: na saída do comando, localize as URLs de
terraform apply
notebook_url
,cluster_url
ejob_url
, e vá até elas.Executar o trabalho: na página Trabalhos, clique em Executar agora. Depois que o trabalho terminar, verifique sua caixa de entrada de e-mail.
Quando terminar este exemplo, exclua o bloco de anotações, o cluster e o trabalho do espaço de trabalho do Azure Databricks executando
terraform destroy
.Nota
Para obter mais informações sobre os
terraform plan
comandos ,terraform apply
e , consulteterraform destroy
Documentação da CLI do Terraform na documentação do Terraform.Verifique se o bloco de anotações, o cluster e o trabalho foram excluídos: atualize as páginas do bloco de anotações, do cluster e Trabalhos para que cada uma exiba uma mensagem informando que o recurso não pode ser encontrado.
Testar
Teste suas configurações do Terraform antes ou depois de implantá-las. Você pode executar testes análogos ao teste de unidade antes de implantar recursos. Você também pode executar testes análogos aos testes de integração depois que os recursos são implantados. Consulte Testes na documentação do Terraform.
Execute testes análogos aos testes de integração na configuração de exemplo deste artigo seguindo este processo:
Crie um arquivo chamado
cluster.tftest.hcl
e adicione o código a seguir. Esse arquivo testa se o cluster implantado tem o nome de cluster esperado.# Filename: cluster.tftest.hcl run "cluster_name_test" { command = apply assert { condition = databricks_cluster.this.cluster_name == var.cluster_name error_message = "Cluster name did not match expected name" } }
Crie um arquivo chamado
job.tftest.hcl
e adicione o código a seguir. Esse arquivo testa se o trabalho implantado tem o nome de trabalho esperado.run "job_name_test" { command = apply assert { condition = databricks_job.this.name == var.job_name error_message = "Job name did not match expected name" } }
Crie um arquivo chamado
notebook.tftest.hcl
e adicione o código a seguir. Esse arquivo testa se o bloco de anotações implantado tem o caminho de espaço de trabalho esperado.run "notebook_path_test" { command = apply assert { condition = databricks_notebook.this.path == "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" error_message = "Notebook path did not match expected path" } }
Execute o
terraform test
. O Terraform implanta cada recurso no espaço de trabalho do Azure Databricks, executa cada teste relacionado e relata seu resultado de teste e, em seguida, destrói o recurso implantado.
Execute testes análogos aos testes de unidade na configuração de exemplo deste artigo com o seguinte processo:
- Altere a linha
command = apply
em cada um dos testes anteriores paracommand = plan
e, em seguida, executeterraform test
. O Terraform executa cada teste relacionado e relata seu resultado de teste, mas não implanta nenhum recurso. - Simule o provedor Databricks Terraform, que permite
terraform test
executar sem implantar recursos e também sem exigir credenciais de autenticação. Consulte Mocks na documentação do Terraform. Para executar testes simulados, uma abordagem é adicionar a linhamock_provider "databricks" {}
aos testes e remover a linhacommand = apply
oucommand = plan
, por exemplo:
# Filename: cluster.tftest.hcl
mock_provider "databricks" {}
run "cluster_mock_name_test" {
assert {
condition = databricks_cluster.this.cluster_name == var.cluster_name
error_message = "Cluster name did not match expected name"
}
}
# Filename: job.tftest.hcl
mock_provider "databricks" {}
run "job_mock_name_test" {
assert {
condition = databricks_job.this.name == var.job_name
error_message = "Job name did not match expected name"
}
}
# Filename: notebook.tftest.hcl
mock_provider "databricks" {}
run "notebook_mock_path_test" {
assert {
condition = databricks_notebook.this.path == "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}"
error_message = "Notebook path did not match expected path"
}
}
Próximos passos
- Crie um espaço de trabalho do Azure Databricks.
- Gerenciar recursos do espaço de trabalho
- Criar um cluster, um bloco de anotações e um trabalho
- Automatize a configuração do Unity Catalog
- Controlar o acesso às tabelas SQL do Databricks
- Criar um painel de exemplo
Recursos adicionais
- Documentação do provedor Databricks no site do Terraform Registry
- Documentação Terraform no site Terraform
- Repositório do Github de exemplos de Databricks Terraform