# 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) |