Sobes.tech
Middle+

À quoi mènera le lancement simultané de deux instances de Terraform?

sobes.tech IA

Réponse de l'IA

Concernant la condition de course (race condition) et la possible corruption du fichier d’état (state file). C’est critique, car Terraform utilise le fichier d’état pour synchroniser l’infrastructure réelle avec la configuration. La corruption peut entraîner une application incorrecte des changements, des ressources en double ou leur suppression indépendamment de l’état prévu.

Pour éviter cela, une verrouillage du fichier d’état est utilisé. La plupart des backends Terraform (par exemple, S3, GCS, Artifactory) supportent un mécanisme de verrouillage. Lorsqu’une seconde instance de Terraform tente de s’exécuter pendant que la première est en cours, la seconde attend que le verrou soit libéré ou se termine avec une erreur.

Exemple de configuration de backend avec verrouillage (pour S3):

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "path/to/my/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "my-terraform-lock-table" // Utilisé pour le verrouillage
  }
}

Dans ce cas, dynamodb_table est utilisé pour implémenter un verrouillage distribué. Avant d’effectuer une opération, Terraform tente de créer un élément dans cette table, qui sert d’indicateur d’occupation du fichier d’état. Un autre processus qui tente d’accéder verra l’élément existant et ne pourra pas obtenir le verrou.

Si le verrouillage n’est pas configuré ou si un backend local sans support de verrouillage est utilisé, l’exécution simultanée peut conduire à un comportement imprévisible.

Les conséquences peuvent inclure:

  • Corruption du fichier d’état: L’écriture de données par deux processus simultanément peut conduire à un état incohérent.
  • État incorrect de l’infrastructure: Certains changements peuvent être appliqués, d’autres ignorés ou modifiés par le second processus.
  • Duplication de ressources: Terraform peut créer des ressources qu’il considère comme inexistantes parce que l’information dans le fichier d’état n’a pas encore été mise à jour.
  • Suppression de ressources: Dans de rares cas, en interprétant incorrectement l’état, Terraform peut supprimer des ressources nécessaires selon la configuration.

Pour éviter ces situations, il faut toujours utiliser un backend supportant le verrouillage et s’assurer qu’il est correctement configuré. Dans les pipelines CI/CD, cela est réalisé par la synchronisation des tâches et la garantie qu’un seul processus Terraform travaille avec un fichier d’état à la fois.