Je commence tout juste à utiliser terraform et j'aimerais pouvoir utiliser AWS S3 comme backend pour stocker l'état de mes projets.
terraform {
backend "s3" {
bucket = "tfstate"
key = "app-state"
region = "us-east-1"
}
}
Je pense qu'il est judicieux de configurer mon seau S3, les groupes IAM et les politiques pour l'infrastructure de stockage dorsale avec terraform également.
Si je configure l'état de mon backend avant d'appliquer l'infrastructure initiale de terraform, il se plaint raisonnablement que le bucket du backend n'est pas encore créé. Ma question est donc la suivante : comment puis-je configurer mon backend terraform avec terraform, tout en conservant l'état du backend suivi par terraform ? Cela ressemble à un problème de poupées gigognes.
J'ai quelques idées sur la façon de script autour de cela, par exemple, en vérifiant si le seau existe ou si un certain état a été défini, puis en démarrant terraform et enfin en copiant le tfstate terraform vers s3 à partir du système de fichiers local après la première exécution. Mais avant de m'engager dans cette voie laborieuse, je voulais m'assurer que je ne manquais pas quelque chose d'évident.
3 votes
C'est une bonne question. Pour information, nous avions un projet séparé de TF "bootstrap", qui reposait à son tour sur un bucket super-minimal approvisionné manuellement.
1 votes
Oui, j'ai fait quelque chose de similaire où un projet bootstrap copie à travers un tas d'aides scripts et de configurations de fournisseurs pour un projet et crée également un bucket S3 versionné et une table de verrouillage DynamoDb s'il n'existe pas en utilisant le CLI AWS. Ce serait bien si nous pouvions faire cela dans Terraform, mais lorsque j'ai essayé, c'était trop compliqué pour en valoir la peine.
2 votes
Terragrunt peut également s'en charger pour vous, ce qui est très pratique si vous souhaitez passer à un autre seau. github.com/gruntwork-io/terragrunt
7 votes
Y a-t-il une meilleure façon de faire cela en 2020 ? J'ai vu des suggestions d'utiliser un état local pour la création de s3 dans un dossier différent. Je ne pense pas que ce soit la bonne approche pour un plan CD. Quelqu'un a-t-il trouvé une meilleure solution ?
0 votes
J'ai utilisé la même solution que vous avez suggérée, j'ai un petit projet que j'utilise pour gérer l'état à distance que vous pouvez voir ici : github.com/tomarv2/tfremote