diff --git a/README.md b/README.md new file mode 100644 index 0000000..c8f3cd9 --- /dev/null +++ b/README.md @@ -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) | diff --git a/main.tf b/main.tf index 7959f9f..de22ca6 100644 --- a/main.tf +++ b/main.tf @@ -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 diff --git a/variables.tf b/variables.tf index 6363f0d..0c83530 100644 --- a/variables.tf +++ b/variables.tf @@ -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