Partager via


Stocker l’état de Terraform dans le stockage Azure

Terraform active la définition, la préversion et le déploiement de l’infrastructure cloud. À l’aide de Terraform, vous créez des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier le fournisseur de 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 des modifications de votre 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.

L’état Terraform est utilisé pour réconcilier les ressources déployées avec les configurations Terraform. State permet à Terraform de savoir quelles ressources Azure ajouter, mettre à jour ou supprimer.

Par défaut, l’état Terraform est stocké localement, ce qui n’est pas idéal pour les raisons suivantes :

  • L’état local ne fonctionne pas bien dans un environnement d’équipe ou collaboratif.
  • L’état Terraform peut inclure des informations sensibles.
  • Le stockage local de l’état augmente le risque de suppression par inadvertance.

Dans cet article, vous allez apprendre à :

  • Créer un compte de stockage Azure
  • Utilisez le stockage Azure pour stocker l’état Terraform à distance.
  • Comprendre le verrouillage d’état
  • Comprendre le chiffrement au repos

1. Configurer votre environnement

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

2. Configurer le compte de stockage d’état distant

Avant d’utiliser Stockage Azure en tant que serveur principal, vous devez créer un compte de stockage.

Exécutez les commandes ou la configuration suivantes pour créer un compte de stockage Azure et un conteneur :

#!/bin/bash

RESOURCE_GROUP_NAME=tfstate
STORAGE_ACCOUNT_NAME=tfstate$RANDOM
CONTAINER_NAME=tfstate

# Create resource group
az group create --name $RESOURCE_GROUP_NAME --location eastus

# Create storage account
az storage account create --resource-group $RESOURCE_GROUP_NAME --name $STORAGE_ACCOUNT_NAME --sku Standard_LRS --encryption-services blob

# Create blob container
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME

Points clés :

  • Les comptes de stockage Azure nécessitent un nom globalement unique. Pour en savoir plus sur la résolution des problèmes liés aux noms de compte de stockage, consultez Résoudre les erreurs relatives aux noms de compte de stockage.
  • L’état Terraform est stocké en texte brut et peut contenir des secrets. Si l’état n’est pas correctement sécurisé, un accès non autorisé aux systèmes et une perte de données peuvent en résulter.
  • Dans cet exemple, Terraform s’authentifie auprès du compte de stockage Azure à l’aide d’une clé d’accès. Dans un déploiement de production, il est recommandé d’évaluer les options d’authentification disponibles prises en charge par le backend azurerm et d’utiliser l’option la plus sécurisée pour votre cas d’utilisation.
  • Dans cet exemple, l’accès au réseau public est autorisé à ce compte de stockage Azure. Dans un déploiement de production, il est recommandé de restreindre l’accès à ce compte de stockage à l’aide d’un pare-feu de stockage, d’un point de terminaison de service ou d’un point de terminaison privé.

3. Configurer l’état du backend terraform

Pour configurer l’état du backend, vous avez besoin des informations de stockage Azure suivantes :

  • storage_account_name : nom du compte de stockage Azure.
  • container_name : nom du conteneur d’objets blob.
  • key : nom du fichier de magasin d’état à créer.
  • access_key : clé d’accès du stockage.

Chacune de ces valeurs peut être spécifiée dans le fichier de configuration Terraform ou sur la ligne de commande. Nous vous recommandons d’utiliser une variable d’environnement pour la access_key valeur. L’utilisation d’une variable d’environnement empêche l’écriture de la clé sur le disque.

Exécutez les commandes suivantes pour obtenir la clé d’accès au stockage et la stocker en tant que variable d’environnement :

ACCOUNT_KEY=$(az storage account keys list --resource-group $RESOURCE_GROUP_NAME --account-name $STORAGE_ACCOUNT_NAME --query '[0].value' -o tsv)
export ARM_ACCESS_KEY=$ACCOUNT_KEY

Points clés :

  • Pour protéger davantage la clé d’accès du compte de stockage Azure, stockez-la dans Azure Key Vault. La variable d’environnement peut ensuite être définie à l’aide d’une commande similaire à la suivante. Pour plus d’informations sur Azure Key Vault, consultez la documentation Azure Key Vault.

    export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault --query value -o tsv)
    

Créez une configuration Terraform avec un bloc de backend configuration.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
  backend "azurerm" {
      resource_group_name  = "tfstate"
      storage_account_name = "<storage_account_name>"
      container_name       = "tfstate"
      key                  = "terraform.tfstate"
  }

}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "state-demo-secure" {
  name     = "state-demo"
  location = "eastus"
}

Remplacez <storage_account_name> par le nom de votre compte de stockage Azure.

Exécutez la commande suivante pour initialiser la configuration :

terraform init

Exécutez la commande suivante pour exécuter la configuration :

terraform apply

Vous pouvez maintenant trouver le fichier d’état dans l’objet blob Stockage Azure.

4. Comprendre le verrouillage d’état

Les objets blob de stockage Azure sont automatiquement verrouillés avant toute opération d’écriture de l’état. Ce modèle empêche les opérations d’état simultanées, qui peuvent entraîner une corruption.

Pour plus d’informations, consultez Verrouillage d’état dans la documentation Terraform.

Vous pouvez voir le verrou lorsque vous examinez l’objet blob via le portail Azure ou d’autres outils de gestion Azure.

Blob Azure avec verrou

5. Comprendre le chiffrement au repos

Les données stockées dans un objet blob Azure sont chiffrées avant d’être conservées. Si nécessaire, Terraform récupère l’état du backend et le stocke dans la mémoire locale. Si vous utilisez ce modèle, l’état n’est jamais écrit sur votre disque local.

Pour plus d’informations sur le chiffrement du stockage Azure, consultez Chiffrement du service de stockage Azure pour les données au repos.

Résoudre les problèmes de Terraform sur Azure

Résoudre les problèmes courants lors de l’utilisation de Terraform sur Azure

Étapes suivantes