« Terraform - Infrastructure-as-a-Code » : différence entre les versions

De Marijan Stajic | Wiki
Aller à la navigation Aller à la recherche
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

Terraform Banner.png

C'est un outil pour définir et provisionner des infrastructures Cloud en utilisant simplement un fichier de configuration (IaC).

---

  1. 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

```

    1. 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/)

    1. 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

    1. 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**

---

  1. Procédure

Afin de déployer via du code du Terraform, il est séquencé en trois parties : init, plan & apply.

    1. 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

    1. 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

    1. 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

---

  1. .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 ```

---

  1. 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

    1. 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

---

  1. 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

    1. 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