163 lines
4.1 KiB
Markdown
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) |
|