Garden of KnowledgeApplied Sciences › Computer Science › Software › AWS
February 25, 2026

EC2 — Elastic Compute Cloud

EC2 est le service de machines virtuelles d’AWS. Il fournit des serveurs à la demande avec une grande variété de configurations matérielles.

Types d’instances§

Les instances sont organisées en familles selon leur usage.

FamilleOptimisationExemplesCas d’usage
t (Burstable)Généraliste, crédit CPUt3.micro, t3.mediumDev, sites à trafic variable
m (General Purpose)Équilibre CPU/RAMm6i.large, m7g.xlargeApplications web, BDD légères
c (Compute)CPU haute performancec6i.4xlarge, c7g.2xlargeEncodage vidéo, calcul scientifique
r (Memory)RAM importanter6i.8xlarge, r7g.16xlargeBDD in-memory, caches, Elasticsearch
g/p (GPU)GPU NVIDIAg4dn.xlarge, p4d.24xlargeMachine Learning, rendu 3D
i (Storage)I/O NVMe locali3.large, i4i.8xlargeBDD haute performance, Cassandra
d (Dense Storage)HDD densed3.8xlargeData warehouses, Hadoop
x (Extended Memory)RAM extrêmex2idn.32xlarge (4 To RAM)SAP HANA, bases en mémoire
inf (Inferentia)Inférence MLinf2.xlargeDéploiement de modèles ML

Notation : type.taille ex: m6i.xlarge

AMI — Amazon Machine Image§

Une AMI est un modèle contenant le système d’exploitation, les logiciels, les configurations et les données de démarrage nécessaires à une instance EC2.

# Lister les AMIs Ubuntu 24.04 officielles
aws ec2 describe-images \
    --owners 099720109477 \
    --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-noble-24.04-amd64-server-*" \
    --query 'sort_by(Images, &CreationDate)[-1].ImageId' \
    --output text

# Créer une AMI depuis une instance existante
aws ec2 create-image \
    --instance-id i-1234567890abcdef0 \
    --name "Mon-App-v2.1" \
    --description "AMI de production avec app v2.1"

Cycle de vie d’une instance§

launch


pending → running → stopping → stopped → starting → running

              └── shutting-down → terminated

stopped : instance arrêtée, RAM effacée, CPU libéré. Le stockage EBS persiste. Facturation EBS seule (pas CPU/RAM). Peut être redémarrée.

terminated : instance supprimée définitivement. Volume EBS root supprimé par défaut.

# Lancer une instance
aws ec2 run-instances \
    --image-id ami-0123456789abcdef0 \
    --instance-type t3.medium \
    --key-name ma-cle-ssh \
    --security-group-ids sg-12345 \
    --subnet-id subnet-12345 \
    --iam-instance-profile Name=MonProfil \
    --user-data file://script-init.sh \
    --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=mon-serveur}]'

# Arrêter / Démarrer / Terminer
aws ec2 stop-instances --instance-ids i-1234567890
aws ec2 start-instances --instance-ids i-1234567890
aws ec2 terminate-instances --instance-ids i-1234567890

# Lister les instances
aws ec2 describe-instances \
    --filters "Name=instance-state-name,Values=running" \
    --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,PublicIpAddress,Tags[?Key==`Name`].Value|[0]]' \
    --output table

EBS — Elastic Block Store§

Volumes de stockage persistants attachés aux instances EC2.

TypeUsageIOPS maxDébit max
gp3 (SSD généraliste)Défaut recommandé16 0001 000 Mo/s
gp2 (SSD généraliste)Ancien standard16 000250 Mo/s
io2 Block ExpressBDD critiques256 0004 000 Mo/s
st1 (HDD séquentiel)Logs, Kafka500500 Mo/s
sc1 (HDD froid)Archives250250 Mo/s
# Créer un volume EBS
aws ec2 create-volume \
    --volume-type gp3 \
    --size 100 \
    --availability-zone eu-west-1a \
    --iops 6000 \
    --throughput 500

# Attacher à une instance
aws ec2 attach-volume \
    --volume-id vol-1234567890 \
    --instance-id i-1234567890 \
    --device /dev/sdf

# Snapshot (sauvegarde ponctuelle)
aws ec2 create-snapshot \
    --volume-id vol-1234567890 \
    --description "Backup avant migration"

Security Groups§

Les Security Groups sont des firewalls virtuels stateful associés aux instances.

Stateful : si une connexion sortante est autorisée, la réponse entrante est automatiquement autorisée (et vice versa). Différent des NACLs (stateless).

# Créer un Security Group
aws ec2 create-security-group \
    --group-name sg-app-web \
    --description "SG pour serveurs web" \
    --vpc-id vpc-12345

# Autoriser le trafic entrant
aws ec2 authorize-security-group-ingress \
    --group-id sg-12345 \
    --protocol tcp --port 443 --cidr 0.0.0.0/0  # HTTPS depuis partout

aws ec2 authorize-security-group-ingress \
    --group-id sg-12345 \
    --protocol tcp --port 22 --cidr 10.0.0.0/8  # SSH depuis réseau privé seulement

aws ec2 authorize-security-group-ingress \
    --group-id sg-app \
    --protocol tcp --port 8080 \
    --source-group sg-alb    # Autoriser uniquement depuis l'ALB (par SG)

Auto Scaling Groups (ASG)§

Ajuste automatiquement le nombre d’instances selon la charge.

# Créer un Launch Template (modèle de configuration)
aws ec2 create-launch-template \
    --launch-template-name mon-template \
    --version-description "v1" \
    --launch-template-data '{
        "ImageId": "ami-12345",
        "InstanceType": "t3.medium",
        "SecurityGroupIds": ["sg-12345"],
        "IamInstanceProfile": {"Name": "MonProfil"}
    }'

# Créer l'ASG
aws autoscaling create-auto-scaling-group \
    --auto-scaling-group-name mon-asg \
    --launch-template "LaunchTemplateName=mon-template,Version=$Latest" \
    --min-size 2 \
    --max-size 10 \
    --desired-capacity 3 \
    --vpc-zone-identifier "subnet-abc,subnet-def" \
    --target-group-arns arn:aws:elasticloadbalancing:...

Scaling Policies :

Load Balancers§

TypeCouche OSIUsage
ALB (Application LB)7 (HTTP/HTTPS)Routing par chemin/host, WebSockets
NLB (Network LB)4 (TCP/UDP)Haute performance, IP fixe, gaming
CLB (Classic LB)4 et 7Legacy, ne plus utiliser
GWLB (Gateway LB)3Appliances réseau (firewall, IDS)
# Créer un ALB
aws elbv2 create-load-balancer \
    --name mon-alb \
    --subnets subnet-abc subnet-def \
    --security-groups sg-alb \
    --scheme internet-facing \
    --type application

# Créer un Target Group
aws elbv2 create-target-group \
    --name mes-instances \
    --protocol HTTP \
    --port 8080 \
    --vpc-id vpc-12345 \
    --health-check-path /health \
    --health-check-interval-seconds 30

# Créer un listener
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:... \
    --protocol HTTPS \
    --port 443 \
    --certificates CertificateArn=arn:aws:acm:... \
    --default-actions Type=forward,TargetGroupArn=arn:aws:...

User Data§

Script exécuté au premier démarrage de l’instance.

#!/bin/bash
# /etc/user-data.sh — Installation automatique au démarrage
set -euo pipefail

# Mise à jour
apt-get update -y
apt-get upgrade -y

# Installation de dépendances
apt-get install -y python3 python3-pip nginx

# Récupération du code depuis S3
aws s3 cp s3://mon-bucket/app.tar.gz /tmp/
tar -xzf /tmp/app.tar.gz -C /opt/

# Démarrage du service
systemctl enable --now mon-app
systemctl enable --now nginx

Metadata Service (IMDS)§

Chaque instance peut interroger ses propres métadonnées sans credentials.

# IMDSv2 (recommandé — protège contre les attaques SSRF)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
    -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# Récupérer l'ID de l'instance
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
    http://169.254.169.254/latest/meta-data/instance-id

# Récupérer les credentials IAM du rôle attaché
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
    http://169.254.169.254/latest/meta-data/iam/security-credentials/MON_ROLE

Modèles de tarification§

ModèleDescriptionÉconomie vs On-Demand
On-DemandPayer à l’heure, aucun engagement0%
Reserved (1 an)Engagement 1 an~40%
Reserved (3 ans)Engagement 3 ans~60%
Savings PlansEngagement en $/h, flexible~40-60%
SpotInstances disponibles à la demande du marché~60-90% mais interruptibles
Dedicated HostServeur physique dédiéVariable

Spot Instances : instances interruptibles avec 2 minutes de préavis. Idéales pour les workloads tolérants aux interruptions : calcul scientifique, rendering, Big Data, CI/CD.

—The Gardener