
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Creating Resources in terraform
/ 30
Change Infrastructure
/ 20
Destructive Changes
/ 20
Create Resource Dependencies
/ 20
Create bucket dependent instance
/ 10
Nous avons développé cet atelier avec notre partenaire HashiCorp. Vos informations personnelles pourront être partagées avec HashiCorp, le sponsor de nos ateliers, si vous avez accepté de recevoir les actualités sur les produits, les annonces et les offres sur la page de profil de votre compte.
Terraform est l'outil Infrastructure as Code de HashiCorp qui permet de créer, modifier et gérer une infrastructure de manière sûre et reproductible. Les opérateurs et les équipes chargées de l'infrastructure peuvent gérer les environnements à l'aide de Terraform et d'un langage de configuration appelé HashiCorp Configuration Language (HCL) pour effectuer des déploiements automatisés dans un format intelligible.
Le processus Infrastructure as Code consiste à gérer l'infrastructure dans un ou plusieurs fichiers au lieu de configurer manuellement les ressources dans une interface utilisateur. Dans ce cas précis, une ressource correspond à tout élément d'infrastructure d'un environnement donné, tel qu'une machine virtuelle, un groupe de sécurité ou une interface réseau. Dans les grandes lignes, Terraform permet aux opérateurs d'utiliser le langage HCL pour écrire des fichiers contenant les définitions des ressources souhaitées pour presque tous les fournisseurs (AWS, Google Cloud, GitHub et Docker, par exemple) et automatise la création de ces ressources au moment d'appliquer la configuration.
Un workflow simple de déploiement se déroule en très grande partie selon la procédure ci-dessous.
terraform init
dans le répertoire du projet avec les fichiers de configuration. Cette commande permet de télécharger les plug-ins de fournisseurs appropriés pour le projet.terraform plan
pour vérifier le processus de création, puis terraform apply
pour créer les ressources réelles ainsi que le fichier d'état qui compare les modifications apportées ultérieurement à vos fichiers de configuration et ce qui existe réellement dans votre environnement de déploiement.Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.
Cet atelier pratique vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Nous vous fournissons des identifiants temporaires pour vous connecter à Google Cloud le temps de l'atelier.
Pour réaliser cet atelier :
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement. Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans la fenêtre de navigation privée si vous utilisez le navigateur Chrome).
L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.
Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
Vous trouverez également le nom d'utilisateur dans le panneau Détails concernant l'atelier.
Cliquez sur Suivant.
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
Vous trouverez également le mot de passe dans le panneau Détails concernant l'atelier.
Cliquez sur Suivant.
Accédez aux pages suivantes :
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud. Cloud Shell vous permet d'accéder via une ligne de commande à vos ressources Google Cloud.
Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Le résultat contient une ligne qui déclare YOUR_PROJECT_ID (VOTRE_ID_PROJET) pour cette session :
gcloud
est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
Cliquez sur Autoriser.
Vous devez à présent obtenir le résultat suivant :
Résultat :
Résultat :
Exemple de résultat :
gcloud
, dans Google Cloud, accédez au guide de présentation de la gcloud CLI.
Terraform est préinstallé dans Cloud Shell. Vous pouvez ainsi immédiatement commencer à créer une infrastructure.
Commencez par créer votre exemple de configuration dans un fichier nommé main.tf
. Terraform identifie les fichiers se terminant par .tf
ou .tf.json
comme des fichiers de configuration et les charge lors de son exécution.
main.tf
:Cliquez sur le bouton Ouvrir l'éditeur dans la barre d'outils de Cloud Shell. Vous pouvez passer de Cloud Shell à l'éditeur de code et vice versa en cliquant sur les icônes Ouvrir l'éditeur et Ouvrir le terminal selon le cas. Vous pouvez également cliquer sur le bouton Ouvrir dans une nouvelle fenêtre pour laisser l'éditeur ouvert dans un onglet distinct.
Dans l'éditeur, ajoutez le contenu ci-dessous au fichier main.tf
.
terraform {}
.Le bloc terraform {}
est nécessaire pour que Terraform identifie le fournisseur à télécharger à partir du registre Terraform. Dans la configuration ci-dessus, la source du fournisseur google
est définie sur hashicorp/google
qui est la forme abrégée de registry.terraform.io/hashicorp/google
.
Vous pouvez également attribuer une version à chaque fournisseur défini dans le bloc required_providers
. L'argument version
est facultatif, mais recommandé. Il permet de se limiter à une version spécifique du fournisseur ou à une plage de versions afin d'éviter de télécharger un nouveau fournisseur pouvant contenir des modifications destructives. Si la version n'est pas spécifiée, Terraform téléchargera automatiquement le fournisseur le plus récent lors de l'initialisation.
Pour en savoir plus, accédez au site Web de HashiCorp consacré à Terraform et consultez la section Provider Requirements (Exigences concernant les fournisseurs).
Le bloc provider
sert à configurer le fournisseur désigné (google
, dans ce cas). Un fournisseur est chargé de créer et de gérer les ressources. Plusieurs blocs "provider" peuvent exister si une configuration Terraform gère des ressources provenant de différents fournisseurs.
La première commande à exécuter pour une nouvelle configuration, ou après avoir récupéré une configuration existante à partir du contrôle des versions, est terraform init
. Elle initialise un certain nombre de données et de paramètres locaux qui seront utilisés par les commandes ultérieures.
terraform init
dans le répertoire contenant le fichier main.tf
:terraform apply
:Le signe +
figure à côté de la ressource "google_compute_network" "vpc_network"
dans le résultat, ce qui signifie que Terraform va la créer. Cette chaîne est suivie des attributs qui vont être définis. Si la valeur affichée est (known after apply)
, cela signifie qu'elle ne sera connue qu'une fois la ressource créée.
Si le plan a bien été créé, Terraform s'interrompt et attend votre approbation avant de poursuivre. Si un élément du plan semble incorrect ou hasardeux, vous pouvez abandonner sans risque la procédure à ce stade sans modifier votre infrastructure.
Si la commande terraform apply
échoue avec une erreur, lisez le message d'erreur et effectuez la correction requise.
yes
lorsque vous êtes invité à confirmer votre choix pour poursuivre la procédure.L'exécution du plan prend quelques minutes, car Terraform s'assure que le réseau a bien été créé :
Terraform a maintenant terminé. Vous pouvez accéder à la console Cloud pour afficher le réseau que vous avez provisionné.
terraform-network
a été provisionné.terraform show
pour inspecter l'état actuel :Vous pouvez référencer ces valeurs pour configurer d'autres ressources ou sorties, comme nous le verrons dans la suite de cet atelier.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Dans la section précédente, vous avez utilisé Terraform pour créer un réseau VPC, qui représente une infrastructure de base. Dans cette section, vous allez apporter des modifications à votre configuration afin de voir comment Terraform les gère.
L'infrastructure évolue constamment et Terraform est conçu pour vous aider à gérer et à appliquer ces modifications. À mesure que vous modifiez les configurations Terraform, l'outil crée un plan d'exécution qui ne modifie que ce qui est nécessaire pour atteindre l'état souhaité.
En utilisant Terraform pour modifier l'infrastructure, vous pouvez procéder au contrôle des versions pour les configurations ainsi que pour l'état afin de savoir comment l'infrastructure évolue au fil du temps.
Vous pouvez ajouter des ressources en les incluant dans votre configuration Terraform et en exécutant terraform apply
pour les provisionner.
main.tf
:Cette ressource inclut quelques autres arguments. Le nom et le type de machine sont des chaînes simples. En revanche, boot_disk
et network_interface
correspondent à des blocs plus complexes. Vous pouvez découvrir toutes les options disponibles dans la documentation sur google_compute_instance.
Pour cet exemple, votre instance de calcul utilisera un système d'exploitation Debian et sera connectée au réseau VPC créé précédemment. Notez que cette configuration fait référence à la propriété "name" du réseau avec google_compute_network.vpc_network.name
, où google_compute_network.vpc_network
est l'ID et correspond aux valeurs du bloc qui définit le réseau, et name
représente une propriété de cette ressource.
La présence du bloc access_config
, même sans aucun argument, garantit que l'instance sera accessible sur Internet.
terraform apply
pour créer l'instance de calcul :yes
à l'invite de confirmation.Il s'agit d'une modification assez simple : vous avez ajouté une ressource "google_compute_instance" nommée "vm_instance" à votre configuration, puis Terraform a créé cette ressource dans Google Cloud.
Terraform permet non seulement de créer des ressources, mais également de les modifier.
tags
à la ressource "vm_instance" pour qu'elle se présente comme suit :terraform apply
pour mettre à jour l'instance :~
signifie que Terraform va mettre à jour la ressource sur place. Vous pouvez appliquer cette modification maintenant en répondant yes
. Terraform ajoute alors les tags à votre instance.Cliquez sur Vérifier ma progression pour valider l'objectif.
Une modification destructive nécessite que le fournisseur remplace la ressource existante au lieu de la mettre à jour. Elle se produit généralement lorsque le fournisseur cloud ne peut pas mettre à jour la ressource de la manière décrite par votre configuration.
C'est le cas, par exemple, si vous modifiez l'image disque de votre instance.
boot_disk
dans la ressource vm_instance
de votre fichier de configuration :terraform apply
pour voir comment Terraform va appliquer cette modification aux ressources existantes :Le préfixe -/+
signifie que Terraform va détruire et recréer la ressource au lieu de la mettre à jour sur place. Certains attributs (indiqués par le préfixe ~
) peuvent être mis à jour sur place. En revanche, vous avez besoin de recréer une instance pour modifier l'image de son disque de démarrage. Terraform et le fournisseur Google Cloud gèrent ces détails pour vous. Par ailleurs, le plan d'exécution indique clairement les opérations qui vont être effectuées par Terraform.
En outre, le plan d'exécution montre que le remplacement de votre instance est dû aux modifications apportées à l'image disque. En utilisant ces informations, vous pouvez ajuster vos modifications pour éviter les mises à jour entraînant des opérations de destruction/création si elles sont inacceptables dans certains cas.
yes
pour exécuter les étapes prévues.Comme indiqué par le plan d'exécution, Terraform commence par détruire l'instance existante, puis en crée une autre à la place. Vous pouvez réutiliser terraform show
pour afficher les nouvelles valeurs associées à cette instance.
Vous savez maintenant comment créer et modifier une infrastructure. Avant de créer plusieurs ressources et afficher les dépendances associées, vous allez découvrir comment détruire complètement votre infrastructure gérée par Terraform.
La destruction d'une infrastructure est un événement rare dans les environnements de production. Toutefois, si vous utilisez Terraform pour lancer plusieurs environnements (de développement, de test et de préproduction, par exemple), la destruction est souvent une action utile.
Vous pouvez détruire les ressources en utilisant la commande terraform destroy
. Elle est semblable à terraform apply
, mais se comporte comme si toutes les ressources avaient été supprimées de la configuration.
terraform destroy
. Répondez yes
pour exécuter ce plan et détruire l'infrastructure :Le préfixe -
indique que l'instance et le réseau vont être détruits. Comme avec "apply", Terraform affiche son plan d'exécution et attend votre approbation avant d'apporter des modifications.
De la même façon que pour terraform apply
, Terraform détermine l'ordre dans lequel les éléments doivent être détruits. Google Cloud ne permet pas de supprimer un réseau VPC s'il contient des ressources. Terraform attend donc que l'instance soit détruite avant de détruire le réseau. Lors de l'exécution des opérations, Terraform crée un graphe de dépendances pour déterminer l'ordre dans lequel elles doivent être réalisées. Dans des cas plus compliqués impliquant plusieurs ressources, Terraform effectue les opérations en parallèle si cette façon de procéder ne présente aucun risque.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Dans cette section, vous allez en apprendre davantage sur les dépendances de ressources. Vous découvrirez également comment utiliser les paramètres de ressources pour partager des informations sur l'une d'elles avec d'autres ressources.
Les infrastructures réelles comportent un large éventail de ressources et de types de ressources. Les configurations Terraform peuvent inclure plusieurs ressources et types de ressources, et ces types peuvent même englober plusieurs fournisseurs.
Dans cette section, nous allons nous intéresser à un exemple de base montrant comment configurer plusieurs ressources. Nous verrons également comment utiliser les attributs de ressources pour configurer d'autres ressources.
yes
à l'invite, les ressources sont créées.main.tf
.La procédure est semblable à celle de l'exemple précédent qui vous a permis d'ajouter une ressource d'instance de VM, sauf que cette fois, vous allez créer une ressource de type "google_compute_address". Ce type de ressource attribue une adresse IP réservée à votre projet.
terraform plan
.La commande terraform plan
vous permet de voir ce qui va être créé :
Contrairement à terraform apply
, la commande plan
ne montre que ce qui va changer et n'applique jamais les modifications directement. Notez que la seule modification apportée jusqu'à présent est l'ajout d'une adresse IP statique. Ensuite, vous devez associer l'adresse IP à votre instance.
network_interface
de votre instance :Le bloc access_config
comporte plusieurs arguments facultatifs. Ici, vous allez définir nat_ip
en tant qu'adresse IP statique. Lorsque l'outil Terraform lit cette configuration, il exécute les opérations suivantes :
vm_static_ip
a été créée avant vm_instance
.vm_static_ip
dans l'état.nat_ip
sur la valeur de la propriété vm_static_ip.address
.En enregistrant le plan de cette manière, vous êtes sûr de pouvoir l'appliquer à l'identique ultérieurement. Si vous essayez d'appliquer le fichier créé par le plan, Terraform vérifie d'abord que le même ensemble de modifications va être apporté avant d'exécuter le plan.
Dans ce cas, vous constatez que Terraform va créer une ressource google_compute_address
et mettre à jour la VM existante pour qu'elle l'utilise.
terraform apply "static_ip"
pour voir comment Terraform prévoit d'appliquer cette modification :Comme indiqué ci-dessus, Terraform a créé l'adresse IP statique avant de modifier l'instance de VM. Grâce à l'expression d'interpolation qui transmet l'adresse IP à la configuration de l'interface réseau de l'instance, l'outil Terraform peut déduire une dépendance et sait qu'il doit créer l'adresse IP statique avant de mettre à jour l'instance.
Cliquez sur Vérifier ma progression pour valider l'objectif.
En étudiant les attributs de ressources utilisés dans les expressions d'interpolation, Terraform peut automatiquement déterminer quand une ressource dépend d'une autre. Dans l'exemple ci-dessus, la référence à google_compute_address.vm_static_ip.address
crée une dépendance implicite avec la ressource google_compute_address
nommée vm_static_ip
.
Terraform utilise ces informations sur les dépendances pour déterminer l'ordre dans lequel créer et mettre à jour différentes ressources. Dans l'exemple ci-dessus, Terraform sait que la ressource vm_static_ip
doit être créée avant que la ressource vm_instance
soit mise à jour pour s'en servir.
Les dépendances implicites via les expressions d'interpolation constituent le principal moyen d'informer Terraform de ces relations et doivent être utilisées autant que possible.
Dans certains cas, Terraform ne peut pas voir les dépendances entre les ressources. L'argument depends_on
peut être ajouté à n'importe quelle ressource et accepte une liste de ressources pour lesquelles des dépendances explicites peuvent être créées.
Par exemple, une application que vous allez exécuter sur votre instance peut s'attendre à utiliser un bucket Cloud Storage spécifique. Toutefois, cette dépendance est configurée dans le code de l'application et Terraform ne peut donc pas la voir. Dans ce cas, vous pouvez utiliser depends_on
pour déclarer explicitement la dépendance.
main.tf
:UNIQUE-BUCKET-NAME
par un nom unique et valide pour un bucket. Nous vous recommandons d'utiliser votre nom et la date. Il s'agit généralement d'un bon moyen d'attribuer un nom de bucket unique.
Vous vous demandez peut-être où ces ressources doivent être placées dans votre configuration. L'ordre dans lequel elles sont définies dans un fichier de configuration Terraform n'a aucune incidence sur la façon dont cet outil applique vos modifications. Organisez vos fichiers de configuration de la manière la plus logique pour vous et votre équipe.
Cliquez sur Vérifier ma progression pour valider l'objectif.
terraform apply
pour les détruire. Vous n'utiliserez plus le bucket ni la deuxième instance dans cet atelier.L'instance de calcul que vous avez lancée à ce stade est basée sur l'image Google fournie. Aucun logiciel supplémentaire n'a été installé et aucune configuration n'a été appliquée.
Google Cloud permet aux clients de gérer leurs propres images personnalisées de système d'exploitation. C'est un excellent moyen de vous assurer que les instances que vous provisionnez avec Terraform sont préconfigurées selon vos besoins. Packer constitue l'outil idéal à cette fin et comprend un compilateur pour Google Cloud.
Terraform utilise des approvisionneurs pour importer des fichiers, exécuter des scripts shell ou installer et déclencher d'autres logiciels, tels que des outils de gestion de la configuration.
vm_instance
de votre configuration pour qu'il se présente comme suit :Un bloc provisioner
est ajouté au bloc resource
. Vous pouvez ajouter plusieurs blocs provisioner
pour définir différentes étapes de provisionnement. Terraform accepte de nombreux approvisionneurs. Toutefois, pour cet exemple, vous allez utiliser l'approvisionneur local-exec
.
L'approvisionneur local-exec
lance une commande localement sur la machine qui exécute Terraform, et non sur l'instance de VM elle-même. Étant donné que vous avez choisi cet approvisionneur, vous n'avez pas besoin de spécifier des informations de connexion pour le moment.
Cet exemple illustre également une interpolation de chaîne plus complexe que celle que nous avons examinée précédemment. Chaque instance de VM peut disposer de plusieurs interfaces réseau. Vous devez donc faire référence à la première avec network_interface[0]
, en comptant à partir de 0, comme le font la plupart des langages de programmation. Par ailleurs, chaque interface réseau peut inclure plusieurs blocs "access_config" et, là encore, vous devez indiquer le premier.
terraform apply
:Le résultat obtenu à ce stade peut être déroutant au premier abord.
Terraform n'a trouvé aucune opération à exécuter. Si vous effectuez une vérification, vous constatez qu'il n'y a pas de fichier ip_address.txt
sur votre machine locale.
Terraform traite les approvisionneurs différemment des autres arguments. Les approvisionneurs ne s'exécutent que lorsqu'une ressource est créée, mais l'ajout d'un approvisionneur ne vous oblige pas à détruire et recréer la ressource.
terraform taint
pour demander à Terraform de recréer l'instance :Une ressource marquée comme corrompue avec la commande "taint" sera détruite et recréée la prochaine fois que vous exécuterez apply
.
terraform apply
:ip_address.txt
.Il inclut l'adresse IP, comme vous l'avez demandé.
Si une étape de provisionnement échoue pour une ressource qui a bien été créée, Terraform génère une erreur et marque la ressource comme corrompue. Une ressource marquée comme corrompue existe toujours, mais ne peut pas être utilisée sans risque, car le provisionnement a échoué.
Lorsque vous générerez votre prochain plan d'exécution, Terraform supprimera toutes les ressources marquées comme corrompues et en créera d'autres en essayant de les provisionner à nouveau après leur création.
Vous pouvez également définir des approvisionneurs qui ne s'exécuteront que lors d'une opération de destruction. Ils sont utiles pour nettoyer le système, extraire des données, etc.
Pour de nombreuses ressources, l'utilisation de mécanismes de nettoyage intégrés (tels que les scripts d'initialisation) est recommandée dans la mesure du possible. Toutefois, vous pouvez vous servir des approvisionneurs si nécessaire.
Cet atelier ne présente pas d'exemple illustrant les approvisionneurs de destruction. Si vous avez besoin de les utiliser, consultez la documentation sur les approvisionneurs.
Dans cet atelier, vous avez appris à créer, modifier et détruire une infrastructure avec Terraform. Vous avez ensuite créé des dépendances de ressources et provisionné l'infrastructure de base avec des fichiers de configuration Terraform.
Pour vous familiariser davantage avec Terraform, consultez les ressources suivantes :
Les formations et certifications Google Cloud vous aident à tirer pleinement parti des technologies Google Cloud. Nos cours portent sur les compétences techniques et les bonnes pratiques à suivre pour être rapidement opérationnel et poursuivre votre apprentissage. Nous proposons des formations pour tous les niveaux, à la demande, en salle et à distance, pour nous adapter aux emplois du temps de chacun. Les certifications vous permettent de valider et de démontrer vos compétences et votre expérience en matière de technologies Google Cloud.
Dernière mise à jour du manuel : 26 janvier 2024
Dernier test de l'atelier : 25 septembre 2023
Copyright 2025 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.
Ce contenu n'est pas disponible pour le moment
Nous vous préviendrons par e-mail lorsqu'il sera disponible
Parfait !
Nous vous contacterons par e-mail s'il devient disponible
One lab at a time
Confirm to end all existing labs and start this one