DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AWSLesson 24 / 479 min readUpdated October 7, 2026

VPC : sous-réseaux, IGW et tables de routage

À la fin de ce tutoriel, vous aurez un VPC custom en ca-central-1 avec CIDR planifié, un subnet public, un subnet privé, une Internet Gateway, et des route tables qui séparent le trafic — base de toute archi Solutions Architect.

Niveau : Débutant → Intermédiaire · Temps estimé : 55–70 min · Versions testées : VPC Console/API 2026, AWS CLI v2 · Dernière vérification : 2026-09-11 · Region : ca-central-1

← Précédent : CloudFront + S3 · → Suivant : SG vs NACL · Hub : Démarrer avec AWS

Publish : HOLD

Prérequis

  • Profil CLI lab, Region ca-central-1
  • Notions AZ (EC2)
  • Ne pas supprimer le VPC par défaut du compte (utile pour d’autres labs) — on crée un VPC lab dédié
  • Budget d’alerte actif (surtout si vous créez une NAT plus tard — hors scope ici)
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
# PowerShell : $env:AWS_PROFILE='lab'; $env:AWS_DEFAULT_REGION='ca-central-1'

Coût estimé lab (ca-central-1, 2026) : VPC / subnets / IGW / route tables = 0 USD. Une NAT Gateway = $$/heure + data → hors scope (ne pas créer « pour voir »). Pour labs SSM/S3, préférez des VPC endpoints. Une NAT oubliée reste le classique de facture surprise.

Ce que nous allons construire

Un VPC (Virtual Private Cloud) est votre réseau isolé dans AWS : vous choisissez le CIDR, découpez des subnets par AZ, et décidez qui a une route vers Internet. Ici on pose le squelette minimal d’une archi multi-tiers.

VPC lab-vpc  10.0.0.0/16
├── Subnet public  10.0.1.0/24  (ca-central-1a) + auto-assign public IP
├── Subnet privé   10.0.2.0/24  (ca-central-1a)
├── Internet Gateway igw-lab
├── RT public : 0.0.0.0/0 → IGW
└── RT privé  : locale seulement (pas de NAT dans ce lab)

(Schéma — alt : « VPC public/privé, IGW, route tables ».)

Rappel utile : un subnet n’est « public » ou « privé » que par sa route table (et éventuellement map-public-ip-on-launch). AWS ne pose pas d’étiquette magique — c’est votre design de routage qui fait la différence.

Étape 1 — CIDR et AZ (design rapide)

Bloc CIDR Rôle
VPC 10.0.0.0/16 65 536 IPs (largesse lab)
Public 10.0.1.0/24 Bastion, ALB, NAT (plus tard)
Privé 10.0.2.0/24 Apps, bases

Règles : pas de chevauchement avec d’autres VPC que vous peererez ; /16→/24 laisse de la place pour d’autres AZ (10.0.3.0/24…). En pratique, réservez aussi des plages pour un futur peering (172.16.0.0/16, autre 10.x) afin d’éviter les collisions CIDR — cause n°1 d’échec de VPC Peering.

Repère examen SA : RFC1918 ; un subnet = une AZ ; /24 = confort lab. En ca-central-1 : typiquement ca-central-1a / 1b.

Listez une AZ :

AZ=$(aws ec2 describe-availability-zones   --region ca-central-1   --query 'AvailabilityZones[0].ZoneName' --output text)
echo "$AZ"

Étape 2 — Créer le VPC et les subnets

VPC_ID=$(aws ec2 create-vpc --cidr-block 10.0.0.0/16   --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=lab-vpc}]'   --query Vpc.VpcId --output text)

aws ec2 modify-vpc-attribute --vpc-id "$VPC_ID" --enable-dns-support
aws ec2 modify-vpc-attribute --vpc-id "$VPC_ID" --enable-dns-hostnames

SUBNET_PUB=$(aws ec2 create-subnet --vpc-id "$VPC_ID"   --cidr-block 10.0.1.0/24 --availability-zone "$AZ"   --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=lab-public-1a}]'   --query Subnet.SubnetId --output text)

SUBNET_PRIV=$(aws ec2 create-subnet --vpc-id "$VPC_ID"   --cidr-block 10.0.2.0/24 --availability-zone "$AZ"   --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=lab-private-1a}]'   --query Subnet.SubnetId --output text)

aws ec2 modify-subnet-attribute --subnet-id "$SUBNET_PUB" --map-public-ip-on-launch

echo "VPC=$VPC_ID PUB=$SUBNET_PUB PRIV=$SUBNET_PRIV"

DNS hostnames + support : nécessaires pour des noms publics/EC2 corrects. Sans enable-dns-hostnames, une instance avec IP publique n’obtient pas de hostname DNS AWS (ec2-…compute.amazonaws.com), ce qui complique SSH, scripts et intégrations.

Chaque subnet vit dans une seule AZ. Les IPs « AWS reserved » réduisent légèrement le /24 utilisable — normal. Taggez toujours Name= pour la lisibilité console.

Étape 3 — Internet Gateway

IGW_ID=$(aws ec2 create-internet-gateway   --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=lab-igw}]'   --query InternetGateway.InternetGatewayId --output text)

aws ec2 attach-internet-gateway --internet-gateway-id "$IGW_ID" --vpc-id "$VPC_ID"

Sans IGW, aucun trafic IPv4 public entrant/sortant depuis le VPC (hors endpoints). L’IGW est hautement disponible et scalée par AWS : une seule IGW par VPC suffit ; on l’attache puis on pointe les routes 0.0.0.0/0 vers elle. Attacher sans route (ou l’inverse) ne donne pas Internet — les deux sont obligatoires.

Étape 4 — Tables de routage

Chaque VPC a une route table principale (main) avec la route locale implicite (10.0.0.0/16 → local). On crée des RT custom pour séparer clairement public et privé, plutôt que de modifier la main RT au hasard.

RT_PUB=$(aws ec2 create-route-table --vpc-id "$VPC_ID"   --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=lab-rt-public}]'   --query RouteTable.RouteTableId --output text)

aws ec2 create-route --route-table-id "$RT_PUB"   --destination-cidr-block 0.0.0.0/0 --gateway-id "$IGW_ID"

aws ec2 associate-route-table --route-table-id "$RT_PUB" --subnet-id "$SUBNET_PUB"

RT_PRIV=$(aws ec2 create-route-table --vpc-id "$VPC_ID"   --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=lab-rt-private}]'   --query RouteTable.RouteTableId --output text)

aws ec2 associate-route-table --route-table-id "$RT_PRIV" --subnet-id "$SUBNET_PRIV"

Le subnet privé n’a que la route locale 10.0.0.0/16 — pas d’Internet. Pour yum/SSM plus tard : VPC endpoints ou NAT (coût). La route la plus spécifique gagne ; 0.0.0.0/0 est le filet « tout le reste » vers l’IGW (public) ou absente (privé). Sans association explicite, un subnet retombe sur la main RT — évitez d’y coller Internet.

Étape 5 — Test minimal (option EC2)

Lancez une micro EC2 dans SUBNET_PUB avec SG SSH/SSM : elle reçoit une IP publique et sort via IGW.
Une EC2 dans SUBNET_PRIV : pas d’IP publique, pas de route 0.0.0.0/0 — ping Internet échoue (attendu).

aws ec2 describe-route-tables --route-table-ids "$RT_PUB" "$RT_PRIV"   --query 'RouteTables[].{Name:Tags[?Key==`Name`].Value|[0],Routes:Routes}'

Si le test public échoue : vérifiez IGW attached, association RT↔subnet, map-public-ip-on-launch, et SG. Le routage seul ne remplace pas les Security Groups (SG vs NACL).

VPC par défaut vs VPC custom

Le Default VPC (/16 + subnet public par AZ) permet de démarrer vite (labs EC2 précoces). En archi réelle / examen « design », on préfère un VPC custom : CIDR choisi, séparation public/privé, pas d’exposition par défaut. Ne supprimez le default VPC que si vous savez pourquoi (certains workshops le demandent — sinon gardez-le).

Étape 6 — NAT Gateway : pourquoi on ne le crée pas ici

Composant Rôle Coût lab
NAT Gateway Sortie Internet depuis subnet privé $$ / heure + data
NAT instance DIY EC2 Moins cher, plus d’ops
VPC endpoints Accès S3/SSM/ECR sans Internet Souvent mieux pour labs

Pour la certif : NAT dans subnet public, route privée 0.0.0.0/0 → nat-…. Ne le laissez jamais allumé « pour demain ». En lab SSM/S3, préférez des interface/gateway endpoints.

Multi-AZ (prochaine brique)

En prod vous dupliquez public/privé dans ca-central-1b (10.0.3.0/24, 10.0.4.0/24). Un ALB span plusieurs AZ ; une base RDS Multi-AZ aussi. Ce lab mono-AZ suffit pour comprendre IGW + RT ; le tuto ALB réutilisera le pattern. Convention courante : pairs impairs = public, pairs = privé — l’important est la lisibilité du plan d’adressage.

Étape 7 — Vérification

aws ec2 describe-vpcs --vpc-ids "$VPC_ID" --region ca-central-1
aws ec2 describe-subnets --filters Name=vpc-id,Values="$VPC_ID"
aws ec2 describe-internet-gateways --filters Name=attachment.vpc-id,Values="$VPC_ID"

Checklist : VPC /16 · 2 subnets · IGW attached · RT public → IGW · RT privé sans IGW · tags Name · DNS support + hostnames · Region ca-central-1.

Nettoyage

Ordre typique (dépendances d’abord) : détacher/supprimer IGW → disassocier puis supprimer RT custom → supprimer subnets → supprimer VPC. La main route table part avec le VPC ; ne la supprimez pas à la main.

aws ec2 detach-internet-gateway --internet-gateway-id "$IGW_ID" --vpc-id "$VPC_ID"
aws ec2 delete-internet-gateway --internet-gateway-id "$IGW_ID"

# Disassociate + delete route tables custom (pas la main RT)
# Puis delete subnets, puis VPC — console « delete VPC » aide si dépendances

aws ec2 delete-subnet --subnet-id "$SUBNET_PUB"
aws ec2 delete-subnet --subnet-id "$SUBNET_PRIV"
# delete-route-table pour RT_PUB / RT_PRIV après disassociation
aws ec2 delete-vpc --vpc-id "$VPC_ID"

Contrôle anti-facture : describe-vpcs filtré Name=lab-vpc + describe-nat-gateways (liste vide). Gardez ce VPC s’il sert aux tutos SG/NACL, peering, ALB — sinon détruisez-le. Vérifiez qu’aucune NAT n’a été créée par erreur.

Erreurs fréquentes

Symptôme Cause probable Correction
Instance « privée » a Internet Route 0.0.0.0/0 sur sa RT Séparer RT publique/privée
Pas d’IP publique Subnet sans map-public-ip / pas d’IGW modify-subnet-attribute + IGW
DependencyViolation delete VPC ENI, SG, RT, IGW restants Supprimer dans l’ordre inverse
Chevauchement CIDR peering Même 10.0.0.0/16 des deux côtés Planifier CIDR disjoints
Subnet « public » sans Internet IGW non attached ou route absente Attach IGW + 0.0.0.0/0 → igw-…
Pas de hostname DNS EC2 DNS hostnames off sur VPC enable-dns-hostnames
Main RT polluée Route Internet sur main RT custom ; nettoyer main

Lab bonus (5 min) — prouver public vs privé

  1. Lancez une micro EC2 dans SUBNET_PUB avec SSM : curl -s --max-time 5 https://checkip.amazonaws.com → OK (IGW).
  2. Même test depuis SUBNET_PRIV (pas d’IP publique) → timeout (attendu sans NAT/endpoint).

Ce mini-lab ancre : même VPC, deux destinées selon la route table — cœur du design SA.

Quiz (5 questions)

1. Une route 0.0.0.0/0 → IGW sur un subnet signifie surtout : – A. Subnet isolé
– B. Trafic Internet IPv4 via Internet Gateway (subnet public typique)
– C. Obligatoirement une NAT

2. Un subnet privé sans NAT ni endpoint : – A. Accède à S3 public facilement
– B. N’a pas de route Internet par défaut
– C. Est illégal dans AWS

3. Pourquoi activer DNS hostnames sur le VPC ? – A. Pour facturer moins
– B. Pour des noms DNS utiles (EC2/public hostnames)
– C. Pour remplacer Route 53

4. Un subnet AWS est toujours lié à : – A. Plusieurs Regions
– B. Une seule Availability Zone
– C. Un Transit Gateway obligatoire

5. Où place-t-on une NAT Gateway pour la sortie des subnets privés ? – A. Dans un subnet privé uniquement
– B. Dans un subnet public (route privée → nat-…)
– C. En dehors de tout VPC

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

Pour aller plus loin

Maillage série AWS (P1)

← Précédent CloudFront + S3
→ Suivant Security Groups vs NACL
Aussi VPC Peering · ALB · EC2 SSM

Retour parcours AWS — hub de la série et leçons sœurs.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *