0% ont trouvé ce document utile (0 vote)
48 vues45 pages

Terraform Concepts Overview

Terraform est un outil d'infrastructure en tant que code qui permet de gérer l'infrastructure via des fichiers de configuration. Il comprend divers composants tels que les providers, resources, data sources, modules, variables, outputs, locals, et provisioners, chacun ayant des définitions et des usages spécifiques. Une bonne organisation des fichiers et des modules est essentielle pour maintenir une infrastructure propre et scalable.

Transféré par

shaun
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues45 pages

Terraform Concepts Overview

Terraform est un outil d'infrastructure en tant que code qui permet de gérer l'infrastructure via des fichiers de configuration. Il comprend divers composants tels que les providers, resources, data sources, modules, variables, outputs, locals, et provisioners, chacun ayant des définitions et des usages spécifiques. Une bonne organisation des fichiers et des modules est essentielle pour maintenir une infrastructure propre et scalable.

Transféré par

shaun
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Terraform Concepts Overview

Liste tous les object, composant, architecture, fichier important, structure etc de Terraform liste le
plus de chose possible

Terraform est un outil d'infrastructure en tant que code (IaC) développé par HashiCorp. Il permet de
définir et de gérer une infrastructure à travers des fichiers de configuration. Voici une liste détaillée
des différents objets, composants, architectures, fichiers importants et structures associés à
Terraform :

Objets et Composants

1. Providers :
Fournissent les ressources spécifiques à une plateforme (AWS, Azure, GCP, etc.).
Exemples : `aws`, `azurerm`, `google`.
2. Resources :
Représentent les composants d'infrastructure.
Exemples : `aws_instance`, `azurerm_virtual_network`, `google_compute_instance`.
3. Data Sources :
Permettent de récupérer des informations sur l'infrastructure existante.
Exemples : `aws_ami`, `azurerm_resource_group`, `google_compute_network`.
4. Modules :
Groupes de ressources réutilisables.
Exemples : `VPC`, `EC2`, `IAM`.
5. Variables :
Permettent de passer des informations dans les fichiers de configuration.
Exemples : `variable "region" {}`, `variable "instance_type" {}`.
6. Outputs :
Permettent d'extraire des informations de l'infrastructure déployée.
Exemples : `output "instance_ip" {}`, `output "vpc_id" {}`.
7. Locals :
Définissent des valeurs locales utilisées dans le fichier de configuration.
Exemples : `locals { instance_count = 3 }`.
8. Provisioners :
Permettent d'exécuter des scripts ou des commandes après la création des ressources.
Exemples : `local-exec`, `remote-exec`.
9. Backend :
Stocke l'état des infrastructures.
Exemples : `local`, `remote`, `s3`, `gcs`, `azurerm`.
10. State Files :
Fichiers qui maintiennent l'état des infrastructures déployées.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 1/45
Exemples : `terraform.tfstate`, `terraform.tfstate.backup`.

Architecture et Structure

1. Fichiers de Configuration :
`main.tf` : Fichier principal de configuration.
`variables.tf` : Définit les variables utilisées.
`outputs.tf` : Définit les sorties.
`provider.tf` : Configure les fournisseurs.
`terraform.tfvars` : Fichier de valeurs de variables.
2. Dossiers et Modules :
`modules/` : Dossier contenant les modules réutilisables.
`module_name/` : Dossier pour chaque module avec ses propres `main.tf`, `variables.tf`,
`outputs.tf`.
3. Commandes Terraform :
`terraform init` : Initialisation du projet.
`terraform plan` : Planification des modifications.
`terraform apply` : Application des modifications.
`terraform destroy` : Destruction des ressources.
`terraform validate` : Validation des fichiers de configuration.
`terraform fmt` : Formatage des fichiers de configuration.
`terraform taint` : Marquage d'une ressource pour recréation.
4. Fichiers de Backend :
`backend.tf` : Fichier de configuration du backend.
Exemples : `backend "s3" {}`, `backend "gcs" {}`, `backend "azurerm" {}`.

Bonnes Pratiques et Structures

1. Workspaces :
Permettent de gérer plusieurs environnements.
Commandes : `terraform workspace new`, `terraform workspace select`, `terraform
workspace list`.
2. Gestion des Secrets :
Utilisation de `vault`, `AWS Secrets Manager`, `Azure Key Vault`.
3. Structure de Répertoire Recommandée :
`project-root/`
`main.tf`
`variables.tf`
`outputs.tf`
`provider.tf`
`terraform.tfvars`
`modules/`
`module1/`
`module2/`
`environments/`
`dev/`
`prod/`

En résumé, Terraform offre une large gamme de composants et structures permettant de gérer
l'infrastructure de manière déclarative et automatisée. La clé est de bien organiser ses fichiers et

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 2/45
modules pour maintenir une infrastructure propre et scalable.

pour chaque object, structure etc


écrit la définition
comment l'utiliser
à quel niveau ce place l'objet dans l'architecture
dans quoi sont-ils imbriquer dans l'architecture ?
liste des commandes
toute les options de commande
exemple de commande avec 3 à 5 options et l'explication par commande
exercice d'entrainement 1 - 2 - 3 - 4
Et met les corrections

donne le plus de détails possible dans chaque réponse

Voici une explication détaillée pour chaque objet, composant, structure, etc., de Terraform. Pour
chaque élément, nous incluons la définition, comment l'utiliser, son emplacement dans l'architecture,
ses imbrications, les commandes, les options, des exemples de commandes et des exercices pratiques
avec corrections.

1. Providers

Définition

Les providers sont des plugins qui permettent à Terraform d'interagir avec des APIs pour provisionner
et gérer des ressources.

Utilisation

On spécifie les providers dans les fichiers de configuration Terraform.

Emplacement dans l'Architecture

Les providers sont définis au niveau global dans le fichier de configuration.

Imbrication

Les providers sont généralement définis dans un fichier `provider.tf`.

Commandes

`terraform init`
`terraform providers`
`terraform provider list`

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 3/45
Options de Commandes

`version`
`alias`
`configuration_alias`

Exemple de Commande

hcl

provider "aws" {
region = "us-west-2"
version = "~> 3.0"
alias = "west"
}

Explication :

`region` spécifie la région AWS.


`version` fixe la version du provider.
`alias` permet de nommer le provider.

Exercice d'Entraînement

1. Créer un fichier `provider.tf` pour AWS.


2. Spécifier la région `us-east-1` et la version `~> 2.0`.
3. Ajouter un alias `east`.

Correction

hcl

provider "aws" {
region = "us-east-1"
version = "~> 2.0"
alias = "east"
}

2. Resources

Définition

Les resources représentent des composants d'infrastructure comme des machines virtuelles, des
bases de données, etc.

Utilisation

On les définit dans les fichiers de configuration avec des arguments spécifiques.

Emplacement dans l'Architecture

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 4/45
Les resources sont définies dans des fichiers comme `main.tf` ou d'autres fichiers spécifiques aux
resources.

Imbrication

Les resources sont imbriquées dans le fichier de configuration principal ou dans des modules.

Commandes

`terraform plan`
`terraform apply`
`terraform destroy`

Options de Commandes

`count`
`depends_on`
`lifecycle`
`provider`

Exemple de Commande

hcl

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
count = 2
provider = aws.west
}

Explication :

`ami` spécifie l'image de la machine.


`instance_type` définit le type d'instance.
`count` crée deux instances.
`provider` utilise l'alias `west`.

Exercice d'Entraînement

1. Créer une ressource AWS EC2 avec l'AMI `ami-12345678`.


2. Définir le type d'instance à `t3.micro`.
3. Utiliser l'alias de provider `east`.

Correction

hcl

resource "aws_instance" "example" {


ami = "ami-12345678"
instance_type = "t3.micro"

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 5/45
provider = aws.east
}

3. Data Sources

Définition

Les data sources permettent de récupérer des informations sur l'infrastructure existante.

Utilisation

On les définit avec des arguments spécifiques pour récupérer les données nécessaires.

Emplacement dans l'Architecture

Les data sources sont définies dans les fichiers de configuration comme `main.tf`.

Imbrication

Les data sources sont imbriquées dans le fichier de configuration principal ou dans des modules.

Commandes

`terraform plan`
`terraform apply`
`terraform refresh`

Options de Commandes

`filter`
`ids`
`tags`

Exemple de Commande

hcl

data "aws_ami" "example" {


most_recent = true
owners = ["self"]

filter {
name = "name"
values = ["my-custom-ami-*"]
}
}

Explication :

`most_recent` obtient l'AMI la plus récente.


`owners` spécifie le propriétaire.
`filter` applique des filtres pour affiner la recherche.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 6/45
Exercice d'Entraînement

1. Créer une data source AWS VPC pour récupérer un VPC existant avec le tag `Name: my-vpc`.
2. Filtrer par région `us-west-2`.

Correction

hcl

data "aws_vpc" "example" {


tags = {
Name = "my-vpc"
}

filter {
name = "availability-zone"
values = ["us-west-2a"]
}
}

4. Modules

Définition

Les modules sont des ensembles de ressources réutilisables.

Utilisation

On les appelle dans les fichiers de configuration principaux.

Emplacement dans l'Architecture

Les modules sont placés dans un dossier `modules` ou référencés à distance.

Imbrication

Les modules sont imbriqués dans le fichier principal avec des arguments spécifiques.

Commandes

`terraform get`
`terraform init`
`terraform plan`
`terraform apply`

Options de Commandes

`source`
`version`
`variables`
`outputs`

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 7/45
Exemple de Commande

hcl

module "vpc" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
}

Explication :

`source` spécifie l'emplacement du module.


`cidr_block` définit le bloc CIDR pour le VPC.
`public_subnets` crée des sous-réseaux publics.

Exercice d'Entraînement

1. Créer un module S3 qui crée un bucket S3.


2. Appeler ce module depuis le fichier principal avec le nom du bucket `my-bucket`.

Correction

hcl

// modules/s3/main.tf
resource "aws_s3_bucket" "this" {
bucket = var.bucket_name
}

// main.tf
module "s3" {
source = "./modules/s3"
bucket_name = "my-bucket"
}

5. Variables

Définition

Les variables permettent de passer des informations dans les fichiers de configuration.

Utilisation

On les définit dans un fichier `variables.tf` et on les référence dans les fichiers principaux.

Emplacement dans l'Architecture

Les variables sont généralement définies dans un fichier `variables.tf`.

Imbrication

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 8/45
Les variables sont imbriquées dans les fichiers de configuration et les modules.

Commandes

`terraform plan`
`terraform apply`

Options de Commandes

`type`
`default`
`description`
`validation`
`sensitive`

Exemple de Commande

hcl

variable "region" {
type = string
default = "us-west-2"
description = "The AWS region to deploy resources"
}

Explication :

`type` définit le type de la variable.


`default` spécifie une valeur par défaut.
`description` fournit une description de la variable.

Exercice d'Entraînement

1. Définir une variable `instance_type` avec le type `string`.


2. Donner une valeur par défaut `t2.micro`.
3. Ajouter une description `Instance type for EC2`.

Correction

hcl

variable "instance_type" {
type = string
default = "t2.micro"
description = "Instance type for EC2"
}

6. Outputs

Définition

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 9/45
Les outputs permettent d'extraire des informations de l'infrastructure déployée.

Utilisation

On les définit dans un fichier `outputs.tf` et on les référence dans les fichiers principaux.

Emplacement dans l'Architecture

Les outputs sont généralement définis dans un fichier `outputs.tf`.

Imbrication

Les outputs sont imbriqués dans les fichiers de configuration principaux ou de modules.

Commandes

`terraform output`
`terraform apply`

Options de Commandes

`value`
`description`
`sensitive`

Exemple de Commande

hcl

output "instance_id" {
value = aws_instance.example.id
description = "The ID of the EC2 instance"
}

Explication :

`value` spécifie la valeur à extraire.


`description` fournit une description de la sortie.

Exercice d'Entraînement

1. Définir un output `instance_ip` pour extraire l'adresse IP publique d'une instance EC2.
2. Ajouter une description `Public IP of the instance`.

Correction

hcl

output "instance_ip" {
value = aws_instance.example.public_ip

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 10/45
description = "Public IP of the instance"
}

7. Locals

Définition

Les locals définissent des valeurs locales utilisées dans le fichier de configuration.

Utilisation

On les définit avec des expressions spécifiques pour calculer des valeurs locales.

Emplacement dans l'Architecture

Les locals sont définis dans les fichiers de configuration principaux.

Imbrication

Les locals sont imbriqués dans les fichiers de configuration principaux ou de modules.

Commandes

`terraform plan`
`terraform apply`

Options de Commandes

`locals`

Exemple de Commande

hcl

locals {
instance_count = 3
}

Explication :

Définit une valeur locale `instance_count`.

Exercice d'Entraînement

1. Définir un local `cidr_block` avec la valeur `10.0.0.0/16`.


2. Utiliser ce local pour créer un VPC.

Correction

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 11/45
hcl

locals {
cidr_block = "10.0.0.0/16"
}

resource "aws_vpc" "main" {


cidr_block = local.cidr_block
}

8. Provisioners

Définition

Les provisioners permettent d'exécuter des scripts ou des commandes après la création des
ressources.

Utilisation

On les définit à l'intérieur des ressources avec des arguments spécifiques.

Emplacement dans l'Architecture

Les provisioners sont définis à l'intérieur des ressources dans les fichiers de configuration.

Imbrication

Les provisioners sont imbriqués à l'intérieur des ressources.

Commandes

`terraform apply`

Options de Commandes

`local-exec`
`remote-exec`

Exemple de Commande

hcl

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"

provisioner "local-exec" {
command = "echo ${self.public_ip}"
}
}

Explication :

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 12/45
`command` exécute une commande locale après la création de l'instance.

Exercice d'Entraînement

1. Créer une ressource AWS EC2.


2. Utiliser un provisioner `remote-exec` pour exécuter un script sur l'instance.

Correction

hcl

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"

provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get install -y nginx"
]
}
}

9. Backend

Définition

Le backend stocke l'état des infrastructures.

Utilisation

On les configure dans un fichier `backend.tf`.

Emplacement dans l'Architecture

Les backends sont définis dans un fichier de configuration séparé.

Imbrication

Les backends sont imbriqués dans les fichiers de configuration globaux.

Commandes

`terraform init`

Options de Commandes

`local`
`remote`
`s3`
`gcs`
`azurerm`

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 13/45
Exemple de Commande

hcl

terraform {
backend "s3" {
bucket = "my-tfstate-bucket"
key = "global/s3/terraform.tfstate"
region = "us-west-2"
}
}

Explication :

`bucket` spécifie le bucket S3.


`key` définit le chemin de l'état.
`region` spécifie la région AWS.

Exercice d'Entraînement

1. Configurer un backend S3 pour stocker l'état.


2. Utiliser un bucket nommé `terraform-state`.
3. Définir la région `us-east-1`.

Correction

hcl

terraform {
backend "s3" {
bucket = "terraform-state"
key = "global/s3/terraform.tfstate"
region = "us-east-1"
}
}

10. State Files

Définition

Les state files maintiennent l'état des infrastructures déployées.

Utilisation

Les fichiers `terraform.tfstate` sont automatiquement générés et mis à jour.

Emplacement dans l'Architecture

Les state files sont stockés localement ou dans un backend distant.

Imbrication

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 14/45
Les state files ne sont pas imbriqués dans les fichiers de configuration mais sont référencés par
Terraform.

Commandes

`terraform state list`


`terraform state show`
`terraform state rm`
`terraform state mv`

Options de Commandes

`list`
`show`
`rm`
`mv`

Exemple de Commande

bash

terraform state list

Explication :

Liste toutes les ressources dans l'état actuel.

Exercice d'Entraînement

1. Lister toutes les ressources dans l'état.


2. Afficher les détails d'une ressource spécifique.

Correction

bash

terraform state list


terraform state show aws_instance.example

Commandes Globales et Options

Commandes

`terraform init`
`terraform plan`
`terraform apply`
`terraform destroy`
`terraform validate`
`terraform fmt`
Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 15/45
`terraform taint`
`terraform untaint`
`terraform refresh`
`terraform output`

Options de Commandes

`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-var`
`-var-file`
`-parallelism`
`-refresh`
`-out`
`-target`

Exemples de Commandes avec Options

1. `terraform plan -var 'region=us-west-2' -out=tfplan`


Planifie les modifications et stocke le plan dans un fichier `tfplan`.
2. `terraform apply -auto-approve`
Applique les modifications sans demander de confirmation.
3. `terraform destroy -var-file="production.tfvars"`
Détruit les ressources en utilisant un fichier de variables spécifique.

Exercice d'Entraînement Global

Exercice 1

1. Initialiser un projet Terraform.


2. Créer une configuration pour une instance EC2 avec une région et un type d'instance
spécifiques.
3. Appliquer la configuration.

Correction

bash

terraform init

# main.tf
provider "aws" {
region = "us-west-2"
}

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 16/45
terraform plan -out=tfplan
terraform apply tfplan

Exercice 2

1. Ajouter une variable pour le type d'instance.


2. Utiliser cette variable dans la configuration de l'instance EC2.
3. Appliquer la configuration avec une valeur de variable différente.

Correction

hcl

# variables.tf
variable "instance_type" {
type = string
default = "t2.micro"
description = "Instance type for EC2"
}

# main.tf
provider "aws" {
region = "us-west-2"
}

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = var.instance_type
}

terraform plan -var 'instance_type=t3.micro' -out=tfplan


terraform apply tfplan

Exercice 3

1. Créer un module pour un bucket S3.


2. Appeler ce module depuis le fichier principal avec un nom de bucket.
3. Appliquer la configuration.

Correction

hcl

# modules/s3/main.tf
resource "aws_s3_bucket" "this" {
bucket = var.bucket_name
}

variable "bucket_name" {
type = string
}

# main.tf
module "s3" {
source = "./modules/s3"
bucket_name = "my-bucket"
}

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 17/45
terraform plan -out=tfplan
terraform apply tfplan

Exercice 4

1. Configurer un backend S3 pour stocker l'état.


2. Initialiser le backend.
3. Appliquer la configuration.

Correction

hcl

# backend.tf
terraform {
backend "s3" {
bucket = "terraform-state"
key = "global/s3/terraform.tfstate"
region = "us-east-1"
}
}

terraform init
terraform plan -out=tfplan
terraform apply tfplan

Ces explications et exercices devraient couvrir une grande partie des concepts et des pratiques
courantes avec Terraform.

continue

11. Workspaces

Définition

Les workspaces permettent de gérer plusieurs environnements de manière isolée (par exemple,
développement, test, production).

Utilisation

On crée, sélectionne et gère les workspaces avec des commandes spécifiques.

Emplacement dans l'Architecture

Les workspaces sont gérés globalement par Terraform et influent sur la configuration et l'état des
ressources.
Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 18/45
Imbrication

Les workspaces ne sont pas imbriqués dans les fichiers de configuration, mais ils influencent quels
fichiers d'état et de configuration sont utilisés.

Commandes

`terraform workspace new <name>`


`terraform workspace select <name>`
`terraform workspace list`
`terraform workspace delete <name>`

Options de Commandes

`new`
`select`
`list`
`delete`

Exemple de Commande

bash

terraform workspace new dev

Explication :

Crée un nouveau workspace nommé `dev`.

Exercice d'Entraînement

1. Créer un workspace `test`.


2. Sélectionner le workspace `test`.
3. Lister tous les workspaces disponibles.

Correction

bash

terraform workspace new test


terraform workspace select test
terraform workspace list

12. Gestion des Secrets

Définition

La gestion des secrets consiste à sécuriser les informations sensibles telles que les mots de passe, les
clés API, etc.
Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 19/45
Utilisation

On utilise des outils externes comme Vault, AWS Secrets Manager ou Azure Key Vault.

Emplacement dans l'Architecture

Les secrets sont gérés de manière externe et référencés dans les fichiers de configuration Terraform.

Imbrication

Les secrets sont intégrés via des références dans les fichiers de configuration.

Commandes

`terraform apply`
`terraform plan`
Intégration avec des outils de gestion des secrets.

Exemple de Commande

hcl

provider "aws" {
region = "us-west-2"
access_key = data.aws_secretsmanager_secret_version.example.secret_string
}

data "aws_secretsmanager_secret_version" "example" {


secret_id = "my_secret_id"
}

Explication :

Récupère un secret depuis AWS Secrets Manager.

Exercice d'Entraînement

1. Configurer un secret dans AWS Secrets Manager.


2. Récupérer ce secret dans une configuration Terraform.

Correction

hcl

data "aws_secretsmanager_secret_version" "example" {


secret_id = "my_secret_id"
}

provider "aws" {
region = "us-west-2"
access_key = data.aws_secretsmanager_secret_version.example.secret_string
}

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 20/45
13. Fichiers de Configuration

Définition

Les fichiers de configuration sont des fichiers `.tf` qui contiennent le code Terraform pour définir
l'infrastructure.

Utilisation

On crée des fichiers `.tf` avec des blocs de configuration pour les providers, resources, variables,
outputs, etc.

Emplacement dans l'Architecture

Les fichiers de configuration sont généralement placés à la racine du projet ou dans des sous-dossiers
pour les modules.

Imbrication

Les différents blocs de configuration sont imbriqués dans ces fichiers selon leur type.

Commandes

`terraform plan`
`terraform apply`
`terraform fmt`
`terraform validate`

Options de Commandes

`plan`
`apply`
`fmt`
`validate`

Exemple de Commande

hcl

provider "aws" {
region = "us-west-2"
}

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}

Explication :

Définit un provider AWS et une instance EC2.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 21/45
Exercice d'Entraînement

1. Créer un fichier `main.tf` avec une configuration pour une instance EC2.
2. Appliquer la configuration.

Correction

hcl

# main.tf
provider "aws" {
region = "us-west-2"
}

resource "aws_instance" "example" {


ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}

terraform plan -out=tfplan


terraform apply tfplan

14. Commandes Terraform

Définition

Les commandes Terraform sont utilisées pour initialiser, planifier, appliquer, détruire, valider et
formater les configurations.

Utilisation

On utilise les commandes dans le terminal pour interagir avec Terraform.

Emplacement dans l'Architecture

Les commandes sont exécutées dans le répertoire où se trouvent les fichiers de configuration.

Imbrication

Les commandes sont exécutées en dehors des fichiers de configuration mais interagissent avec eux.

Commandes

`terraform init`
`terraform plan`
`terraform apply`
`terraform destroy`
`terraform validate`
`terraform fmt`
`terraform taint`
`terraform untaint`
`terraform refresh`
`terraform output`

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 22/45
Options de Commandes

`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-var`
`-var-file`
`-parallelism`
`-refresh`
`-out`
`-target`

Exemple de Commande

bash

terraform apply -var 'region=us-west-2' -auto-approve

Explication :

Applique les modifications en spécifiant une variable et sans demander de confirmation.

Exercice d'Entraînement

1. Initialiser un projet Terraform.


2. Planifier les modifications avec une variable `region`.
3. Appliquer les modifications automatiquement.

Correction

bash

terraform init
terraform plan -var 'region=us-west-2' -out=tfplan
terraform apply -auto-approve tfplan

15. Structure de Répertoire Recommandée

Définition

Une structure de répertoire organisée est essentielle pour maintenir un projet Terraform propre et
modulaire.

Utilisation

On organise les fichiers et dossiers selon les meilleures pratiques.

Emplacement dans l'Architecture


Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 23/45
La structure de répertoire influence la clarté et la maintenabilité du projet.

Imbrication

Les fichiers et dossiers sont imbriqués selon leur rôle (modules, environnements, etc.).

Exemple de Structure de Répertoire

css

project-root/
main.tf
variables.tf
outputs.tf
provider.tf
terraform.tfvars
modules/
vpc/
main.tf
variables.tf
outputs.tf
s3/
main.tf
variables.tf
outputs.tf
environments/
dev/
main.tf
variables.tf
outputs.tf
prod/
main.tf
variables.tf
outputs.tf

Explication :

`main.tf` : fichier principal de configuration.


`variables.tf` : définit les variables.
`outputs.tf` : définit les sorties.
`provider.tf` : configure les providers.
`terraform.tfvars` : fichier de valeurs de variables.
`modules/` : dossier contenant les modules réutilisables.
`environments/` : dossier contenant les configurations spécifiques aux environnements.

Exercice d'Entraînement

1. Créer une structure de répertoire pour un projet Terraform avec un module VPC.
2. Définir les fichiers nécessaires dans chaque répertoire.

Correction

hcl

# project-root/main.tf
provider "aws" {
region = "us-west-2"
}

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 24/45
module "vpc" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
}

# modules/vpc/main.tf
resource "aws_vpc" "this" {
cidr_block = var.cidr_block
}

# modules/vpc/variables.tf
variable "cidr_block" {
type = string
}

# modules/vpc/outputs.tf
output "vpc_id" {
value = aws_vpc.this.id
}

# environments/dev/main.tf
provider "aws" {
region = "us-west-2"
}

module "vpc" {
source = "../../modules/vpc"
cidr_block = "10.0.0.0/16"
}

Conclusion

Cette vue d'ensemble détaillée couvre les principaux objets, composants, et structures de Terraform.
En utilisant ces informations, on peut créer et gérer une infrastructure robuste et modulaire. Les
exercices pratiques fournissent une application concrète des concepts pour mieux comprendre leur
utilisation et leur implémentation.

continue

16. Commande `terraform init`

Définition

La commande `terraform init` initialise un répertoire de travail contenant des fichiers de


configuration Terraform. Elle télécharge également les plugins nécessaires pour interagir avec les
providers spécifiés.

Utilisation

Elle doit être exécutée avant d'utiliser d'autres commandes Terraform dans un nouveau répertoire de
travail ou après avoir modifié les fichiers de configuration des providers.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 25/45
Emplacement dans l'Architecture

Cette commande est exécutée au niveau du répertoire de travail pour préparer Terraform à exécuter
des configurations.

Imbrication

`terraform init` est exécuté au niveau du répertoire de travail et influence l'ensemble des fichiers de
configuration présents dans ce répertoire.

Options de Commandes

`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-backend`
`-backend-config`
`-get`
`-upgrade`

Exemple de Commande

bash

terraform init -backend-config="path=backend.tf"

Explication :

Initialise le répertoire de travail et utilise une configuration backend spécifique.

Exercice d'Entraînement

1. Initialiser un répertoire de travail Terraform avec une configuration backend stockée dans un
fichier `backend.tf`.

Correction

bash

terraform init -backend-config="path=backend.tf"

17. Commande `terraform plan`

Définition

La commande `terraform plan` crée un plan d'exécution montrant ce que Terraform va faire pour
atteindre l'état souhaité de la configuration.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 26/45
Utilisation

On l'utilise pour prévisualiser les modifications avant de les appliquer.

Emplacement dans l'Architecture

`terraform plan` est exécuté au niveau du répertoire de travail et prend en compte tous les fichiers de
configuration dans ce répertoire.

Imbrication

Elle interagit avec tous les fichiers de configuration et les variables pour créer un plan d'exécution.

Options de Commandes

`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-out`
`-refresh`
`-var`
`-var-file`

Exemple de Commande

bash

terraform plan -var 'region=us-west-2' -out=tfplan

Explication :

Crée un plan d'exécution avec la variable `region` spécifiée et stocke le plan dans un fichier
`tfplan`.

Exercice d'Entraînement

1. Créer un plan Terraform avec une variable `instance_type` définie à `t2.micro`.


2. Stocker le plan dans un fichier `myplan`.

Correction

bash

terraform plan -var 'instance_type=t2.micro' -out=myplan

18. Commande `terraform apply`

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 27/45
Définition

La commande `terraform apply` applique les modifications nécessaires pour atteindre l'état souhaité
de la configuration.

Utilisation

On l'utilise après `terraform plan` pour appliquer le plan d'exécution.

Emplacement dans l'Architecture

`terraform apply` est exécuté au niveau du répertoire de travail et applique les modifications décrites
dans les fichiers de configuration.

Imbrication

Elle utilise le plan d'exécution créé par `terraform plan` pour modifier l'infrastructure.

Options de Commandes

`-auto-approve`
`-backup`
`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-parallelism`
`-refresh`
`-state`
`-state-out`
`-target`
`-var`
`-var-file`

Exemple de Commande

bash

terraform apply -auto-approve myplan

Explication :

Applique les modifications sans demander de confirmation en utilisant le plan stocké dans
`myplan`.

Exercice d'Entraînement

1. Appliquer un plan Terraform stocké dans un fichier `myplan` sans demander de confirmation.

Correction
Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 28/45
bash

terraform apply -auto-approve myplan

19. Commande `terraform destroy`

Définition

La commande `terraform destroy` détruit toutes les ressources gérées par la configuration Terraform.

Utilisation

On l'utilise pour nettoyer l'infrastructure gérée par Terraform.

Emplacement dans l'Architecture

`terraform destroy` est exécuté au niveau du répertoire de travail et affecte toutes les ressources
décrites dans les fichiers de configuration.

Imbrication

Elle supprime toutes les ressources gérées par Terraform en utilisant les fichiers de configuration
actuels.

Options de Commandes

`-auto-approve`
`-backup`
`-lock`
`-lock-timeout`
`-no-color`
`-parallelism`
`-refresh`
`-state`
`-state-out`
`-target`
`-var`
`-var-file`

Exemple de Commande

bash

terraform destroy -auto-approve

Explication :

Détruit toutes les ressources sans demander de confirmation.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 29/45
Exercice d'Entraînement

1. Détruire toutes les ressources Terraform sans demander de confirmation.

Correction

bash

terraform destroy -auto-approve

20. Commande `terraform validate`

Définition

La commande `terraform validate` valide les fichiers de configuration Terraform pour vérifier s'ils
sont syntaxiquement corrects et cohérents.

Utilisation

On l'utilise pour s'assurer que les fichiers de configuration sont corrects avant de planifier ou
d'appliquer des modifications.

Emplacement dans l'Architecture

`terraform validate` est exécuté au niveau du répertoire de travail.

Imbrication

Elle analyse tous les fichiers de configuration dans le répertoire de travail.

Options de Commandes

`-json`
`-no-color`

Exemple de Commande

bash

terraform validate

Explication :

Valide les fichiers de configuration dans le répertoire de travail.

Exercice d'Entraînement

1. Valider les fichiers de configuration Terraform dans le répertoire de travail actuel.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 30/45
Correction

bash

terraform validate

21. Commande `terraform fmt`

Définition

La commande `terraform fmt` formate les fichiers de configuration Terraform pour qu'ils respectent
le style de codage standard.

Utilisation

On l'utilise pour formater les fichiers de configuration.

Emplacement dans l'Architecture

`terraform fmt` est exécuté au niveau du répertoire de travail et formate tous les fichiers `.tf`.

Imbrication

Elle formate tous les fichiers `.tf` dans le répertoire de travail.

Options de Commandes

`-list`
`-write`
`-diff`
`-check`
`-recursive`

Exemple de Commande

bash

terraform fmt -recursive

Explication :

Formate tous les fichiers `.tf` dans le répertoire de travail et ses sous-répertoires.

Exercice d'Entraînement

1. Formater tous les fichiers de configuration Terraform dans le répertoire de travail et ses sous-
répertoires.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 31/45
Correction

bash

terraform fmt -recursive

22. Commande `terraform taint`

Définition

La commande `terraform taint` marque une ressource pour qu'elle soit recréée lors du prochain
`terraform apply`.

Utilisation

On l'utilise pour forcer la recréation d'une ressource spécifique.

Emplacement dans l'Architecture

`terraform taint` est exécuté au niveau du répertoire de travail et affecte une ressource spécifique.

Imbrication

Elle marque une ressource spécifique pour recréation.

Options de Commandes

Aucune option spécifique

Exemple de Commande

bash

terraform taint aws_instance.example

Explication :

Marque la ressource `aws_instance.example` pour recréation lors du prochain `terraform apply`.

Exercice d'Entraînement

1. Marquer une ressource EC2 nommée `aws_instance.example` pour recréation.

Correction

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 32/45
bash

terraform taint aws_instance.example

23. Commande `terraform untaint`

Définition

La commande `terraform untaint` annule la marque de recréation d'une ressource précédemment


marquée avec `terraform taint`.

Utilisation

On l'utilise pour annuler la recréation forcée d'une ressource.

Emplacement dans l'Architecture

`terraform untaint` est exécuté au niveau du répertoire de travail et affecte une ressource spécifique.

Imbrication

Elle annule la marque de recréation d'une ressource spécifique.

Options de Commandes

Aucune option spécifique

Exemple de Commande

bash

terraform untaint aws_instance.example

Explication :

Annule la marque de recréation de la ressource `aws_instance.example`.

Exercice d'Entraînement

1. Annuler la marque de recréation d'une ressource EC2 nommée `aws_instance.example`.

Correction

bash

terraform untaint aws_instance.example

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 33/45
24. Commande `terraform refresh`

Définition

La commande `terraform refresh` met à jour le fichier d'état Terraform avec les valeurs actuelles des
ressources.

Utilisation

On l'utilise pour synchroniser l'état avec l'infrastructure réelle.

Emplacement dans l'Architecture

`terraform refresh` est exécuté au niveau du répertoire de travail.

Imbrication

Elle met à jour l'état de toutes les ressources gérées par Terraform.

Options de Commandes

`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-parallelism`
`-state`
`-target`
`-var`
`-var-file`

Exemple de Commande

bash

terraform refresh

Explication :

Met à jour le fichier d'état avec les valeurs actuelles des ressources.

Exercice d'Entraînement

1. Mettre à jour le fichier d'état Terraform avec les valeurs actuelles des ressources.

Correction

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 34/45
bash

terraform refresh

25. Commande `terraform output`

Définition

La commande `terraform output` affiche les valeurs des outputs définis dans les fichiers de
configuration Terraform.

Utilisation

On l'utilise pour afficher les sorties des configurations Terraform.

Emplacement dans l'Architecture

`terraform output` est exécuté au niveau du répertoire de travail.

Imbrication

Elle affiche les valeurs des outputs définis dans les fichiers de configuration.

Options de Commandes

`-json`
`-state`

Exemple de Commande

bash

terraform output instance_ip

Explication :

Affiche la valeur de l'output nommé `instance_ip`.

Exercice d'Entraînement

1. Afficher la valeur de l'output nommé `instance_ip`.

Correction

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 35/45
bash

terraform output instance_ip

Conclusion

Cette suite d'exercices et de descriptions détaillées couvre l'utilisation complète de Terraform, des
concepts de base aux commandes avancées. En suivant ces étapes et en pratiquant les exercices, on
peut acquérir une compréhension approfondie et pratique de Terraform, facilitant ainsi la gestion et
l'automatisation de l'infrastructure en tant que code.

continue

26. Backend Terraform

Définition

Un backend dans Terraform est une configuration qui définit où et comment l'état Terraform est
stocké. Les backends peuvent être locaux ou distants, ce qui permet de partager l'état entre plusieurs
utilisateurs et environnements.

Utilisation

On les configure dans un bloc `terraform { ... }` généralement dans un fichier `backend.tf`.

Emplacement dans l'Architecture

Les backends sont définis au niveau du projet dans un fichier de configuration global.

Imbrication

Les backends sont imbriqués dans le bloc `terraform` des fichiers de configuration globaux.

Commandes

`terraform init`

Options de Commandes

`path` (pour `local`)


`bucket`, `key`, `region` (pour `s3`)
`storage_account_name`, `container_name`, `key` (pour `azurerm`)

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 36/45
`project`, `credentials`, `bucket`, `prefix` (pour `gcs`)

Exemple de Commande

hcl

terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "path/to/my/key"
region = "us-west-2"
}
}

Explication :

Configure un backend S3 pour stocker l'état Terraform.

Exercice d'Entraînement

1. Configurer un backend local avec le chemin `terraform.tfstate`.


2. Initialiser le backend avec la commande appropriée.

Correction

hcl

# backend.tf
terraform {
backend "local" {
path = "terraform.tfstate"
}
}

# Commande d'initialisation
terraform init

27. State Locking

Définition

Le verrouillage d'état empêche plusieurs utilisateurs de modifier simultanément l'état, ce qui pourrait
entraîner des corruptions d'état.

Utilisation

Le verrouillage est souvent automatique, géré par le backend utilisé (par exemple, S3 avec DynamoDB
pour le verrouillage).

Emplacement dans l'Architecture

Le verrouillage d'état se produit automatiquement au niveau du backend.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 37/45
Imbrication

Les options de verrouillage peuvent être spécifiées dans la configuration du backend ou via des
options de commande.

Commandes

`terraform init`
`terraform plan`
`terraform apply`

Options de Commandes

`-lock`
`-lock-timeout`

Exemple de Commande

bash

terraform apply -lock=true -lock-timeout=300s

Explication :

Applique les modifications en activant le verrouillage avec un délai d'attente de 300 secondes.

Exercice d'Entraînement

1. Configurer un backend S3 avec verrouillage d'état en utilisant DynamoDB.


2. Appliquer une configuration Terraform avec verrouillage activé.

Correction

hcl

# backend.tf
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "path/to/my/key"
region = "us-west-2"
dynamodb_table = "terraform-locks"
}
}

# Commande d'application
terraform apply -lock=true -lock-timeout=300s

28. Remote State

Définition

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 38/45
L'état distant permet de stocker et de partager l'état Terraform dans un emplacement centralisé,
facilitant la collaboration entre équipes.

Utilisation

On configure l'état distant en spécifiant le backend approprié.

Emplacement dans l'Architecture

L'état distant est géré au niveau du projet et configuré dans les fichiers de configuration globaux.

Imbrication

L'état distant est configuré dans le bloc `terraform` des fichiers de configuration globaux.

Commandes

`terraform init`

Options de Commandes

Spécifiques au backend (par exemple, `bucket`, `key`, `region` pour S3)

Exemple de Commande

hcl

terraform {
backend "gcs" {
bucket = "my-terraform-state"
prefix = "terraform/state"
}
}

Explication :

Configure un backend Google Cloud Storage pour stocker l'état Terraform.

Exercice d'Entraînement

1. Configurer un état distant avec Google Cloud Storage.


2. Initialiser le backend avec la commande appropriée.

Correction

hcl

# backend.tf
terraform {
backend "gcs" {
bucket = "my-terraform-state"
prefix = "terraform/state"
}
Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 39/45
}

# Commande d'initialisation
terraform init

29. Terraform Import

Définition

La commande `terraform import` permet d'importer des ressources existantes dans le fichier d'état
Terraform.

Utilisation

On l'utilise pour inclure des ressources créées en dehors de Terraform dans la gestion de Terraform.

Emplacement dans l'Architecture

`terraform import` est exécuté au niveau du répertoire de travail.

Imbrication

Elle importe des ressources spécifiques dans l'état Terraform.

Commandes

`terraform import`

Options de Commandes

Aucune option spécifique, mais nécessite des arguments pour spécifier la ressource et son ID.

Exemple de Commande

bash

terraform import aws_instance.example i-1234567890abcdef0

Explication :

Importe une instance EC2 existante dans Terraform en utilisant son ID.

Exercice d'Entraînement

1. Importer un bucket S3 existant nommé `my-existing-bucket` dans Terraform.

Correction

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 40/45
bash

terraform import aws_s3_bucket.example my-existing-bucket

30. Terraform Graph

Définition

La commande `terraform graph` génère une représentation graphique des dépendances de la


configuration Terraform.

Utilisation

On l'utilise pour visualiser les dépendances entre les ressources.

Emplacement dans l'Architecture

`terraform graph` est exécuté au niveau du répertoire de travail.

Imbrication

Elle génère un graphe pour les ressources définies dans les fichiers de configuration.

Commandes

`terraform graph`

Options de Commandes

`-draw-cycles`

Exemple de Commande

bash

terraform graph | dot -Tpng > graph.png

Explication :

Génére un graphe des dépendances et le convertit en image PNG en utilisant Graphviz.

Exercice d'Entraînement

1. Générer et visualiser un graphe des dépendances de la configuration Terraform.

Correction

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 41/45
bash

terraform graph | dot -Tpng > graph.png

31. Terraform State

Définition

La commande `terraform state` permet de manipuler directement le fichier d'état Terraform.

Utilisation

On l'utilise pour lister, montrer, déplacer, et supprimer des ressources dans l'état Terraform.

Emplacement dans l'Architecture

`terraform state` est exécuté au niveau du répertoire de travail.

Imbrication

Elle interagit directement avec le fichier d'état.

Commandes

`terraform state list`


`terraform state show`
`terraform state mv`
`terraform state rm`

Options de Commandes

`list`
`show`
`mv`
`rm`

Exemple de Commande

bash

terraform state list

Explication :

Liste toutes les ressources dans l'état actuel.

Exercice d'Entraînement

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 42/45
1. Lister toutes les ressources dans l'état Terraform.
2. Afficher les détails d'une ressource spécifique.

Correction

bash

terraform state list


terraform state show aws_instance.example

32. Terraform Refresh

Définition

La commande `terraform refresh` met à jour le fichier d'état Terraform avec les valeurs actuelles des
ressources.

Utilisation

On l'utilise pour synchroniser l'état avec l'infrastructure réelle.

Emplacement dans l'Architecture

`terraform refresh` est exécuté au niveau du répertoire de travail.

Imbrication

Elle met à jour l'état de toutes les ressources gérées par Terraform.

Commandes

`terraform refresh`

Options de Commandes

`-input`
`-lock`
`-lock-timeout`
`-no-color`
`-parallelism`
`-state`
`-target`
`-var`
`-var-file`

Exemple de Commande

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 43/45
bash

terraform refresh

Explication :

Met à jour le fichier d'état avec les valeurs actuelles des ressources.

Exercice d'Entraînement

1. Mettre à jour le fichier d'état Terraform avec les valeurs actuelles des ressources.

Correction

bash

terraform refresh

33. Terraform Output

Définition

La commande `terraform output` affiche les valeurs des outputs définis dans les fichiers de
configuration Terraform.

Utilisation

On l'utilise pour afficher les sorties des configurations Terraform.

Emplacement dans l'Architecture

`terraform output` est exécuté au niveau du répertoire de travail.

Imbrication

Elle affiche les valeurs des outputs définis dans les fichiers de configuration.

Commandes

`terraform output`

Options de Commandes

`-json`
`-state`

Exemple de Commande

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 44/45
bash

terraform output instance_ip

Explication :

Affiche la valeur de l'output nommé `instance_ip`.

Exercice d'Entraînement

1. Afficher la valeur de l'output nommé `instance_ip`.

Correction

bash

terraform output instance_ip

Conclusion

Cette vue d'ensemble détaillée couvre l'utilisation complète de Terraform, des concepts de base aux
commandes avancées. En suivant ces étapes et en pratiquant les exercices, on peut acquérir une
compréhension approfondie et pratique de Terraform, facilitant ainsi la gestion et l'automatisation de
l'infrastructure en tant que code.

ChatGPT peut faire des erreurs. Envisagez de vérifier les informations importantes.

Printed using Save ChatGPT as PDF, powered by PDFCrowd HTML to PDF API. 45/45

Vous aimerez peut-être aussi