Atlantis automatise terraform plan et terraform apply directement depuis les commentaires d’une pull request, mais son verrouillage de répertoire est souvent confondu avec le lock d’état Terraform déjà documenté : ce sont deux mécanismes indépendants, chacun protégeant contre un scénario de concurrence différent.
Ce qu’Atlantis verrouille réellement
Quand une pull request déclenche un terraform plan sur un répertoire donné, Atlantis pose un verrou applicatif sur ce répertoire (et cette combinaison de workspace), empêchant qu’une seconde pull request touchant le même répertoire ne lance son propre plan ou apply tant que la première n’est pas mergée ou fermée.
# Une seconde PR touchant le même répertoire Terraform
# reçoit ce message tant que la première PR reste ouverte
This project is currently locked by an unapplied plan from pull #42
Ce verrou existe au niveau d’Atlantis lui-même, dans sa propre base de données interne, entièrement indépendant de tout mécanisme Terraform natif.
Ce que le lock d’état Terraform verrouille, séparément
Le lock d’état Terraform (géré par le backend distant, DynamoDB pour S3, ou nativement pour d’autres backends) empêche deux exécutions simultanées de terraform apply d’écrire en même temps dans le même fichier d’état, indépendamment de la façon dont ces exécutions ont été déclenchées, qu’elles passent par Atlantis, un pipeline CI classique, ou un terraform apply lancé manuellement en local.
Pourquoi la distinction compte
Un opérateur qui contourne le verrou de PR Atlantis (en lançant terraform apply manuellement en local pendant qu’une PR reste ouverte, par exemple) ne contourne pas pour autant le lock d’état Terraform : ce second verrou continue de s’appliquer, indépendamment d’Atlantis, protégeant l’état contre une corruption d’écriture concurrente même quand le premier verrou a été ignoré. À l’inverse, désactiver ou mal configurer le lock d’état Terraform ne désactive en rien le verrou de PR d’Atlantis, qui continue de bloquer une seconde pull request sur le même répertoire tant que la première reste ouverte.
À retenir
Atlantis verrouille un répertoire au niveau de la pull request, empêchant deux PR concurrentes de planifier ou d’appliquer sur le même répertoire Terraform, un mécanisme géré entièrement dans la base de données interne d’Atlantis. Le lock d’état Terraform protège séparément contre l’écriture concurrente dans le fichier d’état lui-même, indépendamment de la façon dont l’exécution a été déclenchée. Contourner l’un des deux verrous ne désactive jamais l’autre : les deux mécanismes protègent contre des scénarios de concurrence distincts et fonctionnent indépendamment l’un de l’autre.