L’auteur a sélectionné le Fonds pour le Logiciel Libre et Open Source pour recevoir une donation dans le cadre du programme Écrire pour les Dons.
Introduction
Quand plusieurs personnes travaillent simultanément sur le même projet Terraform depuis différents endroits, il est important de gérer correctement le code d’infrastructure et l’état du projet pour éviter les erreurs d’écrasement. La solution consiste à stocker l’état à distance au lieu de localement. Un système distant est disponible pour tous les membres de votre équipe, et il est possible pour eux de verrouiller l’état pendant qu’ils travaillent.
Un tel backend distant est pg
, qui stocke l’état dans une base de données PostgreSQL. Au cours de ce tutoriel, vous l’utiliserez avec une Base de Données Gérée par DigitalOcean pour garantir la disponibilité des données.
Terraform prend également en charge l’offre cloud officielle et gérée par Hashicorp appelée Terraform Cloud—une application propriétaire qui synchronise le travail de votre équipe en un seul endroit et offre une interface utilisateur pour la configuration et la gestion.
Dans ce tutoriel, vous allez créer une organisation dans Terraform Cloud à laquelle vous connecterez votre projet. Vous utiliserez ensuite votre organisation pour configurer des espaces de travail et des ressources. Vous stockerez votre état dans le cloud géré afin qu’il soit toujours disponible. Vous configurerez également le backend pg
avec une base de données PostgreSQL gérée associée.
Prérequis
- A DigitalOcean Personal Access Token, which you can create via the DigitalOcean Control Panel. You can find instructions in the DigitalOcean product documents, How to Create a Personal Access Token.
- Terraform installé sur votre machine locale. Complétez l’étape 1 du tutoriel Comment utiliser Terraform avec DigitalOcean.
- Si vous souhaitez utiliser un backend
pg
, vous aurez besoin d’un cluster de base de données PostgreSQL géré créé et accessible. Pour plus d’informations, consultez le guide de démarrage rapide. Vous pouvez utiliser une base de données distincte pour ce tutoriel. - Si vous souhaitez utiliser le cloud géré de Hashicorp, vous aurez besoin d’un compte avec Terraform Cloud. Vous pouvez en créer un sur leur page d’inscription.
Remarque : Nous avons spécifiquement testé ce tutoriel en utilisant Terraform 1.1.3
.
Stockage de l’état dans une base de données PostgreSQL gérée
Dans cette section, vous allez configurer un projet qui déploie un Droplet et stocke l’état dans une base de données PostgreSQL gérée par DigitalOcean en utilisant le fournisseur pg
. Ce fournisseur prend en charge le verrouillage de l’état, de sorte que l’état ne soit jamais écrasé par deux ou plusieurs modifications se produisant simultanément.
Commencez par créer un répertoire nommé terraform-team-pg
dans lequel vous stockerez le projet :
Naviguez jusqu’à ce répertoire :
Vous définirez d’abord le fournisseur, puis passerez la chaîne de connexion pour la base de données et le module digitalocean
. Créez et ouvrez provider.tf
pour l’édition :
Ajoutez les lignes suivantes :
Ici, vous avez besoin du fournisseur digitalocean
et vous définissez le backend pg
, qui accepte une chaîne de connexion. Ensuite, vous définissez la variable do_token
et la passez à l’instance du fournisseur digitalocean
.
N’oubliez pas de remplacer votre_chaîne_de_connexion_bd
par la chaîne de connexion pour votre base de données gérée à partir de votre Panneau de contrôle DigitalOcean, que vous pouvez trouver en appuyant sur Actions, en sélectionnant Détails de connexion, et en choisissant Chaîne de connexion dans le menu déroulant. Ensuite, enregistrez et fermez le fichier
Avertissement : Pour continuer, dans les Paramètres de votre base de données, assurez-vous d’avoir l’adresse IP de la machine à partir de laquelle vous exécutez Terraform sur une liste blanche.
Initialisez le projet en exécutant :
La sortie sera similaire à ce qui suit :
OutputInitializing the backend...
Successfully configured the backend "pg"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.16.0...
- Installed digitalocean/digitalocean v2.16.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
...
Terraform a réussi à initialiser le backend, ce qui signifie qu’il s’est connecté à la base de données.
Ensuite, définissez le Droplet dans un fichier appelé droplets.tf
. Créez-le et ouvrez-le pour le modifier en exécutant :
Ajoutez les lignes suivantes :
Ce code déploiera un Droplet appelé web-1
dans la région fra1
, exécutant Ubuntu 20.04 sur 1 Go de RAM et un cœur de CPU. C’est tout ce que vous devez définir, donc enregistrez et fermez le fichier.
Vous aurez besoin de votre jeton DigitalOcean dans une variable d’environnement. Créez-en un, en remplaçant votre_token_do
par votre jeton :
Pour vérifier que la connexion à la base de données fonctionne, essayez de planifier la configuration :
La sortie sera similaire à ce qui suit :
Terraform n’a signalé aucune erreur et a planifié les actions comme d’habitude. Il s’est connecté avec succès à votre base de données PostgreSQL et a stocké son état. Plusieurs personnes peuvent maintenant travailler simultanément sur ce projet tout en restant synchronisées.
Stockage de l’état dans Terraform Cloud
Dans cette étape, vous allez créer un projet qui déploie un Droplet et utilise Terraform Cloud comme backend avec le fournisseur cloud
. Cela implique de créer l’organisation et l’espace de travail dans Terraform Cloud, d’écrire le code d’infrastructure et de le planifier.
Création d’une Organisation
Terraform Cloud vous permet d’avoir plusieurs organisations, qui abritent vos espaces de travail et modules. Les organisations de plan payant peuvent avoir plusieurs équipes avec des fonctionnalités de contrôle des niveaux d’accès, tandis que le plan gratuit que vous utiliserez ne fournit qu’une seule équipe par organisation. Vous pouvez inviter des membres d’équipe à rejoindre l’organisation.
Commencez par vous rendre sur Terraform Cloud et connectez-vous. Si vous n’avez pas encore créé d’organisation, il vous demandera de le faire.
Entrez un nom d’organisation de votre choix et souvenez-vous qu’il doit être unique parmi tous les noms dans Terraform Cloud. Vous recevrez une erreur si le nom existe déjà. L’adresse e-mail devrait déjà être remplie avec l’adresse de votre compte. Une fois que vous avez terminé, cliquez sur le bouton Créer une organisation pour continuer.
Il vous demandera ensuite de sélectionner le type d’espace de travail.
Étant donné que vous interagirez avec Terraform Cloud en utilisant la ligne de commande, cliquez sur l’option Workflow piloté par CLI. Ensuite, saisissez un nom pour votre espace de travail et laissez la description vide.
Saisissez un nom d’espace de travail de votre choix (nous l’appellerons sammy
), puis cliquez sur Créer un espace de travail pour finaliser le processus de création de l’organisation. Il vous dirigera ensuite vers une page de paramètres d’espace de travail.
Vous avez maintenant créé votre espace de travail, qui fait partie de votre organisation. Comme vous venez de le créer, votre espace de travail ne contient aucun code d’infrastructure. Au centre de l’interface, Terraform Cloud vous donne des instructions de démarrage pour vous connecter à cet espace de travail.
Avant de vous y connecter, vous devrez configurer la version de Terraform que le cloud utilisera pour exécuter vos commandes. Pour le faire, cliquez sur le menu déroulant Paramètres à côté de Aperçu et sélectionnez Général dans la liste. Lorsque la page s’ouvre, accédez au menu déroulant Version Terraform et sélectionnez 1.1.3
(pour ce tutoriel).
Ensuite, cliquez sur le bouton Enregistrer les paramètres pour sauvegarder les modifications.
Pour connecter votre projet à votre organisation et à votre espace de travail, vous devrez d’abord vous connecter à l’aide de la ligne de commande. Avant d’exécuter la commande, accédez à la page des jetons pour créer un nouveau jeton d’accès pour votre serveur, qui fournira l’accès à votre compte. Vous recevrez une invitation à créer un jeton API.
La description par défaut est bonne, donc cliquez sur Créer un jeton API pour le créer.
Cliquez sur la valeur du jeton, ou sur l’icône après celle-ci, pour copier le jeton API. Vous utiliserez ce jeton pour connecter votre projet à votre compte Terraform Cloud.
Dans la ligne de commande, exécutez la commande suivante pour vous connecter:
Vous recevrez la sortie suivante:
OutputTerraform will request an API token for app.terraform.io using your browser.
If login is successful, Terraform will store the token in plain text in
the following file for use by subsequent commands:
/home/sammy/.terraform.d/credentials.tfrc.json
Do you want to proceed?
Only 'yes' will be accepted to confirm.
...
Terraform vous avertit que le jeton sera stocké localement. Entrez oui
lorsqu’il vous le demande:
Output---------------------------------------------------------------------------------
Open the following URL to access the tokens page for app.terraform.io:
https://app.terraform.io/app/settings/tokens?source=terraform-login
---------------------------------------------------------------------------------
Generate a token using your browser, and copy-paste it into this prompt.
Terraform will store the token in plain text in the following file
for use by subsequent commands:
/home/sammy/.terraform.d/credentials.tfrc.json
Token for app.terraform.io:
Enter a value:
Collez le jeton que vous avez copié et confirmez avec ENTRÉE
. Terraform affichera un message de succès:
Output...
-
----- -
--------- --
--------- - -----
--------- ------ -------
------- --------- ----------
---- ---------- ----------
-- ---------- ----------
Welcome to Terraform Cloud! - ---------- -------
--- ----- ---
Documentation: terraform.io/docs/cloud -------- -
----------
----------
---------
-----
-
New to TFC? Follow these steps to instantly apply an example configuration:
$ git clone https://github.com/hashicorp/tfc-getting-started.git
$ cd tfc-getting-started
$ scripts/setup.sh
Vous avez configuré votre installation locale de Terraform pour accéder à votre compte Terraform Cloud. Vous allez maintenant créer un projet qui déploie un Droplet et le configurer pour utiliser Terraform Cloud pour stocker son état.
Configuration du projet
Tout d’abord, créez un répertoire nommé terraform-team-cloud
où vous stockerez le projet :
Naviguez jusqu’à celui-ci :
Pour configurer votre projet, vous devrez :
- définir et configurer le fournisseur
cloud
, qui interagit avec Terraform Cloud. - exiger que le fournisseur
digitalocean
soit capable de déployer des ressources DigitalOcean. - définir et initialiser les variables que vous utiliserez.
Vous stockerez les spécifications des exigences en fournisseurs et en modules dans un fichier nommé provider.tf
. Créez-le et ouvrez-le pour l’édition en exécutant :
Ajoutez les lignes suivantes :
Ici, vous spécifiez d’abord votre version Terraform. Ensuite, vous spécifiez le fournisseur digitalocean
comme requis et définissez le backend sur cloud
. Pour organization
et workspaces.name
, remplacez les valeurs surlignées par les noms que vous avez spécifiés.
Ensuite, vous définissez une variable appelée do_token
, que vous transmettez au fournisseur digitalocean
créé après lui. Vous avez maintenant configuré votre projet pour qu’il se connecte à votre organisation, alors enregistrez et fermez le fichier.
Initialisez votre projet avec la commande suivante :
La sortie sera similaire à ceci :
OutputInitializing Terraform Cloud...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.18.0...
- Installed digitalocean/digitalocean v2.18.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform Cloud has been successfully initialized!
...
Étant donné que la définition de Droplet est la même que dans le projet précédent, vous pouvez la copier en exécutant :
Enfin, vous définirez les valeurs des variables. Le fournisseur cloud
ne prend pas en charge le passage de valeurs aux variables via la ligne de commande, vous devrez donc les passer en utilisant des fichiers de variables ou les définir dans Terraform Cloud. Terraform lit les valeurs des variables à partir de fichiers portant un nom se terminant par .auto.tfvars
. Créez et ouvrez un fichier appelé vars.auto.tfvars
pour l’édition, dans lequel vous définirez la variable do_token
:
Ajoutez la ligne suivante, en remplaçant votre_token_do
par votre jeton d’API DigitalOcean :
Lorsque vous avez terminé, enregistrez et fermez le fichier. Terraform lira automatiquement ce fichier lors de la planification des actions.
Votre projet est maintenant complet et configuré pour utiliser Terraform Cloud comme backend. Vous allez maintenant planifier et appliquer le Droplet et examiner comment cela se reflète dans l’application Cloud.
Application de la Configuration
Dans l’étape 1 de ce tutoriel, vous avez planifié un projet en utilisant la commande terraform plan
. Étant donné que le projet Terraform Cloud a les mêmes ressources définies, vous pouvez éviter de le planifier à nouveau et l’appliquer directement à Terraform Cloud.
Vous appliquez le projet en exécutant la commande suivante pour le mettre à jour :
Vous remarquerez que la sortie est différente lorsque vous utilisez local
comme backend :
Lorsque vous utilisez le backend cloud
, Terraform ne planifie pas ou n’applique pas la configuration depuis la machine locale. Au lieu de cela, il délègue ces tâches à Terraform Cloud et ne diffuse que la sortie sur la console en temps réel.
Entrez yes
lorsque vous y êtes invité. Terraform terminera bientôt l’application de la configuration, et vous pourrez naviguer vers l’espace de travail sur le site web de Terraform Cloud pour constater qu’une nouvelle action a été appliquée.
Vous pouvez maintenant détruire les ressources déployées en exécutant la commande suivante :
Dans cette section, vous avez connecté votre projet à Terraform Cloud, rendant l’état de votre projet accessible à votre équipe dans un endroit centralisé. Cela permet de partager et de synchroniser l’état pour tous ceux qui ont accès au projet, ce qui améliore l’expérience.
Conclusion
Dans ce tutoriel, vous avez utilisé deux backends différents : Terraform Cloud, qui est l’offre cloud gérée par Hashicorp pour Terraform ; et pg
, qui vous permet de stocker l’état du projet dans une base de données PostgreSQL. Vous avez utilisé une base de données PostgreSQL gérée par DigitalOcean, que vous pouvez provisionner et utiliser avec Terraform en quelques minutes.
Pour plus d’informations sur les fonctionnalités de Terraform Cloud, visitez la documentation officielle.
Ce tutoriel fait partie de la série Comment gérer l’infrastructure avec Terraform. La série couvre plusieurs sujets Terraform, de l’installation de Terraform pour la première fois à la gestion de projets complexes.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-terraform-within-your-team