Skip to content

Workspace et BackEnd

Un backend définit où Terraform stocke ses fichiers d'état.
Par défaut, les données d'état sont dans le fichier à la racine du module root, terraform.tfstate .

Parfois pour de raison de sécurité ou de travail collaboratif, il est nécessaire de stocker ces informations soit dans un autre dossier, soit dans un dépôt distant.

Terraform supporte un grand nombre de dépôts distant (local, remote, artifactory, azurerm, consul, cos, etcd, etcdv3, gcs, http, Kubernetes, manta, oss, pg, s3, swift). Les backends rayés ne sont plus supportés à partir de la version 1.2.3 (15 juin 2022)

Pour plus de détails sur les différents backends se référer à la doc officielle https://www.terraform.io/language/settings/backends/configuration

Backend local

Le backend local stocke l'état sur le système de fichiers local, verrouille cet état à l'aide des API système et effectue les opérations localement.

Exemple de configuration

terraform {
  backend "local" {
    path = "relative/path/to/terraform.tfstate"
  }
}

Récupération des informations d'état

data "terraform_remote_state" "foo" {
  backend = "local"

  config = {
    path = "${path.module}/../../terraform.tfstate"
  }
}

config possède deux paramètres optionnels: * path: indique le fichier tfstate * workspace_dir : indique le chemin du workspace sur lequel on travail (non par défaut)

Cette configuration peut être passé directement sur la ligne de commande -state=FILENAME, -state-out=FILENAME, -backup=FILENAME

Workspace

Chaque configuration Terraform a un backend associé qui définit comment les opérations sont exécutées et où les données persistantes telles que l'état de Terraform sont stockées.

Les données persistantes stockées dans le backend appartiennent à un espace de travail. Initialement, le backend n'a qu'un seul espace de travail, appelé "default", et il n'y a donc qu'un seul état Terraform associé à cette configuration.

Certains backends prennent en charge plusieurs espaces de travail nommés, ce qui permet d'associer plusieurs états à une seule configuration. La configuration n'a toujours qu'un seul backend, mais plusieurs instances distinctes de cette configuration à déployer sans configurer un nouveau backend ni modifier les identifiants d'authentification.

Création d'un nouveau workspace

Les espaces de travail sont gérés les commandes terraform workspace.
* terraform workspace new newworkspace: Pour créer un nouvel espace de travail et y basculer * terraform workspace select: Pour changer d'espace de travail

Dans les fichiers, ${terraform.workspace} permet de spécifier les valeurs spécifiques à un workspace.

count = "${terraform.workspace == "default" ? 5 : 1}"

le nombre d'instance de la ressource sera différent si nous sommes dans le workspace par défaut.

Le backend distant peut fonctionner soit avec un seul espace de travail Terraform Cloud distant, soit avec plusieurs espaces de travail distants portant le même nom (comme networking-dev et networking-prod). Le bloc workspaces de la configuration du backend détermine le mode utilisé :

 Pour utiliser un seul espace de travail Terraform Cloud distant, définissez workspaces.name sur le nom complet de l'espace de travail distant (comme networking-prod).

 Pour utiliser plusieurs espaces de travail distants, définissez workspaces.prefix sur un préfixe utilisé dans tous les noms d'espaces de travail distants souhaités.  Par exemple, définissez prefix = "networking-" pour utiliser les espaces de travail cloud Terraform avec des noms tels que networking-dev et networking-prod.  Ceci est utile lors du mappage de plusieurs espaces de travail Terraform CLI utilisés dans une seule configuration Terraform vers plusieurs espaces de travail Terraform Cloud.

La configuration du backend nécessite un nom ou un préfixe. Omettre les deux ou définir les deux entraîne une erreur de configuration.

Si l'état précédent est présent lorsque vous exécutez terraform init et que les espaces de travail distants correspondants sont vides ou absents, Terraform créera des espaces de travail et mettra à jour l'état distant en conséquence. Toutefois, si votre espace de travail nécessite des variables ou une version spécifique de Terraform pour les opérations à distance, nous vous recommandons de créer vos espaces de travail distants sur Terraform Cloud avant d'exécuter des opérations à distance sur eux.