En tant que professionnel du logiciel gérant l'infrastructure en tant que code (IaC), il y a de fortes chances que vous travailliez beaucoup avec
Il est important de noter que vous pouvez stocker ce fichier d'état sur un compartiment S3 et utiliser DynamoDB pour gérer l'état de verrouillage. Cependant, cette approche vous obligera à créer des ressources supplémentaires, ce qui en fait une option compliquée, surtout si le client utilise GitLab. GitLab a récemment abaissé la barrière d'entrée à l'intégration de Terraform en fournissant un moyen de stocker et de gérer l'état de Terraform, ainsi qu'un moyen simple de configurer un CI autour de celui-ci.
Dans cet article de blog, nous expliquerons ce qu'est un fichier d'état Terraform, comment le migrer vers GitLab et configurer un pipeline CI pour celui-ci. Vous pouvez visiter notre dépôt
Terraform enregistre toute information sur l'infrastructure définie dans votre code via un fichier d'état. Écrit en JSON, il enregistre essentiellement un mappage du code Terraform aux ressources réelles créées. Vous trouverez ci-dessous un exemple de ce à quoi ressemblerait un terraform.tfstate.
Principalement, chaque fois que vous exécutez Terraform, il récupère le dernier état de son instance EC2 et le compare à votre configuration Terraform pour déterminer les modifications à appliquer.
{ "version": 4, "terraform_version": "0.12.0", "serial": 1, "lineage": "1f2087f9-4b3c-1b66-65db-8b78faafc6fb", "outputs": {}, "resources": [ { "mode": "managed", "type": "aws_instance", "name": "example", "provider": "provider.aws", "instances": [ { "schema_version": 1, "attributes": { "ami": "ami-0c55b159cbfafe1f0", "availability_zone": "us-west-2a", "id": "i-00a123a0accffffff", "instance_state": "running", "instance_type": "t2.micro", "(...)": "(truncated)" } } ] } ] }
Par défaut, ce terraform.tfstate est stocké localement là où vous avez vos fichiers Terraform, planifiez et appliquez vos modifications. Pour un projet personnel où vous n'exécutez que quelques tests, c'est bien mais pas la méthode recommandée, voici pourquoi :
Terraform étant considéré comme la norme en matière de provisionnement d'infrastructure cloud, cela fait environ un an que GitLab a commencé à offrir un moyen de stocker et de gérer votre état Terraform. Pour cette raison, nous voulions partager le processus de migration avec vous car nous avons récemment commencé à utiliser GitLab pour gérer notre IaC.
Pour cet article, nous supposons que vous utilisez un état local et que votre état est géré avec un compartiment AWS S3 ou une autre solution backend.
Tout d'abord, vous devrez modifier votre backend.tf pour utiliser HTTP.
terraform { backend "http" {} }
Ensuite, vous devrez paramétrer 4 variables dans votre terminal :
__ __
PROJECT_ID="28450092" TF_USERNAME="florianpialoux" TF_PASSWORD="123456789" TF_ADDRESS="https://gitlab.com/api/v4/projects/${PROJECT_ID}/terraform/state/aws-buckets"
Vous pouvez maintenant exécuter la commande de migration qui déplacera votre état Terraform de son emplacement précédent vers GitLab avec la commande suivante :
terraform init \ -migrate-state \ -backend-config=address=${TF_ADDRESS} \ -backend-config=lock_address=${TF_ADDRESS}/lock \ -backend-config=unlock_address=${TF_ADDRESS}/lock \ -backend-config=username=${TF_USERNAME} \ -backend-config=password=${TF_PASSWORD} \ -backend-config=lock_method=POST \ -backend-config=unlock_method=DELETE \ -backend-config=retry_wait_min=5
Vous devrez fournir une confirmation par un "oui" pour que GitLab puisse commencer à gérer votre fichier d'état. Voici un exemple d'un état local vers GitLab :
__ __
Exemple s3 vers GitLab
__ __
Vous pouvez maintenant accéder à Infrastructure > Terraform à partir de l'interface GitLab et voir votre état :
__ __
J'ai remarqué que certains des fichiers d'état que j'avais de s3 seront vides même après avoir utilisé la commande migrate-state exécutée précédemment, dans ce cas, vous pouvez exécuter ceci :
terraform state pull > aws-buckets.json
Copiez et collez le contenu de l'état s3 et exécutez un push :
terraform state push -lock=true aws-buckets.json
GitLab prend en charge la gestion des versions de votre fichier d'état Terraform, mais l'affichage/la restauration d'anciennes versions via l'interface utilisateur Web vous obligera à utiliser un
GitLab fournit
Une fois la tâche d'application terraform exécutée, vous pourrez voir quand l'état a été utilisé et avec quel pipeline.
__ __
En savoir plus sur ce à quoi ressemble notre gitlab-ci.yml
__ __
Comme vous l'avez peut-être remarqué, en regardant notre gitlab-ci.yaml, nous avons ajouté
L'exécution de votre état Terraform et de votre CI sur Gitlab est un excellent moyen de suivre les meilleures pratiques GitOps. Ils forment tous deux une excellente combinaison pour développer et déployer IaC. Étant donné que la plupart d'entre vous utilisent peut-être déjà GitLab pour vos référentiels, il devient beaucoup plus simple d'avoir votre IaC sous un même toit et de laisser GitLab gérer votre état Terraform en prenant en charge le chiffrement en transit et au repos, ainsi que la gestion des versions, le verrouillage et le déverrouillage du État.
Également publié ici .