Terraform - stocker l'état dans un Storage Account Azure
Par défaut, Terraform stock son état dans un fichier plat à la racine du projet. Si c’est la meilleure méthode dans le cas d’une infrastructure éphémère, ça l’est moins dans un cas de production.
Stocker son état dans un objet accessible depuis n’importe où à plusieurs avantages :
- Accès depuis n’importe quel réseau, n’importe quel poste
- Utilisation par tous les membres d’une équipe
- Résilience
Dans cet exemple nous allons stocker l’état dans un Storage Account Azure.
Définition des variables d’environnement
Afin de faciliter le processus et d’éviter les erreurs de frappes, nous allons exporte nos informations dans des variables d’environnement (mettez ce que vous voulez).
export AZ_RESOURCEGROUP=terraformStatesRG
export AZ_LOCATION=westeurope
export AZ_STORAGEACCOUNT=terraformState
export AZ_BLOBCONTAINER=myterraformcontainer
Création du Storage Account Azure
Avant toutes choses nous allons créer le groupe de ressource qui accueillera notre Storage Account
az group create --name $AZ_RESOURCEGROUP --location $AZ_LOCATION
Nous allons maintenant créer le storage account
az storage account create \
--name $AZ_STORAGEACCOUNT \
--resource-group $AZ_RESOURCEGROUP \
--location $AZ_LOCATION \
--sku Standard_RAGRS \
--kind StorageV2
Il ne reste plus qu’à créer le container
az storage container create --name $AZ_BLOBCONTAINER
Configurer Terraform pour utiliser le storage Account plutôt qu’une fichier JSON
Configuration du backend
Dans votre script terraform, insérez le code suivant:
terraform {
required_version = "~> 0.12"
backend "azurerm" {
storage_account_name = "terraformState"
container_name = "myterraformcontainer"
key = "myterraformexample.tfstate"
}
}
Initialisation de terraform
Afin d’autoriser Terraform à accéder au Storage Account nous allons exporter la “secretKey” du Storage Account dans une variable d’environnement pour l’utiliser ultérieurement
export AZ_CONTAINERSECRETKEY=$(az storage account keys list \
-g $AZ_RESOURCEGROUP \
-n $AZ_STORAGEACCOUNT \
--query "[0].{value:value}" --output tsv)
Puis initialiser Terraform avec cette clé
terraform init --backend-config="secretkey=$AZ_CONTAINERSECRETKEY"
vous pouvez renseigner directement les paramètres storage_account_name, container_name et key dans la commande
terraform init
en utilisant--backend-config
comme nous l’avons fait pour SecretKey
Déploiement de l’infrastructure
Reste plus qu’a déployer votre infrastructure
terraform apply