Files
ENI-Terraform/README.md
2026-03-31 11:51:58 +02:00

163 lines
4.1 KiB
Markdown

# ENI Terraform - Atelier 02
## Description
Projet Terraform pour deployer une infrastructure AWS dans le cadre du cours ENI.
### Ressources creees
| Ressource | Type | Details |
|-----------|------|---------|
| VPC | `aws_vpc` | CIDR `10.0.0.0/16` |
| Sous-reseau 1 | `aws_subnet` | CIDR `10.0.1.0/24` - AZ dynamique |
| Sous-reseau 2 | `aws_subnet` | CIDR `10.0.2.0/24` - AZ dynamique |
| Instance Ubuntu | `aws_instance` | Type `t3.micro`, sur sous-reseau 1 |
| Instance Amazon Linux | `aws_instance` | Type `t3.micro`, sur sous-reseau 2 |
| Volume EBS Ubuntu | `aws_ebs_volume` | 10 Go gp3, attache a l'instance Ubuntu |
| Volume EBS Amazon Linux | `aws_ebs_volume` | 10 Go gp3, attache a l'instance Amazon Linux |
### Tags appliques
- **Owner** : `johan.leroy2023`
- **CourseId** : `cours-tf-aws-s14`
- **Name** : prefixe par le trigramme `jle`
## Pre-requis
- [Terraform](https://developer.hashicorp.com/terraform/install) >= 1.0
- Un compte AWS avec les credentials configurees
- Region : `eu-west-3` (Paris)
### Configurer les credentials AWS
```bash
# Option 1 : Variables d'environnement (copier depuis le portail AWS)
export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_SESSION_TOKEN="..."
# Option 2 : AWS CLI
aws configure
```
Portail de connexion : https://d-99677b87c0.awsapps.com/start
## Commandes Terraform
### Initialisation
```bash
# Telecharge les providers et initialise le projet
terraform init
```
### Validation
```bash
# Verifie la syntaxe des fichiers .tf
terraform validate
# Formate les fichiers .tf selon les conventions
terraform fmt
# Formate et verifie sans modifier (utile en CI)
terraform fmt -check
```
### Planification
```bash
# Affiche les ressources qui seront creees/modifiees/supprimees
terraform plan
# Sauvegarde le plan dans un fichier
terraform plan -out=plan.tfplan
```
### Deploiement
```bash
# Cree les ressources (demande confirmation)
terraform apply
# Applique sans confirmation (attention !)
terraform apply -auto-approve
# Applique un plan sauvegarde
terraform apply plan.tfplan
```
### Inspection
```bash
# Affiche l'etat complet des ressources deployees
terraform show
# Liste les ressources gerees par Terraform
terraform state list
# Detail d'une ressource specifique
terraform state show aws_instance.servers[\"ubuntu\"]
# Affiche les outputs (vpc_id, subnet_ids, etc.)
terraform output
```
### Destruction
```bash
# Supprime toutes les ressources (demande confirmation)
terraform destroy
# Supprime sans confirmation (attention !)
terraform destroy -auto-approve
```
### Surcharge de variables
```bash
# Surcharger une variable en ligne de commande
terraform plan -var="trigramme=abc"
# Utiliser un fichier de variables
terraform plan -var-file="custom.tfvars"
```
## Structure du projet
```
.
├── main.tf # Ressources AWS (VPC, subnets, EC2, EBS)
├── variables.tf # Variables avec valeurs par defaut et validations
├── outputs.tf # Valeurs de sortie (IDs, IPs)
├── .gitignore # Fichiers exclus du depot
├── .terraform.lock.hcl # Verrouillage des versions de providers
├── atelier01.pdf # Enonce de l'atelier 01
├── atelier02.pdf # Enonce de l'atelier 02
└── README.md # Ce fichier
```
## Outputs
| Nom | Description |
|-----|-------------|
| `vpc_id` | ID du VPC |
| `subnet_ids` | Map des IDs des sous-reseaux |
| `instance_ids` | Map des IDs des instances EC2 |
| `instance_private_ips` | Map des IPs privees des instances EC2 |
| `ebs_volume_ids` | Map des IDs des volumes EBS additionnels |
## Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `aws_region` | `eu-west-3` | Region AWS |
| `owner` | `johan.leroy2023` | Tag Owner |
| `course_id` | `cours-tf-aws-s14` | Tag CourseId |
| `trigramme` | `jle` | Prefixe des ressources |
| `vpc_cidr` | `10.0.0.0/16` | CIDR du VPC |
| `subnets` | `map(object)` | Sous-reseaux avec name et cidr |
| `instances` | `map(object)` | Instances avec ami, type et subnet_key |
| `root_volume_size` | `30` | Taille du disque racine (Go) |
| `ebs_volume_size` | `10` | Taille du volume EBS additionnel (Go) |