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) ---
|
||||
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user