« Terraform - Infrastructure-as-a-Code » : différence entre les versions
m (Marijan a déplacé la page Terraform - Infrastrcture-as-a-Code vers Terraform - Infrastructure-as-a-Code) |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
[[Fichier:Terraform Banner.png|none]] | [[Fichier:Terraform Banner.png|none]] | ||
C'est un outil pour définir et provisionner des infrastructures Cloud en utilisant simplement un fichier de configuration (IaC). | |||
--- | |||
# Fichiers | |||
Il y a différents fichiers de base (.tf) qui sont nécessaire pour le bon fonctionnement de Terraform. | |||
``` | |||
project/ | |||
├── globals.tfvars | |||
└── environments/ | |||
└── dev/ | |||
├── main.tf | |||
├── variables.tf | |||
└── provider.tf | |||
└── prod/ | |||
├── main.tf | |||
├── variables.tf | |||
└── provider.tf | |||
``` | |||
## Provider | |||
Ce fichier permet de définir : | |||
``` | |||
terraform { | |||
required_version = ">=1.2" | |||
required_providers { | |||
azurerm = { | |||
source = "hashicorp/azurerm" | |||
version = "=4.1.0" | |||
} | |||
} | |||
backend "azurerm" { | |||
resource_group_name = "rg-rd-tfstate-chn" | |||
storage_account_name = "rdsttfstate" | |||
container_name = "tfstate" | |||
key = "terraform.tfstate" | |||
} | |||
} | |||
provider "azurerm" { | |||
features {} | |||
} | |||
``` | |||
- Définir la version et le provider requis pour Terraform | |||
- Où doit être modifier le tfstate (storage account Azure, S3 sur Exo, ...) | |||
- Le Cloud Provider à utiliser (Azure, AWS, Exoscale, etc.) afin d'avoir accès à la bibliothèque (disponible sur https://registry.terraform.io/) | |||
## Main | |||
Le fichier main.tf est le fichier principal, part le quel les différentes actions vont agir sur l'infrastructure (création, suppression et modification). | |||
``` | |||
resource "azurerm_Resource_group" "example" { | |||
name = "example-rg" | |||
location = "France Central" | |||
} | |||
``` | |||
- Resource : permet de définir qu'il s'agit d'une ressource | |||
- azurerm_Resource_group : RG sur Azure, information trouvable sur la registry | |||
- example : c'est la variable de la ressource, dans le cas ou on doit la rappeler | |||
## Variables | |||
Dans les bonnes pratiques de Terraform, il faut : | |||
``` | |||
variables.tf | |||
variable "resource_group_name" { | |||
description = "Nom du groupe de ressources" | |||
type = string | |||
} | |||
-- | |||
variables.tfvars | |||
resource_group_name = "rg-rd-testmachine-chn" | |||
``` | |||
- Déclarer les variables dans un variable.tf | |||
- Définir les valeurs des variables du .tf dans un variable.**tfvars** | |||
--- | |||
# Procédure | |||
Afin de déployer via du code du Terraform, il est séquencé en trois parties : init, plan & apply. | |||
## Init | |||
La première étape est init (initialisation) : | |||
``` | |||
terraform init | |||
``` | |||
- Installation des plugins pour interagir avec le provider | |||
- Initialisation du Backend pour le .tfstat | |||
- Préparation du dossier de travail pour l'execution des autres commandes Terraform | |||
## Plan | |||
La deuxième étape est plan (planification): | |||
``` | |||
terraform plan | |||
``` | |||
- Analyse les fichiers de configurations pour déterminer les ressources à créer, modifier ou supprimer | |||
- Il présente un plan d'exécution afin de voir ce qui va être modifié | |||
- Permet d'avoir un review des changements avant d'appliquer | |||
## Apply | |||
La dernière étape est apply (application) | |||
``` | |||
terraform apply | |||
``` | |||
- Confirmation des changement avant d'appliquer | |||
- Une fois confirmer, il va appliquer les changements relatif à vos fichiers de configuration | |||
- Mettre à jour le .tfstat | |||
--- | |||
# .tfstate | |||
C'est un fichier crucial afin de maintenir un alignement correcte entre la configuration et l'infrastructure actuel. Après chaque modification, ce fichier doit être mis à jour. | |||
On peut grâce à lui afficher les ressources managées part Terraform | |||
``` | |||
terraform show | |||
``` | |||
--- | |||
# Destroy | |||
Il est possible de supprimer tout la configuration générée par Terraform | |||
``` | |||
terraform destroy | |||
``` | |||
- Affiche les ressources qui vont être supprimées | |||
- Demande une confirmation avant de supprimer | |||
- Une fois confirmé, il supprime les ressources | |||
## Suppression d'une ressource | |||
Afin de supprimer une ressource, il suffit simplement de retirer la ressource du main.tf. Ceci va supprimer la ressource et mettre à jour le .tfstate | |||
--- | |||
# Modules | |||
Terraform, c'est des input sur une infrastructure. Cependant, parfois, il est nécessaire d'utiliser le résultat pour d'autres projets (modules) dans un même gros projet (project). | |||
``` | |||
project/ | |||
├── provider.tf | |||
├── main.tf | |||
└── modules/ | |||
└── azure_rg_module/ | |||
├── main.tf | |||
├── output.tf | |||
└── variables.tf | |||
└── azure_resource_module/ | |||
├── main.tf | |||
├── output.tf | |||
└── variables.tf | |||
``` | |||
- main.tf (main branch) : on doit déclarer un module ainsi que sa source, location, ressource_group_name ainsi que ces variables | |||
## Output | |||
Si nous avons par exemple un resource group sur Azure qui va être créer, et qu'un autre projet à besoin de l'id, il est possible de le récupérer grâce au fichier output | |||
Version du 30 avril 2025 à 21:19
C'est un outil pour définir et provisionner des infrastructures Cloud en utilisant simplement un fichier de configuration (IaC).
---
- Fichiers
Il y a différents fichiers de base (.tf) qui sont nécessaire pour le bon fonctionnement de Terraform.
``` project/ ├── globals.tfvars └── environments/
└── dev/
├── main.tf
├── variables.tf
└── provider.tf
└── prod/
├── main.tf
├── variables.tf
└── provider.tf
```
- Provider
Ce fichier permet de définir :
``` terraform {
required_version = ">=1.2"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=4.1.0"
}
}
backend "azurerm" {
resource_group_name = "rg-rd-tfstate-chn"
storage_account_name = "rdsttfstate"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
```
- Définir la version et le provider requis pour Terraform - Où doit être modifier le tfstate (storage account Azure, S3 sur Exo, ...) - Le Cloud Provider à utiliser (Azure, AWS, Exoscale, etc.) afin d'avoir accès à la bibliothèque (disponible sur https://registry.terraform.io/)
- Main
Le fichier main.tf est le fichier principal, part le quel les différentes actions vont agir sur l'infrastructure (création, suppression et modification).
``` resource "azurerm_Resource_group" "example" { name = "example-rg" location = "France Central" } ```
- Resource : permet de définir qu'il s'agit d'une ressource - azurerm_Resource_group : RG sur Azure, information trouvable sur la registry - example : c'est la variable de la ressource, dans le cas ou on doit la rappeler
- Variables
Dans les bonnes pratiques de Terraform, il faut :
``` variables.tf
variable "resource_group_name" {
description = "Nom du groupe de ressources" type = string
}
--
variables.tfvars
resource_group_name = "rg-rd-testmachine-chn" ```
- Déclarer les variables dans un variable.tf - Définir les valeurs des variables du .tf dans un variable.**tfvars**
---
- Procédure
Afin de déployer via du code du Terraform, il est séquencé en trois parties : init, plan & apply.
- Init
La première étape est init (initialisation) :
``` terraform init ```
- Installation des plugins pour interagir avec le provider - Initialisation du Backend pour le .tfstat - Préparation du dossier de travail pour l'execution des autres commandes Terraform
- Plan
La deuxième étape est plan (planification):
``` terraform plan ```
- Analyse les fichiers de configurations pour déterminer les ressources à créer, modifier ou supprimer - Il présente un plan d'exécution afin de voir ce qui va être modifié - Permet d'avoir un review des changements avant d'appliquer
- Apply
La dernière étape est apply (application)
``` terraform apply ```
- Confirmation des changement avant d'appliquer - Une fois confirmer, il va appliquer les changements relatif à vos fichiers de configuration - Mettre à jour le .tfstat
---
- .tfstate
C'est un fichier crucial afin de maintenir un alignement correcte entre la configuration et l'infrastructure actuel. Après chaque modification, ce fichier doit être mis à jour.
On peut grâce à lui afficher les ressources managées part Terraform
``` terraform show ```
---
- Destroy
Il est possible de supprimer tout la configuration générée par Terraform
``` terraform destroy ```
- Affiche les ressources qui vont être supprimées - Demande une confirmation avant de supprimer - Une fois confirmé, il supprime les ressources
- Suppression d'une ressource
Afin de supprimer une ressource, il suffit simplement de retirer la ressource du main.tf. Ceci va supprimer la ressource et mettre à jour le .tfstate
---
- Modules
Terraform, c'est des input sur une infrastructure. Cependant, parfois, il est nécessaire d'utiliser le résultat pour d'autres projets (modules) dans un même gros projet (project).
``` project/ ├── provider.tf ├── main.tf └── modules/
└── azure_rg_module/
├── main.tf
├── output.tf
└── variables.tf
└── azure_resource_module/
├── main.tf
├── output.tf
└── variables.tf
```
- main.tf (main branch) : on doit déclarer un module ainsi que sa source, location, ressource_group_name ainsi que ces variables
- Output
Si nous avons par exemple un resource group sur Azure qui va être créer, et qu'un autre projet à besoin de l'id, il est possible de le récupérer grâce au fichier output
