Provedor Terraform da Databricks
O HashiCorp Terraform é uma ferramenta popular de código aberto para criar uma infraestrutura de nuvem segura e previsível em vários provedores de nuvem. O senhor pode usar o provedorDatabricks Terraform para gerenciar seu espaço de trabalho Databricks e a infraestrutura de nuvem associada usando uma ferramenta flexível e avançada. O objetivo do provedor Databricks Terraform é dar suporte a todos os Databricks REST APIs, apoiando a automação dos aspectos mais complicados de implantar e gerenciar suas plataformas de dados. Databricks Os clientes estão usando o provedor Databricks Terraform para implantar e gerenciar o clustering e o Job e para configurar o acesso aos dados. O senhor usa o provedor Databricks Terraform para provisionar o espaço de trabalho Databricks, bem como o fornecedor da plataforma de nuvem do Google para provisionar o recurso necessário do Google Cloud Platform para esse espaço de trabalho.
Como começar
Nesta seção, instale e configure os requisitos para usar o Terraform e o provedor Databricks Terraform em sua máquina de desenvolvimento local. Em seguida, o senhor configura a autenticação do Terraform. Após esta seção, este artigo fornece uma configuração de amostra que o senhor pode experimentar para provisionar um Databricks Notebook, um clustering e um Job para executar o Notebook no clustering em um Databricks workspace existente.
Requisitos
- 
O senhor deve ter o Terraform CLI. Consulte o download Terraform no site Terraform.
 - 
O senhor deve ter um projeto Terraform. No seu terminal, crie um diretório vazio e depois 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 do Terraform). Por exemplo:
mkdir terraform_demo && cd terraform_demo.Bashmkdir terraform_demo && cd terraform_demoInclua as configurações do Terraform para o seu projeto em um ou mais arquivos de configuração no seu projeto Terraform. Para obter informações sobre a sintaxe do arquivo de configuração, consulte Terraform Language Documentation no site Terraform.
 - 
O senhor 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"
}
}
} - 
O senhor deve configurar a autenticação para o seu projeto Terraform. Consulte Autenticação na documentação do provedor Databricks Terraform.
 
Configuração de amostra
Esta seção fornece um exemplo de configuração que o senhor pode experimentar para provisionar um Databricks Notebook, um clustering e um Job para executar o Notebook no clustering, em um Databricks workspace existente. Ele pressupõe que o senhor já tenha definido os requisitos, criado um projeto do Terraform e configurado o projeto com a autenticação do Terraform, conforme descrito na seção anterior.
- Crie um arquivo chamado 
me.tfem seu projeto Terraform e adicione o seguinte código. Esse arquivo obtém informações sobre o usuário atual (o senhor): 
# Retrieve information about the current user.
data "databricks_current_user" "me" {}
- Crie outro arquivo chamado 
notebook.tfe adicione o código a seguir. Este arquivo representa o notebook. 
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.tfvarse adicione o código a seguir. Esse arquivo especifica as propriedades do Notebook. 
notebook_subdirectory = "Terraform"
notebook_filename     = "notebook-getting-started.py"
notebook_language     = "PYTHON"
- Crie outro arquivo chamado 
notebook-getting-started.pye adicione o código a seguir. Esse arquivo representa o conteúdo do Notebook. 
display(spark.range(10))
- Crie outro arquivo chamado 
cluster.tfe adicione o código a seguir. Este 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.tfvarse adicione o código a seguir. Esse arquivo especifica as propriedades do clustering. 
cluster_name                    = "My Cluster"
cluster_autotermination_minutes = 60
cluster_num_workers             = 1
- Crie outro arquivo chamado 
job.tfe adicione o código a seguir. Esse arquivo representa o trabalho que executa o notebook 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.tfvarse adicione o código a seguir. Esse arquivo especifica as propriedades do trabalho. 
job_name = "My Job"
task_key = "my_task"
- 
Execute
terraform plan. Se houver algum erro, corrija-o e execute o comando novamente. - 
Execute
terraform apply. - 
Verifique se o notebook, o cluster e o trabalho foram criados: na saída do comando
terraform apply, localize as URLs paranotebook_url,cluster_urlejob_urle acesse-as. - 
Execute o trabalho: na página Trabalhos , clique em Executar agora . Após a conclusão do trabalho, verifique sua caixa de entrada de e-mail.
 - 
Quando terminar este exemplo, exclua o bloco de anotações, o cluster e o trabalho do Databricks workspace executando
terraform destroy. 
Para obter mais informações sobre os comandos terraform plan, terraform apply e terraform destroy, consulte Terraform CLI Documentation na documentação Terraform.
- Verifique se o notebook, o cluster e o trabalho foram excluídos: atualize as páginas de notebook, cluster e trabalhos para que cada uma exiba uma mensagem informando que o recurso não pode ser encontrado.
 
Testando
Teste as configurações do site Terraform antes ou depois de implantá-las. O senhor pode executar testes análogos aos testes unitários antes de implantar o recurso. O senhor também pode executar testes análogos aos testes de integração depois que os recursos forem implantados. Consulte Testes na documentação do Terraform.
Execute testes análogos aos testes de integração na configuração de amostra deste artigo seguindo este processo:
- Crie um arquivo chamado 
cluster.tftest.hcle adicione o código a seguir. Esse arquivo testa se o clustering implantado tem o nome de clustering 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.hcle 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.hcle adicione o código a seguir. Esse arquivo testa se o Notebook implantado tem o caminho esperado workspace. 
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"
  }
}
- execução 
terraform test. Terraform O senhor pode implantar cada recurso no site Databricks workspace, executar cada teste relacionado e relatar o resultado do teste e, em seguida, remover o recurso implantado. 
executar testes análogos aos testes de unidade na configuração de amostra deste artigo com o seguinte processo:
- Altere a linha 
command = applyem cada um dos testes anteriores paracommand = plane, em seguida, executeterraform test. Terraform executa cada teste relacionado e informa o resultado do teste, mas não implanta nenhum recurso. - Simule o provedor Databricks Terraform , que permite que o senhor execute 
terraform testsem recurso implantado e também sem exigir nenhuma credencial de autenticação. Consulte Mocks na documentação do Terraform. Para executar testes simulados, uma abordagem é adicionar a linhamock_provider "databricks" {}aos seus testes e remover a linhacommand = applyoucommand = 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óximas etapas
Recurso adicional
- Documentação do provedor Databricks no site do Registro do Terraform
 - Documentação do Terraform no site do Terraform
 - Exemplos do Databricks Terraform no repositório do Github