add readme
This commit is contained in:
158
README.md
Normal file
158
README.md
Normal 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
18
main.tf
@@ -44,25 +44,11 @@ resource "aws_subnet" "subnets" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- AMI Amazon Linux 2023 (derniere version) ---
|
# --- AMI ---
|
||||||
data "aws_ami" "amazon_linux" {
|
|
||||||
most_recent = true
|
|
||||||
owners = ["amazon"]
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "name"
|
|
||||||
values = ["al2023-ami-*-x86_64"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "virtualization-type"
|
|
||||||
values = ["hvm"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Instance EC2 ---
|
# --- Instance EC2 ---
|
||||||
resource "aws_instance" "server" {
|
resource "aws_instance" "server" {
|
||||||
ami = data.aws_ami.amazon_linux.id
|
ami = var.ami_id
|
||||||
instance_type = var.instance_type
|
instance_type = var.instance_type
|
||||||
subnet_id = aws_subnet.subnets[0].id
|
subnet_id = aws_subnet.subnets[0].id
|
||||||
|
|
||||||
|
|||||||
@@ -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" {
|
variable "instance_type" {
|
||||||
description = "Type d'instance EC2"
|
description = "Type d'instance EC2"
|
||||||
type = string
|
type = string
|
||||||
|
|||||||
Reference in New Issue
Block a user