add readme

This commit is contained in:
Johan LEROY
2026-03-30 13:47:52 +02:00
parent 3b27b0157c
commit 2a0b8641c5
3 changed files with 166 additions and 16 deletions

158
README.md Normal file
View File

@@ -0,0 +1,158 @@
# ENI Terraform - Atelier 01
## Description
Projet Terraform pour deployer une infrastructure AWS basique 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 `eu-west-3a` |
| Sous-reseau 2 | `aws_subnet` | CIDR `10.0.2.0/24` - AZ `eu-west-3b` |
| Instance EC2 | `aws_instance` | Type `t3.micro`, disque 30 Go (gp3) |
### 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.server
# 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)
├── variables.tf # Variables avec valeurs par defaut et validations
├── outputs.tf # Valeurs de sortie (IDs, IP)
├── .gitignore # Fichiers exclus du depot
├── .terraform.lock.hcl # Verrouillage des versions de providers
├── atelier01.pdf # Enonce de l'atelier
└── README.md # Ce fichier
```
## Outputs
| Nom | Description |
|-----|-------------|
| `vpc_id` | ID du VPC |
| `subnet_ids` | IDs des 2 sous-reseaux |
| `instance_id` | ID de l'instance EC2 |
| `instance_private_ip` | IP privee de l'instance EC2 |
## 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 |
| `subnet_cidrs` | `["10.0.1.0/24", "10.0.2.0/24"]` | CIDRs des sous-reseaux |
| `availability_zones` | `["eu-west-3a", "eu-west-3b"]` | Zones de disponibilite |
| `ami_id` | `ami-03638fc4f87bac487` | AMI de l'instance |
| `instance_type` | `t3.micro` | Type d'instance |
| `root_volume_size` | `30` | Taille du disque (Go) |

18
main.tf
View File

@@ -44,25 +44,11 @@ resource "aws_subnet" "subnets" {
}
}
# --- AMI Amazon Linux 2023 (derniere version) ---
data "aws_ami" "amazon_linux" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
# --- AMI ---
# --- Instance EC2 ---
resource "aws_instance" "server" {
ami = data.aws_ami.amazon_linux.id
ami = var.ami_id
instance_type = var.instance_type
subnet_id = aws_subnet.subnets[0].id

View File

@@ -75,6 +75,12 @@ variable "availability_zones" {
}
}
variable "ami_id" {
description = "ID de l'AMI pour l'instance EC2"
type = string
default = "ami-03638fc4f87bac487"
}
variable "instance_type" {
description = "Type d'instance EC2"
type = string