Fournisseur Databricks Terraform
HashiCorp Terraform est un outil open source populaire permettant de créer une infrastructure cloud sécurisée et prévisible sur plusieurs fournisseurs cloud. Vous pouvez utiliser le fournisseur Databricks Terraform pour gérer vos espaces de travail Azure Databricks et l’infrastructure cloud associée à l’aide d’un outil flexible et puissant. Le fournisseur Databricks Terraform a pour objectif de prendre en charge toutes les API REST Databricks, en supportant l’automatisation des aspects les plus complexes du déploiement et de la gestion de vos plateformes de données. Les clients Databricks utilisent le fournisseur Databricks Terraform pour déployer et gérer des clusters et des travaux, ainsi que pour configurer l’accès aux données. Vous utilisez le fournisseur Azure pour provisionner des espaces de travail Azure Databricks.
Bien démarrer
Dans cette section, vous installez et configurez les conditions requises pour utiliser Terraform et le fournisseur Databricks Terraform sur votre ordinateur de développement local. Vous pouvez ensuite configurer l’authentification Terraform. Après cette section, cet article fournit un exemple de configuration que vous pouvez expérimenter pour approvisionner un notebook Azure Databricks, un cluster et un travail pour exécuter le notebook sur le cluster dans un espace de travail Azure Databricks existant.
Spécifications
Vous devez disposer de l’interface CLI Terraform. Consultez Télécharger Terraform sur le site web de Terraform.
Vous devez disposer d’un projet Terraform. Dans votre terminal, créez un répertoire vide, puis basculez vers celui-ci. (Chaque ensemble distinct de fichiers de configuration Terraform doit se trouver dans son propre répertoire, ce qui s’appelle un projet Terraform.) Par exemple :
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Incluez les configurations Terraform pour votre projet dans un ou plusieurs fichiers de configuration dans votre projet Terraform. Pour plus d’informations sur la syntaxe du fichier de configuration, consultez la documentation du langage Terraform sur le site web de Terraform.
Vous devez ajouter à votre projet Terraform une dépendance pour le fournisseur Databricks Terraform. Ajoutez ce qui suit à l’un des fichiers de configuration de votre projet Terraform :
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
Vous devez configurer l’authentification pour votre projet Terraform. Consultez Authentification dans la documentation du fournisseur Databricks Terraform.
Exemple de configuration
Cette section fournit un échantillon de configuration que vous pouvez tester pour approvisionner un notebook, un cluster et une tâche Azure Databricks. Vous pourrez ainsi exécuter le notebook sur le cluster, dans un espace de travail Azure Databricks existant. Il part du principe que vous avez déjà configuré les exigenceset que vous avez créé un projet Terraform et configuré le projet avec l’authentification Terraform, comme décrit dans la section précédente.
Créez un fichier nommé
me.tf
dans votre projet Terraform et ajoutez le code suivant. Ce fichier obtient des informations sur l’utilisateur actuel (vous) :# Retrieve information about the current user. data "databricks_current_user" "me" {}
Créez un autre fichier nommé
notebook.tf
, puis ajoutez le code suivant. Ce fichier représente le 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 }
Créez un autre fichier nommé
notebook.auto.tfvars
, puis ajoutez le code suivant. Ce fichier spécifie les propriétés du notebook.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
Créez un autre fichier nommé
notebook-getting-started.py
, puis ajoutez le code suivant. Ce fichier représente le contenu du notebook.display(spark.range(10))
Créez un autre fichier nommé
cluster.tf
, puis ajoutez le code suivant. Ce fichier représente le 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 }
Créez un autre fichier nommé
cluster.auto.tfvars
, puis ajoutez le code suivant. Ce fichier spécifie les propriétés du cluster.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Créez un autre fichier nommé
job.tf
, puis ajoutez le code suivant. Ce fichier représente la tâche qui exécute le notebook sur le 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 }
Créez un autre fichier nommé
job.auto.tfvars
, puis ajoutez le code suivant. Ce fichier spécifie les propriétés du cluster.job_name = "My Job" task_key = "my_task"
Exécutez
terraform plan
. S’il existe des erreurs, corrigez-les, puis réexécutez la commande.Exécutez
terraform apply
.Vérifiez que le notebook, le cluster et la tâche ont été créés : dans la sortie de la commande
terraform apply
, recherchez les URL pournotebook_url
,cluster_url
,job_url
, puis accédez à celles-ci.Exécuter le projet : sur la page Projets, cliquez sur Run Now. Une fois le travail terminé, consultez votre messagerie.
Quand vous avez fini d’utiliser cet échantillon, exécutez
terraform destroy
pour supprimer le notebook et la tâche de l’espace de travail Azure Databricks.Remarque
Pour plus d’informations sur les commandes
terraform plan
,terraform apply
etterraform destroy
, consultez la documentation sur l’interface CLI Terraform dans la documentation Terraform.Vérifiez que le notebook, le cluster et la tâche ont été supprimés : actualisez le notebook et les pages Tâches pour afficher un message indiquant que la ressource est introuvable.
Test
Testez vos configurations Terraform avant ou après leur déploiement. Vous pouvez exécuter des tests analogues aux tests unitaires avant de déployer des ressources. Vous pouvez également exécuter des tests analogues aux tests d’intégration après le déploiement des ressources. Consultez Tests dans la documentation de Terraform.
Exécutez des tests analogues aux tests d’intégration en fonction de l’exemple de configuration de cet article en suivant ce processus :
Créez un fichier nommé
cluster.tftest.hcl
, puis ajoutez le code suivant. Ce fichier teste si le cluster déployé porte le nom de cluster attendu.# 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" } }
Créez un fichier nommé
job.tftest.hcl
, puis ajoutez le code suivant. Ce fichier teste si le travail déployé porte le nom de travail attendu.run "job_name_test" { command = apply assert { condition = databricks_job.this.name == var.job_name error_message = "Job name did not match expected name" } }
Créez un fichier nommé
notebook.tftest.hcl
, puis ajoutez le code suivant. Ce fichier teste si le notebook déployé dispose du chemin d’accès d’espace de travail attendu.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" } }
Exécutez
terraform test
. Terraform déploie chaque ressource sur l’espace de travail Azure Databricks, exécute chaque test associé, et rapporte le résultat de test, puis supprime la ressource déployée.
Exécutez des tests analogues aux tests unitaires en fonction de l’exemple de configuration de cet article à l’aide du processus suivant :
- Remplacez la ligne
command = apply
dans chacun des tests précédents parcommand = plan
, puis exécutezterraform test
. Terraform exécute chaque test associé, puis rapporte le résultat de test, mais ne déploie aucune ressource. - Simulez le fournisseur Databricks Terraform pour pouvoir exécuter
terraform test
sans déployer de ressources, et sans nécessiter d’informations d’identification d’authentification. Consultez Mocks (simulations) dans la documentation de Terraform. Pour exécuter des tests fictifs, il existe une approche qui consiste à ajouter la lignemock_provider "databricks" {}
à vos tests et à supprimer la lignecommand = apply
oucommand = plan
, par exemple :
# 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"
}
}
Étapes suivantes
Ressources supplémentaires
- Documentation sur le fournisseur Databricks sur le site web Registry de Terraform
- Documentation Terraform sur le site web de Terraform
- Exemples de Databricks Terraform sur le dépôt Github