LAB: Terraform avec AWS#
🕘 : 15 minutes
Présentation#
Objectifs#
- Ecriture de code Terraform
- Déploiement d'une ressource AWS (machine virtuelle EC2)
- Familiarisation avec quelques commandes de la CLI
- Utilisation des variables
- Structuration des projets Terraform
Prerequis#
- un compte AWS
- un utilisateur avec la permission
administratorAccess - Des credentiels (Secret Access Key + Access Key ID)
- AWS CLI
- Terraform CLI
- Connaissance de base de Terraform
Déroulement du Lab#
Etape 1: Création du répertoire projet#
Créez le répertoire terraform-aws et naviguez à l'intérieur
$ mkdir terraform-aws
$ cd terraform-aws
Etpae 2: Déclaration fournisseur (provider) AWS#
Dans Terraform, un provider est un plugin qui permet d'interagir avec une API. Dans le cadre de ce lab, nous nous intéressons au provider AWS.
NB: La liste des providers Terraform est accessible depuis Terraform registry
Créez un fichier main.tf avec le contenu ci-après.
terraform {
# Déclaration des providers requis
required_providers {
# Dans cet section, on doit avoir minimun 1 provider
# Ajout du provider AWS
aws = {
# Provider fournit par Hashicorp mais pas AWS
source = "hashicorp/aws"
# Version du provider utilisé
version = "5.63.0"
}
}
}
# Configuration du provider
provider "aws" {
# Spécification de la région pour la création des ressources
region = "us-east-1"
profile = "default"
}
Etape 3: Déclaration de la VM AWS#
- Editez à nouveau le fichier main.tf et rajoutez le contenu ci-après à la fin.
# Déclarition de variables locales
locals {
service_name = "app"
owner = "lecloudfacile"
}
# Déclaration de variables Input
variable "instance_type" {
# type de la variable
type = string
# Valeur par défaut si elle n'est pas mentionné dan sle fichier tfvars our fourni à l'execution
default = "t2.micro"
}
# Déclaration d'une ressource EC2
resource "aws_instance" "TfServer00" {
ami = "ami-066784287e358dad1"
instance_type = var.instance_type
tags = {
# Substitution de la variable local sur le tag
Name = "TfServer00-${local.service_name}"
}
}
# Déclaration de variable output
output "instance_public_ip_addr" {
value = aws_instance.TfServer00.public_ip
}
- Créez un fichier terraform.tfvars avec le contenu ci-après.
instance_type = "t2.micro"
Etape 4: Authentification sur AWS#
Pour que Terraform puisse créer les ressources sur AWS, il est nécessaire qu'une connexion à AWS se fasse.
- Editez le fichier ~/.aws/credentials et ajoutez le contenu ci-dessous.
[default]
aws_access_key_id = xxxxxx
aws_secret_access_key = yyyyyy
AWS_DEFAULT_REGION = us-east-1
NB: N'oubliez pas de substituer xxxxxx & yyyyyy avec les valeurs qui sont propres à votre environnement.
- Vérifiez que la connexion sur AWS se fait bien en utilisant la commande suivante.
$ aws sts get-caller-identity
{
"UserId": "xxxx",
"Account": "xxxx",
"Arn": "arn:aws:iam::xxxxx:user/xxxxxx"
}
Etape 5: Initialisation du projet#
L'initialisation du répertoire terraform-aws permettra de préparer votre répertoire de travail pour l'utilisation de Terraform en configurant les fichiers & répertoires nécessaires.
sh
$ terraform init
Etape 6:Validation et formatage#
Il est conseillé de vérifier la syntaxe du code Terraform ainsi que son formatage. Pour ce faire, vous pouvez exécuter les commandes suivantes:
$ terraform validate
$ terraform fmt
Etape 7: Deploiement de l'infrastructure#
Déployez vos ressources avec les commande suivantes:
$ terraform plan
$ terraform apply --auto-approve
Etape 8: Vérification déploiement#
Connectez-cous sur la console AWS et vérifier que l'instance EC2 TfServer00-app est bien crée.

Etape 9: Décommissionnement de l'infrastructure#
Détruisez l'infrastructure crée dans ce lab avec la commande suivante
$ terraform destroy --auto-approve
Best practices#
Pour une meilleure maintenabilité du code Terraform, il est recommandé de le séparer dans plusieurs fichiers. Par exemple:
- providers.tf => configuration des providers
- variables.tf => variables inputs
- outputs.tf => Variables outputs
- main.tf => Code pour la création d'une ressource EC2