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, provisionner des espaces de travail Databricks et configurer l’accès aux données.

Prise en main

Effectuez les étapes suivantes pour installer et configurer les outils en ligne de commande dont Terraform a besoin pour fonctionner. Terraform CLI et Azure CLI font partie de ces outils. Après avoir configuré ces outils, effectuez les étapes nécessaires pour créer une configuration Terraform de base que vous pourrez utiliser par la suite pour gérer vos espaces de travail Azure Databricks et l’infrastructure cloud Azure associée.

Notes

Cette procédure part du principe que vous avez accès en tant qu’administrateur Databricks à un espace de travail Azure Databricks déployé et à l’abonnement Azure correspondant, et que vous disposez des autorisations nécessaires pour que Terraform puisse effectuer les actions désirées dans cet abonnement Azure. Pour plus d’informations, consultez les rubriques suivantes :

  1. Installez Terraform CLI. Pour plus d’informations, consultez Télécharger Terraform sur le site web de Terraform.

  2. Installez Azure CLI, puis utilisez cette interface pour vous connecter à Azure en exécutant la commande az login. Pour plus d’informations, consultez Installer l’interface de ligne de commande Azure sur le site web de Microsoft Azure et Azure Provider: Authenticating using the Azure CLI (Fournisseur Azure : authentification à l’aide de l’interface Azure CLI) sur le site web de Terraform.

    az login
    

    Conseil

    Pour que Terraform s’exécute dans le contexte d’une autre connexion, réexécutez la commande az login. Vous pouvez configurer Terraform pour qu’il utilise un abonnement Azure autre que celui listé comme "isDefault": true dans la sortie de la commande az login. Pour cela, exécutez la commande az account set --subscription="<subscription ID>" en remplaçant <subscription ID> par la valeur de la propriété id de l’abonnement souhaité dans la sortie de la commande az login.

    Cette procédure utilise l’interface Azure CLI, ainsi que l’abonnement par défaut, pour l’authentification. Pour obtenir d’autres options d’authentification, consultez Authenticating to Azure (Authentification auprès d’Azure) sur le site web de Terraform.

  3. 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.) Par exemple : mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    
  4. Dans ce répertoire vide, créez un fichier nommé main.tf. Ajoutez le contenu suivant à ce fichier, puis enregistrez-le.

    Conseil

    Si vous utilisez Visual Studio Code, l’extension HashiCorp Terraform pour Visual Studio Code ajoute des fonctionnalités d’édition pour les fichiers Terraform, comme la mise en évidence de la syntaxe, IntelliSense, la navigation dans le code, la mise en forme du code, un explorateur de modules, etc.

    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
          version = ">= 2.26"
        }
    
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "databricks" {}
    
  5. Initialisez le répertoire de travail contenant le fichier main.tf en exécutant la commande terraform init. Pour plus d’informations, consultez Command: init sur le site web de Terraform.

    terraform init
    

    Terraform télécharge les fournisseurs azurerm et databricks, puis les installe dans un sous-répertoire caché de votre répertoire de travail actuel (nommé .terraform). La commande terraform init indique la version des fournisseurs qui ont été installés. Terraform crée également un fichier de verrouillage nommé .terraform.lock.hcl qui spécifie les versions exactes des fournisseurs, ce qui vous permet de contrôler à quel moment mettre à jour les fournisseurs utilisés pour votre projet.

  6. Appliquez les modifications nécessaires pour atteindre l’état souhaité de la configuration en exécutant la commande terraform apply. Pour plus d’informations, consultez Command: apply sur le site web de Terraform.

    terraform apply
    

    Aucune ressource n’ayant encore été spécifiée dans le fichier main.tf, la sortie est Apply complete! Resources: 0 added, 0 changed, 0 destroyed.. Terraform écrit également des données dans un fichier appelé terraform.tfstate. Pour créer des ressources, passez à l’exemple de configuration, aux étapes suivantes ou aux deux pour spécifier les ressources à créer, puis réexécutez la commande terraform apply. Terraform stocke les ID et les propriétés des ressources qu’il gère dans ce fichier terraform.tfstate pour pouvoir les mettre à jour ou les détruire à l’avenir.

Exemple de configuration

Effectuez la procédure suivante pour créer un exemple de configuration Terraform qui crée un notebook et un travail pour exécuter ce notebook dans un espace de travail Azure Databricks existant.

  1. Dans le fichier main.tf que vous avez créé au moment du démarrage, modifiez le fournisseur databricks pour qu’il fasse référence à un espace de travail Azure Databricks existant :

    provider "databricks" {
      host = var.databricks_workspace_url
    }
    
  2. Ajoutez le code suivant à la fin du fichier main.tf :

    variable "databricks_workspace_url" {
      description = "The URL to the Azure Databricks workspace (must start with https://)"
      type = string
      default = "<Azure Databricks workspace URL>"
    }
    
    variable "resource_prefix" {
      description = "The prefix to use when naming the notebook and job"
      type = string
      default = "terraform-demo"
    }
    
    variable "email_notifier" {
      description = "The email address to send job status to"
      type = list(string)
      default = ["<Your email address>"]
    }
    
    // Get information about the Databricks user that is calling
    // the Databricks API (the one associated with "databricks_connection_profile").
    data "databricks_current_user" "me" {}
    
    // Create a simple, sample notebook. Store it in a subfolder within
    // the Databricks current user's folder. The notebook contains the
    // following basic Spark code in Python.
    resource "databricks_notebook" "this" {
      path     = "${data.databricks_current_user.me.home}/Terraform/${var.resource_prefix}-notebook.ipynb"
      language = "PYTHON"
      content_base64 = base64encode(<<-EOT
        # created from ${abspath(path.module)}
        display(spark.range(10))
        EOT
      )
    }
    
    // Create a job to run the sample notebook. The job will create
    // a cluster to run on. The cluster will use the smallest available
    // node type and run the latest version of Spark.
    
    // Get the smallest available node type to use for the cluster. Choose
    // only from among available node types with local storage.
    data "databricks_node_type" "smallest" {
      local_disk = true
    }
    
    // Get the latest Spark version to use for the cluster.
    data "databricks_spark_version" "latest" {}
    
    // Create the job, emailing notifiers about job success or failure.
    resource "databricks_job" "this" {
      name = "${var.resource_prefix}-job-${data.databricks_current_user.me.alphanumeric}"
      new_cluster {
        num_workers   = 1
        spark_version = data.databricks_spark_version.latest.id
        node_type_id  = data.databricks_node_type.smallest.id
      }
      notebook_task {
        notebook_path = databricks_notebook.this.path
      }
      email_notifications {
        on_success = var.email_notifier
        on_failure = var.email_notifier
      }
    }
    
    // Print the URL to the notebook.
    output "notebook_url" {
      value = databricks_notebook.this.url
    }
    
    // Print the URL to the job.
    output "job_url" {
      value = databricks_job.this.url
    }
    
  3. Remplacez les valeurs suivantes, puis enregistrez le fichier :

    • Remplacez <Azure Databricks workspace URL> par l’URL de l’espace de travail Azure Databricks.
    • Remplacez <Your email address> par votre adresse e-mail.
  4. Exécutez terraform apply.

  5. Vérifiez que le notebook et le travail ont été créés : dans la sortie de la commande terraform apply, recherchez les URL pour notebook_url et job_url, puis accédez à celles-ci.

  6. Exécutez le travail : dans la page Jobs, cliquez sur Run Now. Une fois le travail terminé, consultez votre messagerie.

  7. Quand vous avez fini d’utiliser cet exemple, exécutez terraform destroy pour supprimer le notebook et le travail de l’espace de travail Azure Databricks.

  8. Vérifiez que le notebook et le travail ont été supprimés : actualisez le notebook et les pages Jobs pour afficher un message indiquant que les ressources sont introuvables.

Étapes suivantes

  1. Créez un espace de travail Azure Databricks.
  2. Gérez les ressources d’espace de travail pour un espace de travail Azure Databricks.

Dépannage

Notes

Pour un support spécifique à Terraform, consultez les dernières rubriques sur Terraform sur le site web Discuss de HashiCorp. Pour les problèmes spécifiques au fournisseur Databricks Terraform, consultez les problèmes dans le dépôt GitHub databrickslabs/terraform-provider-databricks.

Erreur : échec d’installation du fournisseur

Problème : si vous n’avez pas enregistré de fichier terraform.lock.hcl dans votre système de gestion de version et que vous exécutez la commande terraform init, le message suivant s’affiche : Failed to install provider. Une sortie supplémentaire peut indiquer un message de ce type :

Error while installing databrickslabs/databricks: v1.0.0: checksum list has no SHA-256 hash for "https://github.com/databricks/terraform-provider-databricks/releases/download/v1.0.0/terraform-provider-databricks_1.0.0_darwin_amd64.zip"

Cause : vos configurations Terraform référencent des fournisseurs Terraform Databricks obsolètes.

Solution:

  1. Remplacez databrickslabs/databricks par databricks/databricks dans tous vos fichiers .tf.

    Pour automatiser ces remplacements, exécutez la commande Python suivante à partir du dossier parent qui contient les fichiers .tf à mettre à jour :

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. Exécutez la commande Terraform suivante, puis approuvez les changements quand vous y êtes invité :

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    Pour plus d’informations sur cette commande, consultez Commande : state replace-provider dans la documentation Terraform.

  3. Vérifiez les changements en exécutant la commande Terraform suivante :

    terraform init
    

Erreur : échec d’interrogation des packages de fournisseur disponibles

Problème : si vous n’avez pas enregistré de fichier terraform.lock.hcl dans votre système de gestion de version et que vous exécutez la commande terraform init, le message suivant s’affiche : Failed to query available provider packages.

Cause : vos configurations Terraform référencent des fournisseurs Terraform Databricks obsolètes.

Solution : suivez les instructions de la solution correspondant à Erreur : échec d’installation du fournisseur.

Exemples supplémentaires

Ressources supplémentaires