Configurer Terraform dans Azure Cloud Shell avec Azure PowerShell

Terraform permet la définition, l’aperçu et le déploiement d’une infrastructure cloud. Terraform vous permet de créer des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier un fournisseur de services cloud, tel qu’Azure, et les éléments qui composent votre infrastructure cloud. Après avoir créé vos fichiers de configuration, vous créez un plan d’exécution qui vous permet d’afficher un aperçu de vos modifications d’infrastructure avant leur déploiement. Une fois que vous avez vérifié les modifications, vous appliquez le plan d’exécution pour déployer l’infrastructure.

Cet article explique comment bien démarrer avec Terraform sur Azure en utilisant Cloud Shell et PowerShell.

Dans cet article, vous apprendrez comment :

  • Configurer Cloud Shell
  • Comprendre les scénarios d’authentification Terraform et Azure courants
  • S’authentifier par le biais d’un compte Microsoft à partir de Cloud Shell (avec Bash ou PowerShell)
  • S’authentifier par le biais d’un compte Microsoft à partir de Windows (avec Bash ou PowerShell)
  • Créer un principal de service avec Azure CLI
  • Créer un principal de service avec Azure PowerShell
  • Spécifier les informations d’identification du principal de service dans des variables d’environnement
  • Spécifier les informations d’identification du principal de service dans un bloc provider Terraform

1. Configurer votre environnement

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

2. Ouvrir Cloud Shell

  1. Si vous avez déjà une session Cloud Shell ouverte, vous pouvez passer à la section suivante.

  2. Naviguez vers le portail Azure

  3. Si nécessaire, connectez-vous à votre abonnement Azure et changez l’annuaire Azure.

  4. Ouvrez Cloud Shell.

    Open Cloud Shell from the top menu in the Azure portal.

  5. Si vous n’avez pas déjà utilisé Cloud Shell, configurez les paramètres d’environnement et de stockage.

  6. Sélectionnez l’environnement de ligne de commande.

    Select the CLI you want to use in Cloud Shell.

3. Installer la dernière version de Terraform dans Azure Cloud Shell

Cloud Shell est automatiquement mis à jour vers la dernière version de Terraform. Toutefois, les mises à jour se présentent dans quelques semaines de publication. Cet article vous montre comment télécharger et installer la version actuelle de Terraform.

  1. Déterminez la version de Terraform utilisée dans Cloud Shell.

    terraform version
    
  2. Si la version de Terraform installée dans Cloud Shell n’est pas la version la plus récente, un message s’affiche pour indiquer que la version de Terraform est obsolète.

  3. Si vous voulez quand même utiliser la version indiquée, passez à la section suivante. Sinon, continuez en procédant comme suit :

  4. Accédez à la page des téléchargements Terraform.

  5. Faites défiler la page jusqu’aux liens de téléchargement Linux.

  6. Placez votre curseur de souris sur le lien 64 bits. Ce lien concerne la dernière version AMD Linux 64 bits, qui est appropriée pour Cloud Shell.

  7. Copiez l’URL.

  8. Exécutez curl, en remplaçant l’espace réservé par l’URL obtenue à l’étape précédente.

    curl -O <terraform_download_url>
    
  9. Décompressez le fichier .

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Si le répertoire n’existe pas, créez un répertoire nommé bin.

    mkdir bin
    
  11. Déplacez le fichier terraform dans le répertoire bin.

    mv terraform bin/    
    
  12. Fermez et redémarrez Cloud Shell.

  13. Vérifiez que la version téléchargée de Terraform est la première dans le chemin.

    terraform version
    

4. Vérifier l’abonnement Azure par défaut

Quand vous vous connectez au portail Azure avec un compte Microsoft, l’abonnement Azure par défaut de ce compte est utilisé.

Terraform s’authentifie automatiquement à l’aide des informations issues de l’abonnement Azure par défaut.

Exécutez az account show pour vérifier le compte Microsoft et l’abonnement Azure actifs.

az account show

Toutes les modifications que vous apportez via Terraform se trouvent sur l’abonnement Azure affiché. Si c’est ce que vous voulez, ignorez le reste de cet article.

5. Authentifier Terraform auprès d’Azure

Scénarios d’authentification Terraform et Azure

Terraform prend uniquement en charge l’authentification sur Azure par le biais d’Azure CLI. L’authentification à l’aide d’Azure PowerShell n’est pas prise en charge. Ainsi, même si vous pouvez utiliser le module Azure PowerShell avec Terraform, vous devez d’abord vous authentifier auprès d’Azure en utilisant Azure CLI.

Cet article explique comment authentifier Terraform auprès d’Azure pour les scénarios suivants. Pour plus d’informations sur les options d’authentification de Terraform auprès d’Azure, consultez Authentification à l’aide d’Azure CLI.

S’authentifier auprès d’Azure par le biais d’un compte Microsoft

Un compte Microsoft est un nom d’utilisateur (associé à une adresse e-mail et ses informations d’identification) utilisé pour se connecter aux services Microsoft, comme Azure. Un compte Microsoft peut être associé à un ou plusieurs abonnements Azure, l’un d’entre eux étant celui par défaut.

Les étapes suivantes vous montrent comment :

  • Se connecter à Azure de manière interactive avec un compte Microsoft
  • Répertorier les abonnements Azure associés au compte (y compris la valeur par défaut)
  • Définissez l'abonnement actif.
  1. Ouvrez une ligne de commande qui a accès à Azure CLI.

  2. Exécutez az login sans aucun paramètre et suivez les instructions pour vous connecter à Azure.

    az login
    

    Points essentiels :

    • Une fois la connexion établie, az login affiche la liste des abonnements Azure associés au compte Microsoft connecté, y compris l’abonnement par défaut.
  3. Pour confirmer l’abonnement Azure actuel, exécutez az account show.

    az account show
    
  4. Pour voir tous les noms et ID d’abonnement Azure d’un compte Microsoft spécifique, exécutez az account list.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Points essentiels :

    • Remplacez l’espace réservé <microsoft_account_email> par l’adresse e-mail du compte Microsoft dont vous voulez lister les abonnements Azure.
    • Avec un compte Live (comme Hotmail ou Outlook), vous aurez peut-être besoin de spécifier l’adresse e-mail complète. Par exemple, si votre adresse e-mail est admin@hotmail.com, vous aurez peut-être besoin de remplacer l’espace réservé par live.com#admin@hotmail.com.
  5. Pour utiliser un abonnement Azure spécifique, exécutez az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Points essentiels :

    • Remplacez l’espace réservé <subscription_id_or_subscription_name> par l’ID (ou le nom) de l’abonnement que vous voulez utiliser.
    • L’appel de az account set n’affiche pas les résultats du basculement vers l’abonnement Azure spécifié. Toutefois, vous pouvez utiliser az account show pour confirmer que l’abonnement Azure actuel a changé.
    • Si vous exécutez la commande az account list de l’étape précédente, vous pouvez voir que l’abonnement Azure par défaut a été remplacé par l’abonnement que vous avez spécifié avec az account set.

Créer un principal du service

Les outils automatisés qui déploient ou utilisent des services Azure, tels que Terraform, doivent toujours avoir des autorisations restreintes. Au lieu que les applications se connectent en tant qu’utilisateur entièrement privilégié, Azure propose des principaux de service.

La procédure la plus courante consiste à se connecter de manière interactive à Azure, à créer un principal de service, à tester ce principal de service, puis à l’utiliser à des fins d’authentification ultérieure (soit de manière interactive, soit à partir de vos scripts).

  1. Pour créer un principal de service, connectez-vous à Azure. Après vous être authentifié auprès d’Azure par le biais d’un compte Microsoft, revenez ici.

  2. Si vous créez un principal de service à partir de Git Bash, définissez la variable d’environnement MSYS_NO_PATHCONV. (Cette étape n’est pas nécessaire si vous utilisez Cloud Shell.)

    export MSYS_NO_PATHCONV=1    
    

    Points essentiels :

    • Vous pouvez définir la variable d’environnement MSYS_NO_PATHCONV globalement (pour toutes les sessions de terminal) ou localement (uniquement pour la session active). Puisque la création d’un principal de service n’est pas une opération fréquente, l’exemple définit la valeur pour la session active. Pour définir cette variable d’environnement globalement, ajoutez le paramètre au fichier ~/.bashrc.
  3. Pour créer un principal de service, exécutez az ad sp create-for-rbac.

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Points essentiels :

    • Vous pouvez remplacer <service-principal-name> par un nom personnalisé pour votre environnement ou omettre complètement le paramètre. Si vous omettez le paramètre, le nom du principal de service est généré en fonction de la date et de l’heure actuelles.
    • À la fin de l’opération, az ad sp create-for-rbac affiche plusieurs valeurs. Les valeurs appId, password et tenant sont utilisées à l’étape suivante.
    • Le mot de passe ne peut pas être récupéré en cas de perte. Par conséquent, vous devez conserver votre mot de passe en lieu sûr. Si vous oubliez votre mot de passe, vous pouvez réinitialiser les informations d’identification du principal de service.
    • Pour cet article, un principal de service doté d’un rôle Contributeur est utilisé. Pour plus d’informations sur les rôles de contrôle d’accès en fonction du rôle, consultez RBAC : rôles intégrés.
    • La sortie de la création du principal de service comprend des informations d’identification sensibles. Veillez à ne pas inclure ces informations d’identification dans votre code ou vérifiez les informations d’identification dans votre contrôle de code source.
    • Pour plus d’informations sur les options lors de la création d’un principal de service avec Azure CLI, consultez l’article Créer un principal de service Azure avec Azure CLI.

Spécifier les informations d’identification du principal de service dans des variables d’environnement

Une fois que vous avez créé un principal de service, vous pouvez spécifier ses informations d’identification pour Terraform par le biais de variables d’environnement.

  1. Modifiez le fichier ~/.bashrc en ajoutant les variables d’environnement suivantes.

    export ARM_SUBSCRIPTION_ID="<azure_subscription_id>"
    export ARM_TENANT_ID="<azure_subscription_tenant_id>"
    export ARM_CLIENT_ID="<service_principal_appid>"
    export ARM_CLIENT_SECRET="<service_principal_password>"
    
  2. Pour exécuter le script ~/.bashrc, exécutez source ~/.bashrc (ou son équivalent abrégé . ~/.bashrc). Vous pouvez aussi quitter et rouvrir Cloud Shell pour que le script s’exécute automatiquement.

    . ~/.bashrc
    
  3. Une fois les variables d’environnement définies, vous pouvez vérifier leurs valeurs comme suit :

    printenv | grep ^ARM*
    

Points essentiels :

  • Comme pour toute variable d’environnement, pour accéder à une valeur d’abonnement Azure à partir d’un script Terraform, utilisez la syntaxe suivante : ${env.<environment_variable>}. Par exemple, pour accéder à la valeur ARM_SUBSCRIPTION_ID, spécifiez ${env.ARM_SUBSCRIPTION_ID}.
  • La création et l’application de plans d’exécution Terraform apportent des modifications à l’abonnement Azure associé au principal de service. Cela peut parfois prêter à confusion si vous êtes connecté à un abonnement Azure et que les variables d’environnement pointent vers un autre abonnement Azure. Examinons l’exemple suivant pour mieux comprendre. Supposons que vous avez deux abonnements Azure : AboA et AboB. Si l’abonnement Azure actif est AboA (déterminé par le biais de la commande az account show) alors que les variables d’environnement pointent vers AboB, toutes les modifications apportées par Terraform le sont sur AboB. Vous avez donc besoin de vous connecter à votre abonnement AboB pour exécuter des commandes Azure CLI ou Azure PowerShell afin de voir vos modifications.

Spécifier les informations d’identification du principal de service dans un bloc provider Terraform

Le bloc provider Azure définit la syntaxe qui vous permet de spécifier les informations d’authentification de votre abonnement Azure.

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

provider "azurerm" {
  features {}

  subscription_id   = "<azure_subscription_id>"
  tenant_id         = "<azure_subscription_tenant_id>"
  client_id         = "<service_principal_appid>"
  client_secret     = "<service_principal_password>"
}

# Your code goes here

Attention

La possibilité de spécifier les informations d’identification de votre abonnement Azure dans un fichier de configuration Terraform peut s’avérer pratique, notamment dans le cadre de tests. Toutefois, il n’est pas recommandé de stocker des informations d’identification dans un fichier en texte clair, celui-ci pouvant être lu par des personnes non approuvées.

Résoudre les problèmes liés à Terraform sur Azure

Résoudre les problèmes courants liés à l’utilisation de Terraform sur Azure

Étapes suivantes