Présentation
Terraform permet de créer, de modifier et d'améliorer votre infrastructure de manière sûre et prévisible. Il s'agit d'un outil Open Source qui codifie les API dans des fichiers de configuration déclaratifs pouvant être partagés par les membres d'une équipe, traités comme du code, modifiés, révisés et gérés par version.
Dans cet atelier, vous allez créer une configuration Terraform avec un module pour automatiser le déploiement d'infrastructure Google Cloud. Plus précisément, vous allez déployer un réseau en mode automatique associé à une règle de pare-feu et deux instances de VM, comme illustré dans le graphique suivant :

Objectifs
Cet atelier va vous apprendre à effectuer les tâches suivantes :
- Créer une configuration pour un réseau en mode automatique
- Créer une configuration pour une règle de pare-feu
- Créer un module pour les instances de VM
- Créer et déployer une configuration
- Vérifier le déploiement d'une configuration
Préparation
Pour chaque atelier, nous vous attribuons un nouveau projet Google Cloud et un nouvel ensemble de ressources pour une durée déterminée, sans frais.
-
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 :
- Le bouton Ouvrir la console Google Cloud
- Le temps restant
- Les identifiants temporaires que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier
-
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.
Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
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.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. Ne saisissez pas ceux de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
-
Accédez aux pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour afficher un menu contenant la liste des produits et services Google Cloud, cliquez sur le menu de navigation en haut à gauche, ou saisissez le nom du service ou du produit dans le champ Recherche.
Tâche 1 : Configurer Terraform et Cloud Shell
Dans cette tâche, vous allez configurer votre environnement Cloud Shell pour qu'il utilise Terraform.
Installer Terraform
Terraform est désormais intégré à Cloud Shell. Vérifiez le numéro de la version installée.
- Dans la console Cloud, cliquez sur Activer Cloud Shell (
).
- Cliquez sur Continuer si vous y êtes invité.
- Exécutez la commande suivante pour confirmer l'installation de Terraform :
terraform --version
Le résultat doit se présenter comme suit :
Terraform v1.5.7
Remarque : Si vous recevez un avertissement signalant que la version de Terraform est obsolète, n'en tenez pas compte. Les instructions données dans cet atelier sont compatibles avec Terraform v1.5.7 et versions ultérieures. Pour télécharger la dernière version de Terraform, rendez-vous sur le site Web de Terraform. Terraform est distribué sous forme de paquet binaire pour toutes les plates-formes et architectures compatibles, tandis que Cloud Shell utilise la version 64 bits de Linux.
- Pour créer un répertoire de destination pour votre configuration Terraform, exécutez la commande suivante :
mkdir tfinfra
- Dans Cloud Shell, cliquez sur Ouvrir l'éditeur (
).
Remarque : Si le message Impossible de charger l'éditeur de code, car les cookies tiers sont désactivés s'affiche, cliquez sur Ouvrir dans une nouvelle fenêtre. L'éditeur de code s'ouvre dans un nouvel onglet. Revenez à l'onglet d'origine, cliquez sur Ouvrir le terminal, puis revenez à l'onglet de l'éditeur de code. Dans cet atelier, vous allez régulièrement devoir revenir au terminal Cloud Shell.
- Dans le volet gauche de l'éditeur de code, cliquez sur le dossier tfinfra.
Initialiser Terraform
Terraform est doté d'une architecture basée sur des plug-ins qui lui permettent de prendre en charge les différents fournisseurs de service et infrastructures disponibles. Chaque "fournisseur" est un binaire encapsulé distribué séparément de Terraform. Pour initialiser Terraform, définissez Google comme fournisseur.
- Pour créer un fichier dans le dossier tfinfra,
effectuez un clic droit sur le dossier tfinfra, puis cliquez sur Nouveau fichier.
- Nommez le nouveau fichier provider.tf, puis ouvrez-le.
- Copiez le code suivant dans le fichier
provider.tf :
provider "google" {}
-
Pour enregistrer provider.tf, cliquez sur Fichier > Enregistrer.
-
Pour initialiser Terraform, exécutez la commande suivante :
cd tfinfra
terraform init
Vous êtes maintenant prêt à utiliser Terraform dans Cloud Shell.
Tâche 2 : Créer le réseau mynetwork et ses ressources
Dans cette tâche, vous allez créer le réseau en mode automatique mynetwork avec sa règle de pare-feu et deux instances de VM (mynet_vm_1 et mynet_vm_2).
Configurer mynetwork
Créez une configuration et définissez mynetwork.
- Pour créer un fichier dans tfinfra,
effectuez un clic droit sur le dossier tfinfra, puis cliquez sur Nouveau fichier.
- Nommez le nouveau fichier mynetwork.tf, puis ouvrez-le.
- Copiez le code de base suivant dans le fichier
mynetwork.tf :
# Create the mynetwork network
resource [TYPE_RESSOURCE] "mynetwork" {
name = [NOM_RESSOURCE]
#RESOURCE properties go here
}
Ce modèle de base est un excellent point de départ pour toutes les ressources Google Cloud. Le champ name (nom) vous permet de nommer la ressource, et le champ type de spécifier la ressource Google Cloud que vous souhaitez créer. Vous pouvez aussi définir des propriétés, mais ce n'est pas nécessaire pour toutes les ressources.
- Dans
mynetwork.tf, remplacez [TYPE_RESSOURCE] par "google_compute_network" (gardez les guillemets).
Remarque : La ressource google_compute_network est un réseau VPC. Les ressources disponibles se trouvent dans la documentation du fournisseur Google Cloud. Pour en savoir plus sur cette ressource spécifique, veuillez consulter la documentation Terraform.
- Dans
mynetwork.tf, remplacez [NOM_RESSOURCE] par "mynetwork" (gardez les guillemets).
- Ajoutez la propriété suivante à
mynetwork.tf :
auto_create_subnetworks = "true"
Par définition, le réseau en mode automatique crée un sous-réseau dans chaque région. Vous devez donc définir auto_create_subnetworks sur true.
- Vérifiez que le fichier mynetwork.tf se présente comme suit :
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
- Pour enregistrer
mynetwork.tf, cliquez sur Fichier > Enregistrer.
Configurer la règle de pare-feu
Définissez une règle de pare-feu autorisant le trafic HTTP, SSH, RDP, et ICMP sur mynetwork.
- Ajoutez le code de base suivant à
mynetwork.tf :
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource [TYPE_RESSOURCE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [NOM_RESSOURCE]
#RESOURCE properties go here
}
- Dans
mynetwork.tf, remplacez [TYPE_RESSOURCE] par "google_compute_firewall" (gardez les guillemets).
Remarque : La ressource google_compute_firewall est une règle de pare-feu. Pour en savoir plus sur cette ressource spécifique, veuillez consulter la documentation Terraform.
- Dans
mynetwork.tf, remplacez [NOM_RESSOURCE] par "mynetwork-allow-http-ss-hrdp-icmp" (gardez les guillemets).
- Ajoutez la propriété suivante à
mynetwork.tf :
network = google_compute_network.mynetwork.self_link
Remarque : Étant donné que cette règle de pare-feu dépend du réseau auquel elle est associée, vous devez utiliser la référence google_compute_network.mynetwork.self_link pour demander à Terraform de résoudre ces ressources selon leur ordre de dépendance. Dans cette situation, le réseau est créé avant la règle de pare-feu.
- Ajoutez les propriétés suivantes à
mynetwork.tf :
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
La liste de règles allow spécifie les protocoles et les ports autorisés.
- Vérifiez que votre fichier
mynetwork.tf se présente comme suit :
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
- Pour enregistrer mynetwork.tf, cliquez sur Fichier > Enregistrer.
Configurer l'instance de VM
Vous devez créer un module d'instance de VM pour définir les instances de VM. Un module est un fichier de configuration réutilisable stocké dans un dossier. Vous allez en utiliser un avec les deux instances de VM de cet atelier.
- Pour créer un dossier dans tfinfra, sélectionnez le dossier tfinfra, puis cliquez sur Fichier > Nouveau dossier.
- Nommez ce nouveau dossier instance.
- Pour créer un fichier dans instance,
effectuez un clic droit sur le dossier instance et cliquez sur Nouveau fichier.
- Nommez le nouveau fichier main.tf, puis ouvrez-le.
Votre structure de dossiers dans Cloud Shell doit ressembler à ceci :

- Copiez le code de base suivant dans main.tf :
resource [TYPE_RESSOURCE] "vm_instance" {
name = [NOM_RESSOURCE]
# RESOURCE properties go here
}
- Dans
main.tf, remplacez [TYPE_RESSOURCE] par "google_compute_instance" (gardez les guillemets).
Remarque : La ressource google_compute_instance est une instance Compute Engine. Pour en savoir plus sur cette ressource spécifique, veuillez consulter la documentation Terraform.
- Dans
main.tf, remplacez [NOM_RESSOURCE] par "${var.instance_name}" (gardez les guillemets).
Ce module devant être utilisé avec les deux instances de VM, le nom de l'instance doit être défini en tant que variable d'entrée. Cela vous permet de contrôler le nom de la variable depuis mynetwork.tf. Pour en savoir plus sur les variables d'entrée, consultez le guide Terraform Define Input Variables.
- Ajoutez les propriétés suivantes à
main.tf :
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
Ces propriétés définissent la zone et le type de machine de l'instance en tant que variables d'entrée.
- Ajoutez les propriétés suivantes à
main.tf :
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
Cette propriété spécifie que le disque de démarrage doit utiliser l'image de l'OS Debian 11. Les deux instances de VM vont utiliser la même image, vous pouvez donc coder cette propriété en dur dans le module.
- Ajoutez les propriétés suivantes à
main.tf :
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
Pour définir l'interface réseau, cette propriété fournit un nom de réseau en tant que variable d'entrée et précise la configuration de l'accès. Si vous ne renseignez pas la configuration de l'accès, vous obtenez une adresse IP externe éphémère (requise dans cet atelier). Pour créer des instances ne disposant que d'une adresse IP interne, supprimez la section "access_config". Pour en savoir plus, consultez la documentation Terraform.
- Vérifiez que
main.tf ressemble à ce qui suit, y compris les accolades {} :
resource "google_compute_instance" "vm_instance" {
name = "${var.instance_name}"
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
}
- Pour enregistrer main.tf, cliquez sur Fichier > Enregistrer.
- Pour créer un fichier dans instance,
effectuez un clic droit sur le dossier instance et cliquez sur Nouveau fichier.
- Nommez le nouveau fichier variables.tf, puis ouvrez-le.
- Définissez les quatre variables d'entrée dans
variables.tf.
variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
default = "e2-micro"
}
variable "instance_network" {}
En attribuant une valeur par défaut à instance_type, la variable devient facultative. Les champs instance_name, instance_zone et instance_network sont obligatoires, mais vous les définirez dans mynetwork.tf.
- Pour enregistrer variables.tf, cliquez sur Fichier > Enregistrer.
- Ajoutez les instances de VM suivantes à
mynetwork.tf :
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Ces ressources utilisent le module du dossier instance et fournissent le nom, la zone et le réseau en tant que variables d'entrée. Comme ces instances dépendent d'un réseau VPC, vous devez utiliser la référence google_compute_network.mynetwork.self_link pour demander à Terraform de résoudre ces ressources selon leur ordre de dépendance. Dans ce cas, le réseau est créé avant l'instance.
Remarque : Les modules Terraform ont l'avantage de pouvoir être réutilisés dans plusieurs configurations. Plutôt que d'écrire vous-même un module, vous pouvez profiter des modules existants disponibles dans le registre de modules Terraform.
-
Pour enregistrer mynetwork.tf, cliquez sur Fichier > Enregistrer.
-
Vérifiez que mynetwork.tf ressemble à ce qui suit, y compris les accolades {} :
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Créer le réseau mynetwork et ses ressources
Vous allez maintenant appliquer la configuration mynetwork.
- Pour réécrire les fichiers de configuration Terraform dans un format et un style canoniques, exécutez la commande suivante :
terraform fmt
Le résultat doit se présenter comme suit :
mynetwork.tf
Remarque : Si vous recevez un message d'erreur, revenez aux étapes précédentes pour vérifier que votre configuration est conforme aux instructions données dans l'atelier. Si vous ne parvenez pas à résoudre le problème lié à votre configuration, téléchargez ces versions définitives de configuration, puis consultez-les :
- Pour initialiser Terraform, exécutez la commande suivante :
terraform init
Le résultat doit se présenter comme suit :
Initializing modules...
- mynet-vm-2 in instance
- mynet-vm-2 in instance
...
Terraform has been successfully initialized!
Remarque : Si vous recevez un message d'erreur, revenez aux étapes précédentes et vérifiez que votre structure de dossiers/fichiers est valide. Si vous ne parvenez pas à résoudre le problème lié à votre configuration, consultez les versions définitives de configuration évoquées précédemment. Une fois le problème résolu, exécutez à nouveau la commande précédente.
- Pour créer un plan d'exécution, exécutez la commande suivante :
terraform plan
Le résultat doit se présenter comme suit :
...
Plan: 4 to add, 0 to change, 0 to destroy.
...
Terraform a déterminé que vous deviez ajouter les quatre ressources suivantes :
| Nom |
Description |
| mynetwork |
Réseau VPC |
| mynetwork-allow-http-ssh-rdp-icmp |
Règle de pare-feu autorisant le trafic HTTP, SSH, RDP et ICMP |
| mynet-vm-2 |
Instance de VM dans
|
| mynet-vm-2 |
Instance de VM dans
|
- Pour appliquer les modifications souhaitées, exécutez la commande suivante :
terraform apply
- Pour confirmer les actions planifiées, saisissez :
yes
Le résultat doit se présenter comme suit :
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer le réseau mynetwork et ses ressources
Remarque : Si vous recevez un message d'erreur pendant l'exécution, consultez les étapes précédentes pour vérifier que votre structure de dossiers/fichiers est valide. Si vous ne parvenez pas à résoudre le problème lié à votre configuration, consultez les versions définitives de configuration évoquées précédemment. Une fois le problème résolu, exécutez à nouveau la commande précédente.
Tâche 3 : Vérifier votre déploiement
Dans la console Google Cloud, vérifiez que les ressources ont bien été créées.
Vérifier votre réseau dans la console Cloud
- Dans la console Google Cloud, accédez au menu de navigation (
), puis cliquez sur Réseau VPC > Réseaux VPC.
- Affichez le réseau VPC mynetwork, qui comporte un sous-réseau pour chaque région.
- Dans le menu de navigation, cliquez sur Réseau VPC > Pare-feu.
- Triez les règles de pare-feu par Réseau.
- Affichez la règle de pare-feu mynetwork-allow-http-ssh-rdp-icmp de mynetwork.
Vérifier vos instances de VM dans la console Cloud
- Dans le menu de navigation (
), cliquez sur Compute Engine > Instances de VM.
- Affichez les instances mynet-vm-1 et mynet-vm-2.
- Notez l'adresse IP interne de mynet-vm-2.
- Pour mynet-vm-1, cliquez sur SSH afin de lancer un terminal et de vous y connecter.
- Pour tester la connectivité à l'adresse IP interne de mynet-vm-2, exécutez la commande suivante dans le terminal SSH, en remplaçant l'adresse IP interne de mynet-vm-2 par la valeur que vous avez notée précédemment :
ping -c 3 <Saisir l'adresse IP interne de mynet-vm-2 ici>
Remarque : Comme les deux instances de VM appartiennent au même réseau et que la règle de pare-feu autorise le trafic ICMP, tout doit fonctionner correctement.
Tâche 4 : Récapitulatif
Dans cet atelier, vous avez créé une configuration Terraform avec un module pour automatiser le déploiement d'infrastructure Google Cloud. Au fur et à mesure que votre configuration évolue, Terraform peut mettre au point des plans d'exécution incrémentiels, qui vous permettront de créer votre configuration globale étape par étape.
Grâce à ce module d'instance, vous avez pu réutiliser une configuration de ressource identique pour plusieurs ressources, et utiliser les propriétés en tant que variables d'entrée. La configuration et le module que vous avez créés pourront servir de point de départ à un futur déploiement.
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
- 1 étoile = très insatisfait(e)
- 2 étoiles = insatisfait(e)
- 3 étoiles = ni insatisfait(e), ni satisfait(e)
- 4 étoiles = satisfait(e)
- 5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2020 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.