đ» AWS EC2 (Elastic Compute Cloud)
Guide complet IDEO-Lab : Instances, AMI, Login (SSH/PuTTY), Security Groups & Tarification.
Concept : EC2 (La VM)
IaaS (Infrastructure). Le "Serveur Virtuel" dans le Cloud.
EC2 IaaS VMConcept : AMI (L'OS)
Amazon Machine Image. Le "template" (OS + Logiciels).
AMI OSConcept : Instance Types (Le "Hardware")
Le "matériel" (t2.micro, m5.large...). Familles (T, M, C, R).
Lancement : 1. Choix de l'AMI
Choisir (Amazon Linux, Ubuntu, Windows...), Marketplace.
Launch AMILancement : 2. Choix du Type
Choisir la taille (t2.micro pour le Free Tier).
Lancement : 3. Key Pair (Clé SSH)
(Crucial) Fichier .pem. La "clé" de la porte (SSH).
Lancement : 4. Réseau (VPC)
VPC, Subnet (Public vs Privé), Auto-assign Public IP.
VPC Subnet PublicLancement : 5. Security Group (SG)
Le "Pare-feu" (Autoriser Port 22 (SSH), 80 (HTTP)).
Security Group FirewallLancement : 6. Stockage (EBS)
Le "Disque Dur" (Volume Root). (gp3, Taille en Go).
Connexion : SSH (Linux/Mac)
ssh -i key.pem user@ip, chmod 400.
Connexion : PuTTY (Windows)
PuTTYgen (.pem -> .ppk), PuTTY (Load .ppk).
Connexion : Session Manager (SSM)
(Moderne) Connexion (Web/CLI) sans Key Pair, sans Port 22.
SSM SécuritéInit : User Data (cloud-init)
Script (Bash) exécuté 1 fois au premier boot (apt update).
Init : IAM Role (Permissions)
(Sécurité) Donner des permissions (ex: S3) à l'EC2 sans clés.
IAM Role Best PracticeConfig : Elastic IP (EIP)
IP Publique Statique (Fixe). (Payante si non-attachée).
EIP IP StatiqueTarif 1 : On-Demand
Facturé à la seconde (flexible, prix plein).
On-DemandTarif 2 : Reserved (RI) / Savings Plans
Engagement (1-3 ans) pour réduction (40-60%).
Reserved Instances Savings PlansTarif 3 : Spot Instances
EnchÚres (Capacité AWS inutilisée). (Réduction 90%, interruptible).
Spot Instance StatelessBackup : EBS Snapshots
Backup (Incrémentiel) du disque (EBS) vers S3.
Snapshot EBSBackup : Custom AMI
"Golden Image". (Snapshot + Métadonnées de l'instance).
Custom AMI Golden ImageScaling : Auto Scaling Group (ASG)
HA (Auto-réparation) & Scalabilité (Scale-out/in).
ASG HA11.1. Serveur Web / API Backend (Général)
C'est le cas d'usage le plus simple. L'instance EC2 (ex: t3.micro, m6g.large) exécute un serveur web (Nginx, Apache, Caddy) ou une API (backend simple).
Dans cette architecture, l'EC2 est (généralement) "stateless" (sans état) et placée derriÚre un Application Load Balancer (ALB) et dans un Auto Scaling Group (ASG) pour la scalabilité et la résilience.
Architecture (Architecture 3-Tiers Standard)
(Internet) -> [ALB (Subnet Public)] -> [ASG (EC2-Web) (Subnet Privé)] -> [RDS (Subnet Isolé)]
Pourquoi EC2 (vs Lambda) ?
- Connexions persistantes : (ex: WebSockets) qu'Lambda (max 15 min) ne gĂšre pas bien.
- Complexité : ContrÎle total sur la configuration (
nginx.conf) et les modules. - CoĂ»t (Baseline) : Si vous avez un trafic constant (baseline) (ex: 100 req/sec, 24/7), EC2 (avec Savings Plan) est (souvent) moins cher que Lambda (facturĂ© Ă la requĂȘte/ms).
11.2. Serveur dâApplications (Django, Flask, Node.jsâŠ)
C'est une spécialisation du (11.1). L'EC2 exécute le runtime applicatif (ex: Gunicorn/uWSGI (Python), PM2 (Node.js), Tomcat (Java)).
Pourquoi EC2 (vs Beanstalk ou Lambda) ?
Vous utilisez EC2 (plutÎt qu'un PaaS comme Beanstalk ou FaaS comme Lambda) lorsque vous avez besoin de contrÎle total sur l'environnement d'exécution :
- Dépendances OS : L'application (Python/Django) a besoin de
apt-get install lib-geospatial-xyz(une librairie C/OS) qui n'est pas incluse dans les runtimes Lambda/Beanstalk. - Configuration Spécifique : Nécessité de "tuner" (optimiser) le Kernel (
sysctl.conf) (ex:net.core.somaxconn) pour des performances réseau (haute connexion) que le PaaS n'expose pas. - Workers Longue Durée : L'application (Django) utilise Celery (Workers) qui doit tourner (en
daemon) 24/7 (pas seulement 15 min comme Lambda). - Stockage Local : L'application a besoin d'un accĂšs (temporaire) trĂšs rapide Ă un disque local (ex: Instance Store (NVMe)) pour un traitement (que Lambda (
/tmp512MB) ne peut pas offrir).
11.3. Applications "Legacy" (Lift-and-Shift)
C'est la migration "Lift & Shift" (Tel quel). C'est le cas d'usage oĂč EC2 est (souvent) la seule option (car l'application "legacy" (ancienne) ne peut pas ĂȘtre modernisĂ©e (container/serverless)).
Scénarios (Migration "P1")
- (OS) Application Windows (ex: .NET 3.5) tournant sur Windows Server 2008 / 2012 (On-Premise).
- Solution : Lancer une EC2 (Windows) avec une AMI (Windows Server 2012) et y (ré)installer l'application (
.exe) (ou utiliser AWS Migration Service (MGN) pour cloner le disque).
- Solution : Lancer une EC2 (Windows) avec une AMI (Windows Server 2012) et y (ré)installer l'application (
- (Logiciel) Application "Monolithique" (ex: Oracle Forms, SAP R/3) qui dépend d'une version spécifique (ex: Java 6) ou de drivers matériels (ex: Clé USB "Dongle" (via VM Import/Export)).
- Solution : Lancer une EC2 (Linux/Windows) et recréer (manuellement) l'environnement exact.
- (Licence) Application (ex: Oracle DB) dont la licence (BYOL) est liĂ©e au matĂ©riel (Sockets/CĆurs physiques).
- Solution : Utiliser EC2 Dedicated Host (HÎte Dédié) (qui vous donne le serveur physique) pour la conformité de la licence.
11.4. Serveur de Bases de Données "Custom" (Self-Managed)
C'est le cas d'usage oĂč vous choisissez EC2 (IaaS) plutĂŽt que RDS (PaaS).
(RÚgle) : Toujours utiliser RDS (ou Aurora) (managé) d'abord. N'utilisez EC2 (self-managed) que si RDS ne peut (absolument) pas répondre au besoin.
Pourquoi EC2 (vs RDS) ? (Besoin de ContrĂŽle)
- Moteur Non-Supporté : Vous avez besoin d'une BDD que RDS ne propose pas (ex: MongoDB, Cassandra, Neo4j (Graphe), ClickHouse (Analytics)).
- Version Non-Supportée : Vous avez (Legacy) besoin de
PostgreSQL 9.6(que RDS n'offre plus) ou (Bleeding Edge) dePostgreSQL 17 (Beta)(que RDS n'offre pas encore). - Extension Non-Supportée : Vous avez besoin d'une extension PostgreSQL (ex:
timescaledb) qui n'est pas (encore) supportée (approuvée) par RDS. - AccÚs OS (Root) : Vous (DBA) avez besoin d'un accÚs
root(SSH) au serveur (OS) pour installer un agent de monitoring (custom), "tuner" (optimiser)sysctl.conf(Kernel) oupostgresql.conf(paramÚtres avancés "unsafe" que RDS bloque).- (Alternative : RDS Custom (pour Oracle/SQL Server) offre l'accÚs SSH).
(Inconvénient) : VOUS devenez 100% responsable des Patchs, Backups (Snapshots), de la HA (Multi-AZ) (Replication, Failover), et du Scaling (Read Replicas).
11.5. Machine GPU (Intelligence Artificielle / Machine Learning)
EC2 fournit des "Instances Accélérées" (GPU) pour les 2 phases du ML : Training (Entraßnement) et Inference (Déploiement).
1. Training (EntraĂźnement de ModĂšles) (Cher, Puissant)
- Instances (Famille P, Trn) :
p4d(GPU Nvidia A100),p5(GPU Nvidia H100),trn1(AWS Trainium). - Usage : Entraßner (calcul matriciel intensif) des modÚles (LLM, Vision) de zéro (ex:
model.fit()sur des TĂ©raoctets de donnĂ©es). - RĂ©seau : NĂ©cessite une bande passante rĂ©seau extrĂȘme (EFA - Elastic Fabric Adapter) pour le "Distributed Training" (ex: 32 instances
p5qui travaillent ensemble).
2. Inference (Inférence / Prédiction) (Moins cher, Rapide)
- Instances (Famille G, Inf) :
g5(GPU Nvidia A10G),inf2(AWS Inferentia2). - Usage : Héberger (servir) le modÚle (déjà entraßné) (
model.predict()) derriÚre une API (ex: via AWS SageMaker Endpoints, qui utilise ces EC2 en backend). - Objectif : Coût (
$) par inférence le plus bas, Latence (ms) la plus faible. (Inferentia (inf) est souvent le meilleur ratio prix/perf (vs GPU Nvidia) pour l'inférence).
11.6. Rendering (Rendu) Vidéo / 3D (VFX)
Cas d'usage (similaire au 11.5) qui utilise des instances (GPU) pour le calcul graphique (non-ML).
- Instances (Famille G) :
g4dn,g5. (GPU Nvidia (ex: T4, A10G) + Drivers GRID (pour le graphique/workstations)). - Usage :
- Workstations Virtuelles (Studio) : (Streaming (Protocole NICE DCV)) L'artiste (3D) (Ă la maison) se connecte (via DCV) Ă une instance
g5(puissante) (dans le Cloud) qui exécute Maya / Blender / Nuke (sur une AMI Windows/Linux custom). - Render Farms (Fermes de Rendu) : (Batch) Lancement de 1000 instances EC2 (Spot (9.4)) (
g5ouc5(CPU-rendering)) (via un orchestrateur (ex: AWS Thinkbox Deadline)) pour calculer (renderer) les 100 000 "frames" (images) d'un film (VFX).
- Workstations Virtuelles (Studio) : (Streaming (Protocole NICE DCV)) L'artiste (3D) (Ă la maison) se connecte (via DCV) Ă une instance
(Spot (9.4)) : Le "Rendering" (Batch) est le cas d'usage parfait pour les Instances Spot (jusqu'à -90% de réduction), car si l'instance (Frame 50) est interrompue (préavis 2min), l'orchestrateur (Deadline) la relance (simplement) sur une autre instance Spot (Frame 50 - retry).
11.7. HPC (High Performance Computing)
Calcul Scientifique (Météo, Fluides (CFD), Génomique, Simulation (Crash-test)).
Architecture (Tightly-Coupled vs Loosely-Coupled)
1. Tightly-Coupled (MPI) (Ex: Simulation Fluides)
Les NĆuds (EC2) doivent communiquer Ă©normĂ©ment (et Ă trĂšs faible latence) entre eux (MPI - Message Passing Interface).
- Instances :
Hpc7g(Graviton),Hpc6a(AMD). - Réseau : EFA (Elastic Fabric Adapter) (Bande passante 100/200 Gbps, Latence microsecondes, OS-Bypass (Kernel)).
- Placement : Placement Group (Cluster) (Garantit que les NĆuds sont sur le mĂȘme Rack physique).
- Stockage (Partagé) : FSx for Lustre (SystÚme de fichiers (parallÚle) ultra-performant).
2. Loosely-Coupled (Batch) (Ex: Analyse Génomique)
"Embarrassingly parallel". 1000 NĆuds (EC2) qui font 1000 calculs indĂ©pendants (ne communiquent pas entre eux). (Similaire au Rendering (11.6)).
- Instances : Familles C (Compute) (
c6g,c7g) ou M (General) (m6g). - Réseau : ENA (Standard) (Pas besoin d'EFA).
- Placement : (Aucun) (Spread (par défaut)).
- Orchestration : AWS Batch (PaaS) (qui gÚre la file (Job Queue) et provisionne (automatiquement) des EC2 (Spot ou On-Demand) pour exécuter les jobs (Conteneurs Docker)).
10.1. EC2 + Systems Manager (SSM)
SSM est la "boßte à outils" (PaaS) d'AWS pour l'administration et l'automatisation des EC2, sans nécessiter d'accÚs SSH (ni de Bastion).
(Pré-requis) : L'instance EC2 doit avoir l'Agent SSM (installé par défaut) et un IAM Role (attaché) avec la policy AmazonSSMManagedInstanceCore.
Outils d'Automatisation SSM
- Run Command : Exécute un script (
bash,PowerShell) (ex: "Restart-Nginx") à la demande (Ad-Hoc) sur une (ou 1000) instance(s) cible(s) (via Tags). - Patch Manager : Automatise le patching OS (Sécurité). Vous définissez des "Baselines" (RÚgles, ex: "Installer Patchs Critiques, 7 jours aprÚs release") et des "Maintenance Windows" (Quand patcher, ex: Dimanche 2h du matin).
- State Manager : Garantit (enforce) un "état" (Configuration Management (10.5)). (Ex: "S'assure (toutes les 30 min) que l'Agent CloudWatch (7.2) est
running"). - Automation (Documents) : Crée des "Runbooks" (workflows) complexes. (Ex: "Automatiser le Hardening CIS (4.5)", "Créer une AMI (10.2)", "Redémarrer une instance EC2 et vérifier son état").
- Session Manager : (AccÚs) Permet un accÚs Shell (CLI) sécurisé (via IAM, sans Port 22 ouvert).
10.2. EC2 Image Builder (Pipeline d'AMI)
C'est la méthode moderne (DevOps) pour automatiser la création d'AMIs "Golden Images" (sécurisées, patchées, et à jour).
Il remplace les scripts packer (legacy) ou les "backups" (Snapshots) manuels d'instances.
Composants d'un Pipeline Image Builder
- 1. Image Recipe (Recette) :
- Source Image (Source) : L'AMI de base (ex:
Ubuntu 22.04 LTS(derniÚre version)). - Components (Ingrédients) : Les scripts d'installation/configuration (ex:
yum install nginx,install-cloudwatch-agent,cis-hardening-level-1(Script de durcissement)).
- Source Image (Source) : L'AMI de base (ex:
- 2. Infrastructure Configuration :
- OĂč "cuire" (Bake) l'image ? (Type Instance (
t3.micro), VPC/Subnet Privé, IAM Role (Build)).
- OĂč "cuire" (Bake) l'image ? (Type Instance (
- 3. Distribution Settings :
- OĂč "livrer" l'AMI finale ? (ex: Donner le nom
mon-app-prod-). - (Optionnel) Copier l'AMI (automatiquement) vers d'autres Régions (ex:
eu-central-1) (pour la DR). - (Optionnel) Partager l'AMI (automatiquement) avec d'autres Comptes AWS (ex: Compte "Prod").
- OĂč "livrer" l'AMI finale ? (ex: Donner le nom
- 4. Pipeline :
- L'orchestrateur (le "Cron") qui lance la "Recette" (ex: "Tous les 1er du mois" (pour patcher) ou "AprĂšs un commit (Git) sur la Recette").
10.3. Infrastructure as Code (IaC)
Le principe de l'IaC est de définir et provisionner votre infrastructure (VPC, EC2, SG, IAM...) en utilisant du code (fichiers texte) (ex: YAML, HCL, Python) plutÎt qu'en cliquant (manuel) dans la console AWS.
Avantages : Reproductibilité (Dev=Prod), Audit (Git blame), Peer Review (Pull Requests), Automatisation (CI/CD).
| Outil | Langage | Avantages | Inconvénients |
|---|---|---|---|
| AWS CloudFormation | YAML / JSON | AWS Natif. Intégré (StackSets). Gestion "atomique" (Transactions, Rollback). | TrÚs Verbeux (1000 lignes YAML pour 1 EC2). Difficile à lire/maintenir. |
| AWS CDK (Cloud Dev Kit) | Python, TypeScript, Go... | Moderne (AWS). (Code "Impératif" (Python) qui compile en CloudFormation (YAML)). Constructs (L3) (ex: new Vpc(...) crée 1 VPC, 6 Subnets, 2 NATs... en 1 ligne). | (Courbe d'apprentissage). |
| Terraform (HashiCorp) | HCL (Langage DĂ©claratif) | Standard de l'Industrie. Multi-Cloud (AWS, Azure, GCP, VMWare...). ĂcosystĂšme (Modules) immense. | GĂšre son propre "Ătat" (terraform.tfstate) (un fichier JSON (Ă stocker sur S3) qui "mappe" le code aux ressources rĂ©elles). |
# Exemple (Terraform HCL) - Simple et lisible
resource "aws_instance" "web" {
ami = "ami-0abcdef123"
instance_type = "t3.micro"
vpc_security_group_ids = [ aws_security_group.web.id ]
tags = { Name = "Serveur-Web-Prod" }
}
10.4. CI/CD (Déploiement Continu sur EC2)
Comment (automatiquement) déployer votre nouveau code applicatif (ex: app-v2.py) sur votre flotte d'EC2 (v1) (gérée par un ASG) ?
1. AWS CodeDeploy (PaaS de Déploiement)
C'est le service AWS qui gÚre le "déploiement" (physique) sur la flotte EC2.
- Pré-requis : L'Agent CodeDeploy (
codedeploy-agent) doit tourner sur les EC2s. appspec.yml: Un fichier (YAML) (dans votre code) qui dit à l'Agent "Quoi faire" (Hooks) :BeforeInstall: (ex:systemctl stop nginx)Install: (ex: Copier les nouveaux fichiers (v2) de/sourcevers/var/www/html)AfterInstall: (ex:chmod 755 ...)ApplicationStart: (ex:systemctl start nginx)ValidateService: (ex:curl http://localhost/health) (Vérifie siv2a démarré).
Stratégies de Déploiement (CodeDeploy)
- In-Place (Sur Place) : (Risqué / Downtime) (
AllAtOnceouRolling). Met à jour les instances existantes (v1->v2). (S'il échoue, l'app est cassée). - Blue/Green (Bleu/Vert) : (Sûr / Zéro Downtime)
- (ASG) L'ASG (
v1) (Bleu) tourne. - (CodeDeploy) Crée (via l'ASG) un nouveau "Groupe de Remplacement" (Vert) (avec
v2). - (CodeDeploy) Teste (fumée) le (Vert).
- (CodeDeploy) Demande au Load Balancer (ALB) de basculer (Shift) 100% du trafic (Public) de (Bleu) vers (Vert).
- (CodeDeploy) (AprĂšs 1h (Wait)) Termine (Tue) l'ancienne flotte (Bleu).
- (ASG) L'ASG (
Orchestrateurs (CI/CD)
- AWS CodePipeline : L'orchestrateur 100% Natif AWS. (Source: CodeCommit/S3/GitHub -> Build: CodeBuild -> Deploy: CodeDeploy).
- GitHub Actions / GitLab CI : (Populaire) (Trigger:
on push) -> (Runner) 1. Build Image/ZIP -> 2. Push (S3/ECR) -> 3. (CLI)aws deploy create-deployment ...(Déclenche CodeDeploy (Blue/Green)).
10.5. Configuration Management (vs Immutable)
Comment s'assurer que vos 100 EC2 (longue durée) sont (et restent) configurées à l'identique (ex: ntp.conf, sshd_config) ?
Approche 1 : "Mutable" (Gestion de Configuration)
Vous "patchez" (modifiez) les serveurs (Pets) (longue durée) (ex: BDD self-managed, Active Directory).
- Ansible : (Populaire) Agentless (Sans Agent) (ModĂšle "Push"). (Utilise SSH (ou SSM (10.1)) pour se connecter et "pousser" (push) la configuration (Playbooks YAML)). (Bon pour le "bootstrap" (1er setup) ou tĂąches ad-hoc).
- Chef / Puppet / SaltStack : (Enterprise / Legacy) Agent-based (ModĂšle "Pull"). (Un Agent (ex:
chef-client) tourne sur chaque EC2, et "pull" (tire) (toutes les 30 min) sa configuration (Recipes) depuis un "Master" (Serveur Chef/Puppet)). (Lourd, mais garantit la convergence de l'état). - AWS SSM State Manager (10.1) : (Moderne AWS) L'alternative "Agent-based" (Agent SSM) (Pull/Enforce) à Chef/Puppet/Ansible.
Approche 2 : "Immutable Infrastructure" (Moderne)
Vous ne "patchez" jamais un serveur (Cattle) (jetable) en production.
Flux (Blue/Green) :
- (Code) (Jour 1) Vous trouvez un bug (
nginx.conf v1). - (Dev) Vous modifiez le Component (10.2) (
nginx.conf v2). - (Pipeline) EC2 Image Builder (10.2) "Bake" (cuit) une nouvelle AMI (
mon-app-v2) (contenantnginx.conf v2). - (Pipeline) CodeDeploy (10.4) (Blue/Green) :
- Démarre une nouvelle flotte (Green) (ASG) (avec l'AMI
v2). - Bascule le trafic (ALB) sur (Green).
- Termine (Tue) l'ancienne flotte (Blue) (qui avait
nginx.conf v1).
- Démarre une nouvelle flotte (Green) (ASG) (avec l'AMI
(Résultat) : La configuration est "atomique" (l'AMI). Pas de "drift" (dérive) de configuration. Rollback facile (il suffit de re-scaler l'ASG (Bleu) v1).
Estimation de Coût (On-Demand)
Attention : Ce calculateur utilise des prix fictifs (estimés) à des fins de démonstration (je n'ai pas accÚs aux API de pricing live). Les prix réels varient (à la minute) et selon la Région.
Résultats (Estimés)
Prix (USD) $
Coût Horaire:
$0.0000
Coût Mensuel (730h):
$0.00
Prix (EUR) âŹ
Coût Horaire (Estimé):
âŹ0.0000
Coût Mensuel (Estimé 730h):
âŹ0.00
Disclaimer & Limitations (Lecture Obligatoire)
ATTENTION : Je suis un assistant IA. Je n'ai pas accÚs aux API de pricing (tarification) en temps réel d'AWS.
Les prix utilisés dans ce calculateur sont des données fictives (estimations statiques) basées sur des exemples connus, et sont utilisés uniquement pour démontrer le fonctionnement du calculateur JavaScript.
Ce qui est exclu de ce calcul :
- Prix Réels : Les prix AWS (On-Demand) changent constamment.
- Taux de Change : Le taux (USD -> EUR) est fixé (fictif) dans le script (0.92) et n'est pas un taux de change réel.
- Stockage EBS : Le prix du Volume EBS (Disque Dur) (facturé au GB/mois et aux IOPS) n'est PAS inclus.
- Data Transfer : Le coût du transfert de données (Sortant/Egress) (facturé au GB) n'est PAS inclus.
- Autres Coûts : N'inclut pas les EIPs (non-attachées), les Snapshots, le Detailed Monitoring, etc.
Conclusion : Utilisez cet outil pour voir (conceptuellement) comment le prix change (ex: Linux vs Windows, us-east-1 vs eu-west-3), mais utilisez toujours le Calculateur Officiel AWS pour des estimations réelles.
9.1. On-Demand Instances (Ă la demande)
C'est le modÚle de facturation par défaut. Il est 100% flexible (Pay-as-you-go).
- Principe : Vous payez pour la capacité de calcul (
c5.large) Ă la seconde (avec un minimum de 60 secondes pour la plupart des instances Linux/Windows). - Avantage : FlexibilitĂ© totale. Pas d'engagement. Vous dĂ©marrez (Start) et arrĂȘtez (Stop/Terminate) quand vous voulez.
- Inconvénient : C'est le prix le plus élevé (le "prix public").
- Cas d'usage :
- Dev/Test : Workloads (charges) temporaires.
- Nouvelles Applications : Quand la charge est inconnue ou imprévisible.
- Pics (Spiky) : Utilisé par les Auto Scaling Groups (ASG) pour gérer les pics de trafic (Scale-Out) au-dessus de votre "baseline" (couverte par RI/SP).
9.2. Reserved Instances (RI) (ModĂšle "Legacy")
C'est l'ancien modÚle d'engagement. Il offre une réduction importante (jusqu'à -72% vs On-Demand) en échange d'un engagement (1 an ou 3 ans) sur une famille d'instance spécifique (ex: m5) dans une Région spécifique (ex: eu-west-3).
(Note) : Les RIs sont (aujourd'hui) largement remplacées par les Savings Plans (9.3) (plus flexibles), mais elles sont toujours utilisées (notamment pour la garantie de capacité).
| Type RI | Flexibilité | Réduction | Cas d'usage |
|---|---|---|---|
| Standard RI | Rigide (Verrouillé sur Famille/OS/Région/Tenancy). | La plus élevée. | Charge 100% stable et prévisible (ex: un m5.large qui tourne 24/7/365). |
| Convertible RI | Flexible (Permet de changer de Famille/OS/Tenancy). | Plus faible (que Standard). | (Remplacé par Compute Savings Plan (9.3)). |
Garantie de Capacité (Capacity Reservation)
Un avantage (parfois) oubliĂ© des RIs (Zonales) : elles garantissent (rĂ©servent) la capacitĂ© (hardware) pour vous dans une AZ spĂ©cifique. (MĂȘme si AWS est en "rupture de stock" sur p4d.24xlarge dans us-east-1a, votre RI est garantie).
9.3. Savings Plans (SP) (ModĂšle Moderne)
C'est le modÚle d'engagement moderne (recommandé). Il offre la flexibilité de l'On-Demand avec la réduction des RIs.
Principe : Vous ne réservez pas une "instance" (m5.large). Vous vous engagez à dépenser un montant ($) (ex: $10.00 / heure) en "Compute" (Calcul) pendant 1 ou 3 ans.
Types de Savings Plans
| Type SP | FlexibilitĂ© (Quoi & OĂč) | RĂ©duction | Usage (RecommandĂ©) |
|---|---|---|---|
| Compute Savings Plan | Totale (FlexibilitĂ© maximale). S'applique automatiquement Ă : âą EC2 (Toute Famille, Toute RĂ©gion) âą AWS Fargate (Conteneurs) âą AWS Lambda (Serverless) | ĂlevĂ©e (similaire aux RI Convertibles). | (RecommandĂ© par DĂ©faut). IdĂ©al si vous (migrez (rĂ©gion), modernisez (EC2->Fargate), changez (Intel->Graviton)). |
| EC2 Instance Savings Plan | Rigide (Verrouillé). S'applique uniquement à : ⹠1 Famille d'Instance (ex: m6g)⹠1 Région (ex: eu-west-3) | La plus élevée (similaire aux RI Standard). | (Identique RI Standard) Si vous avez une charge 100% stable (ex: 10 m6g à Paris pour 3 ans). |
(Flux) : Vous vous engagez ($10/h). AWS facture votre usage (EC2, Fargate, Lambda) au tarif (réduit) Savings Plan (jusqu'à $10/h), puis facture tout surplus (ex: $12/h) au tarif On-Demand (9.1).
9.4. Spot Instances (EnchĂšres)
C'est le modÚle "basé enchÚres". Vous "achetez" la capacité EC2 inutilisée (spare) d'AWS.
Avantages & Inconvénients
- Avantage (Coût) : Réduction massive (jusqu'à -90%) par rapport au prix On-Demand.
- Inconvénient (Risque) : Interruptible. Si AWS a besoin de cette capacité (pour un client On-Demand/RI) ou si le "prix Spot" (enchÚre) dépasse votre "prix max" (optionnel), AWS termine (tue) votre instance (avec un préavis (Warning) de 2 minutes).
Cas d'Usage (Workloads Tolérants aux Pannes)
(RĂšgle d'Or) : Ne jamais utiliser Spot pour un workload (charge) qui ne peut pas ĂȘtre interrompu (ex: BDD Master, API Web unique).
Idéal pour :
- Batch Processing : (Calcul scientifique, analyse génomique). (Si le job est tué, on le relance plus tard).
- Rendering Farms : (Rendu 3D / VFX).
- CI/CD : (ex: Jenkins Workers, GitLab Runners).
- Big Data (Stateless) : (ex: NĆuds "Worker" Spark / EMR).
- Auto Scaling Group (Mixte) : (Bonne Pratique) Configurer l'ASG (8.1) pour utiliser une "Mixed Instance Policy" (ex: 30% On-Demand (Baseline stable) + 70% Spot (Scaling pas cher)).
9.5. Dedicated Hosts & Dedicated Instances
Ces deux modÚles garantissent que vos instances EC2 tournent sur un serveur physique (Hardware) qui vous est dédié (isolé) (pas de "voisins" (multi-tenant)).
Cas d'Usage (Compliance & Licence)
- 1. Compliance (Réglementaire) : Pour des workloads (charges) trÚs sensibles (ex: HDS (Santé France), HIPAA (Santé US), PCI) qui (parfois) exigent une isolation physique (matérielle) (et pas seulement virtuelle (Hyperviseur)).
- 2. Licences (BYOL - Bring Your Own License) : Pour des logiciels "legacy" (anciens) (ex: Oracle DB, Microsoft SQL Server) dont la licence est (stupidement) liĂ©e au matĂ©riel physique (Sockets, CĆurs).
| ModĂšle | Niveau de ContrĂŽle | Facturation | Usage |
|---|---|---|---|
| Dedicated Instances | Niveau Instance (Facile). Vous demandez " Tenancy=Dedicated". AWS garantit qu'elle tourne sur un HÎte "mono-client". | Par Instance (/heure) (+Frais $/heure/région). | Compliance (Isolation simple). |
| Dedicated Hosts | Niveau HĂŽte (Serveur) (ContrĂŽle total). Vous "allouez" (rĂ©servez) tout le serveur physique (ex: m5.metal). | Par HĂŽte (/heure) (Cher). | Licences (BYOL) (Vous contrĂŽlez l'affinitĂ© CĆurs/Sockets). |
8.1. Auto Scaling Group (ASG)
L'ASG est le service (PaaS) qui automatise le cycle de vie (création/destruction) des instances EC2 (IaaS) pour gérer la scalabilité (performance) et la haute disponibilité (pannes).
Configuration (Launch Template) : L'ASG utilise un "Launch Template" (ModÚle de Lancement) qui définit quoi lancer (AMI, Type d'Instance, SG, IAM Role, etc.).
Configuration (Limites)
MinSize(Taille Min) : (ex: 2) Le nombre d'instances minimum (garanti) que l'ASG doit maintenir (pour la HA).DesiredCapacity(Désiré) : (ex: 3) L'état "normal" (l'ASG démarre 3 instances).MaxSize(Taille Max) : (ex: 10) Le nombre maximum (plafond) que l'ASG ne dépassera jamais (pour le contrÎle des coûts).
Fonctionnalités (Scaling & Health)
- Scale-Out (Ajouter) : (Politique de Scaling) Si
CPUUtilization > 70%(Alarme CloudWatch) -> AugmenterDesiredCapacity(ex: +2 instances). - Scale-In (Retirer) : (Politique de Scaling) Si
CPUUtilization < 30%(Alarme CloudWatch) -> DiminuerDesiredCapacity(ex: -1 instance). - Health Checks (ELB) : (Auto-Réparation / Auto-Heal) L'ASG utilise les "Health Checks" (Sonde de santé) du Load Balancer (8.2). Si l'ALB marque une EC2 (
i-123) commeUnhealthy(ex: App crashĂ©e) -> L'ASG termine (tue)i-123et lance (automatiquement) une nouvelle instance (i-456) (pour revenir ĂDesiredCapacity). - Cooldowns (Temps de Rechargement) : (ex: 300 sec) Une "pĂ©riode de grĂące" (temporisation) aprĂšs un Scale-Out. L'ASG attend 5 minutes (que la nouvelle instance dĂ©marre, prenne du trafic, et que le CPU (mĂ©trique) se stabilise) avant d'Ă©valuer (Ă nouveau) si un autre Scale-Out est nĂ©cessaire. (EmpĂȘche les "flapping" (oscillations)).
- Instance Refresh (Mise Ă jour) : (Rolling Update) Permet de mettre Ă jour la flotte (ex: nouvelle AMI, nouveau Type d'Instance). L'ASG remplace (automatiquement) les instances (une par une, ou 10% par 10%) (tue v1 -> lance v2 -> attend v2 "Healthy" -> tue v1 (next)...) tout en respectant
MinSize(pas de downtime).
8.2. Elastic Load Balancing (ELB)
ELB est un service (PaaS) qui distribue (répartit) le trafic (entrant) sur plusieurs cibles (ex: Instances EC2 (ASG)). C'est le point d'entrée (DNS) de votre application.
| Type | Niveau (Layer) | Protocole | Usage (Cas d'usage) |
|---|---|---|---|
| ALB (Application) | Niveau 7 (HTTP) | HTTP, HTTPS, WebSocket, gRPC | (Recommandé) Applications Web, APIs REST, Microservices. (Routage "Intelligent" (Content-based) : /api/* -> ASG-API, /images/* -> ASG-Images).(Terminaison SSL (ACM), Intégration OIDC/Cognito, WAF). |
| NLB (Network) | Niveau 4 (Transport) | TCP, UDP, TLS | (Ultra-Haute Performance) (Millions req/sec, latence ultra-faible). (Adresse EIP Statique (Fixe) par AZ). (Usage: Gaming (UDP), IoT, BDD (Haute Perf), trafic non-HTTP). |
| CLB (Classic) | Niveau 4 / 7 (Hybride) | TCP, SSL, HTTP | (Ancien / Legacy) Ne plus utiliser. (Remplacé par ALB/NLB). |
8.3. Déploiement Multi-AZ (Haute Disponibilité)
(La RĂšgle d'Or de la RĂ©silience) Une Availability Zone (AZ) est un Datacenter (physique) isolĂ©. Pour ĂȘtre "Haute DisponibilitĂ©" (HA) (rĂ©sister Ă une panne d'un datacenter), une application doit ĂȘtre dĂ©ployĂ©e sur (au minimum) 2 AZs.
Importance du Placement Multi-AZ (ASG)
(Mauvaise Pratique) : Configurer l'ASG (8.1) pour utiliser uniquement subnet-private-a (qui est dans AZ-A).
(Panne) : L'AZ-A (Datacenter) tombe (panne électrique).
(Résultat) : L'ASG (Min=2) veut lancer 2 instances, mais le seul Subnet (subnet-private-a) qu'il connaßt est mort. (Downtime Total).
(Bonne Pratique) : Configurer l'ASG (8.1) pour utiliser deux Subnets : subnet-private-a (AZ-A) et subnet-private-b (AZ-B).
(Panne) : L'AZ-A tombe.
(Résultat) : L'ASG détecte que subnet-private-a est inaccessible. Il lance (automatiquement) les 2 instances (Min=2) dans le seul Subnet (sain) qu'il lui reste : subnet-private-b (AZ-B). (Application en ligne).
Policies ASG Cross-Zone
- ASG (Ăquilibrage) : L'ASG tente (par dĂ©faut) de garder un nombre Ă©gal d'instances (ex: 3 en AZ-A, 3 en AZ-B). C'est la policy
AZRebalance. - ALB (Cross-Zone Load Balancing) : (ActivĂ© par dĂ©faut / Payant) Le nĆud ALB (en AZ-A) peut (et va) envoyer du trafic vers les EC2 (en AZ-B), et vice-versa. (Garantit une rĂ©partition 50/50 du trafic, mĂȘme si l'ASG (ex: 1 en A, 3 en B) est dĂ©sĂ©quilibrĂ©).
8.4. Architecture Résiliente Typique (Multi-AZ 3-Tiers)
C'est la mise en pratique (complĂšte) de tous les concepts (VPC (9.4) + RDS (3.1) + EC2 (8.3)).
(Internet) --> [Route 53 (DNS)]
|
v
[ đ Subnet Public (AZ-A) ] [ đ Subnet Public (AZ-B) ]
| |
+-- [ âïž ALB (Node 1) ] +-- [ âïž ALB (Node 2) ] <-- (Health Checks)
| (Cross-Zone) |
+---------- (Trafic) --+
| |
v v
[ đ Subnet PrivĂ© (AZ-A) ] [ đ Subnet PrivĂ© (AZ-B) ]
| (Route -> NAT-A) | (Route -> NAT-B)
| |
+-- [ đ» EC2 (ASG) ] +-- [ đ» EC2 (ASG) ] <-- (Auto Scaling Group)
| |
+-- [ đ» EC2 (ASG) ] +-- [ đ» EC2 (ASG) ]
| (Port 5432) |
v v
[ đ Subnet Data (AZ-A) ] [ đ Subnet Data (AZ-B) ]
| |
+-- [ đ RDS Master ] <--(Sync)--> [ đ RDS Standby ] <-- (RDS Multi-AZ)
Checklist de Résilience (Panne AZ-A)
- (Panne AZ-A) (
subnet-public-a,private-a,data-a) tombent. - (ALB) Le NĆud 1 (ALB) (AZ-A) tombe. Route 53 (Health Check) arrĂȘte d'envoyer du trafic Ă ce nĆud. 100% du trafic DNS va au NĆud 2 (ALB) (AZ-B). (Downtime: ZĂ©ro).
- (ASG) L'ALB (NĆud 2) dĂ©tecte (Health Check) que les EC2 (AZ-A) sont
Unhealthy. L'ASG (8.1) termine les instances (mortes) (AZ-A) et lance (Scale-Out) de nouvelles instances (remplacement) dans le Subnet (sain) (AZ-B). (Downtime: Zéro, charge répartie sur AZ-B). - (RDS) RDS (service) détecte (Health Check) que le Master (AZ-A) est mort. RDS (automatiquement) promeut le Standby (AZ-B) en nouveau Master. RDS (automatiquement) bascule le DNS (interne) (
...rds.amazonaws.com) vers l'IP (privée) du nouveau Master (AZ-B). (Downtime: 30-60 sec, le temps du failover BDD). - (NAT) Les EC2 (AZ-B) (saines) utilisent le
NAT-B(sain) (via leur Route Table (AZ-B)) pour lesapt update. (Downtime: Zéro).
7.1. CloudWatch Metrics (L'Hyperviseur)
Par défaut, chaque instance EC2 envoie (gratuitement) des métriques (toutes les 5 minutes) à CloudWatch. C'est le monitoring de "base" au niveau de l'Hyperviseur (la "boßte" qui fait tourner l'EC2).
(Bonne Pratique) : Activer le "Detailed Monitoring" (payant) pour passer la granularité à 1 minute (essentiel pour réagir vite, ex: Auto Scaling).
Métriques Clés à Surveiller (et Alarmer)
| Métrique | Description | Usage (Action) |
|---|---|---|
CPUUtilization | Pourcentage d'utilisation des vCPU (alloués). | Action : Scaler (ASG) si > 80%. (Si t3.micro, surveiller aussi CPUCreditBalance). |
NetworkIn / NetworkOut | Nombre de Bytes (Octets) entrants/sortants. | Action : Détecter les pics (DDoS) ou les coûts (Data Transfer Out). |
StatusCheckFailed_System | (Binaire 0/1) Ăchec SystĂšme (AWS). (Panne de l'hĂŽte physique, perte rĂ©seau AWS...). | Action : (Alarme) EC2-Recover. (AWS va Stop/Start l'instance sur un nouvel hĂŽte sain). |
StatusCheckFailed_Instance | (Binaire 0/1) Ăchec Instance (OS). (Ăchec boot (Kernel panic), FS corrompu, config rĂ©seau OS cassĂ©e). | Action : (Alarme) EC2-Reboot. (Si Ă©chec, investiguer : (Syslog / Console Screenshot)). |
DiskReadOps / DiskWriteOps | IOPS (Opérations/sec) sur les Volumes EBS attachés. | Action : Détecter la saturation (Throttling) du disque (goulot d'étranglement). |
7.2. CloudWatch Logs (L'Agent)
(PiÚge) : Contrairement à Lambda, une instance EC2 n'envoie AUCUN log (/var/log/syslog, nginx.log...) à CloudWatch par défaut.
Les logs (par défaut) "vivent" et "meurent" sur le disque EBS de l'instance.
La Solution : L'Agent CloudWatch (CloudWatch Agent)
Pour centraliser vos logs (applicatifs, OS) dans CloudWatch Logs (pour analyse, alerte, rétention), vous devez installer et configurer l'Agent CloudWatch (un logiciel) sur l'OS de l'EC2.
Pré-requis (IAM)
L'instance EC2 doit avoir un IAM Role attaché avec (au minimum) la Policy CloudWatchAgentServerPolicy (qui contient logs:PutLogEvents, logs:CreateLogStream...).
Exemple de Configuration (config.json de l'Agent)
Vous stockez ce JSON (ex: dans SSM Parameter Store) et vous dites Ă l'Agent de l'utiliser :
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nginx/access.log",
"log_group_name": "/mon-app/prod/nginx-access",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/var/log/auth.log",
"log_group_name": "/mon-app/prod/auth",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
(Résultat) : L'Agent "tail" (surveille) ces fichiers (access.log, auth.log) en temps réel et "streame" (envoie) les nouvelles lignes vers les Log Groups spécifiés (/mon-app/prod/...).
7.3. CloudWatch Alarms (Actions)
Une Alarme "surveille" (watch) une Métrique (7.1). Si la Métrique dépasse un "Seuil" (Threshold) (ex: 80%) pendant une "Période" (ex: 15 min), l'Alarme passe à l'état ALARM et déclenche des Actions.
Actions (Que faire en cas d'Alarme ?)
| Action | Usage (Cas d'usage) |
|---|---|
| Notification (SNS) | (Alerte Humaine) L'Alarme (CPU > 95%) envoie un message Ă un Topic SNS (Simple Notification Service). (SNS) "Fan-out" (distribue) ensuite l'alerte (Email, Slack (via Lambda), PagerDuty...). |
| Auto Scaling (ASG) | (Scaling) L'Alarme (CPU > 70%) déclenche une Policy d'Auto Scaling (ASG). (ASG) Exécute l'action "Scale-Out" ( Add 2 instances). |
| Action EC2 (Recover) | (Auto-Réparation / Auto-Heal) L'Alarme (StatusCheckFailed_System = 1) déclenche l'action EC2-Recover.(EC2) Exécute un Stop/Start (migre l'instance sur un HÎte (Hardware) sain). |
| Action EC2 (Reboot) | (Auto-Réparation) L'Alarme (StatusCheckFailed_Instance = 1) déclenche l'action EC2-Reboot (soft reboot). |
7.4. Monitoring Avancé (APM & Tracing)
CloudWatch (7.1) vous dit : "Le CPU est Ă 90%" (Le SymptĂŽme).
Le monitoring avancé (APM) vous dit : "Le CPU est à 90% parce que la fonction process_payment() (Java) est bloquée (Lock)". (La Cause Racine).
AWS X-Ray (Tracing Distribué)
X-Ray n'est pas un moniteur de "serveur", c'est un moniteur de "requĂȘte" (Trace). Il suit une requĂȘte (ex: 1 ID de Trace) Ă travers plusieurs services (Microservices).
Usage : Indispensable pour les architectures distribuées (ex: API GW -> Lambda -> EC2-API -> RDS).
(Exemple de Trace X-Ray) :
Trace (550ms)
ââ API Gateway (10ms)
ââ Lambda:FonctionA (540ms)
ââ (Init) (120ms)
ââ (Invoke) (420ms)
ââ (Appel HTTP: api.stripe.com) (300ms)
ââ (Appel Boto3: dynamodb:PutItem) (120ms)
(Analyse) : Le goulot d'étranglement (300ms) est l'API externe (Stripe), pas la BDD (DynamoDB).
(Installation) : Nécessite 1. L'Agent/Daemon X-Ray (sur l'EC2) et 2. Le SDK X-Ray (aws-xray-sdk) (dans votre code Python/Java/Node) pour "instrumenter" (patcher) les appels (boto3, requests).
Intégration Tiers (Datadog, New Relic, Grafana...)
Ce sont des plateformes d'Observabilité (SaaS ou OSS) qui combinent tout (Metrics, Logs, Traces (APM)).
- Datadog / New Relic : (SaaS) Vous installez leur Agent (propriétaire) sur l'EC2. L'Agent collecte (en haute résolution) les Métriques (OS, App), les Logs (fichiers), et les Traces (APM) et les envoie à leur plateforme (Cloud). (Ils utilisent aussi une Intégration IAM (Cross-Account) pour "puller" (tirer) les métriques CloudWatch (7.1) (ex: RDS, ALB)).
- Grafana (OSS) : (Auto-hébergé)
- (Source 1) Vous installez Prometheus Node Exporter (sur l'EC2) et Prometheus (scrapeur) -> Grafana (Dashboard).
- (Source 2) Vous donnez (via IAM) à Grafana un accÚs (API) à CloudWatch, et Grafana "importe" les métriques CloudWatch (7.1) pour les afficher.
6.1. Types de Volumes EBS (Disque Réseau)
EBS (Elastic Block Store) est un service de stockage en bloc (rĂ©seau) (similaire Ă un SAN On-Premise) conçu pour les instances EC2. Il est persistent (les donnĂ©es survivent Ă l'arrĂȘt (Stop) de l'EC2).
Comparatif des Types de Volumes (SSD vs HDD)
| Catégorie | Nom API | Usage Principal (Workload) | Performance |
|---|---|---|---|
| SSD (General Purpose) | gp3 | (Recommandé / Défaut) Volumes de boot (OS), Apps Web, BDD (Dev/Prod Standard). | Baseline Garantie : 3 000 IOPS & 125 MB/s (indépendamment de la taille). (Scalable jusqu'à 16 000 IOPS). |
| SSD (Provisioned IOPS) | io2 Block Express | BDD Critiques (OLTP) (ex: SAP HANA, Oracle, SQL Server). Workloads < 1ms latence. | IOPS Garantis (Provisionnés). Ratio IOPS/GB élevé (jusqu'à 1000:1). Max 256 000 IOPS. 99.999% Durabilité. (TrÚs cher). |
| HDD (Throughput) | st1 | Big Data (Séquentiel). Data Warehouse, Logs (ELK), Kafka. | Optimisé Débit (MB/s) (Max 500 MB/s). Mauvais en IOPS (accÚs aléatoire). |
| HDD (Cold) | sc1 | Stockage "Froid" (Rare). AccÚs trÚs peu fréquent. | Coût / GB le plus bas. (Optimisé Débit (Max 250 MB/s)). |
| (Legacy) | gp2 | (Ancien "General Purpose"). | IOPS liés à la taille (3 IOPS/GB). Utilise un systÚme de "Crédits Burst". (Toujours migrer gp2 -> gp3). |
6.2. Choisir le Bon Type (Workload vs Coût)
Workload 1 : Volume de Boot (OS) / Serveur Web (Standard)
- Choix :
gp3. - Pourquoi :
gp3(par dĂ©faut) offre 3000 IOPS garantis, mĂȘme pour un petit disque (ex: 30GB). - (Anti-Pattern) : Utiliser
gp2(Legacy) (30GB * 3 IOPS/GB = 90 IOPS de base). Le systĂšme (apt update, logs...) serait extrĂȘmement lent (goulot d'Ă©tranglement disque).
Workload 2 : Base de Données (OLTP) (Postgres, MySQL)
- Choix (Prod) :
io2 Block Express(ouio1). - Pourquoi : Les BDD (OLTP) sont sensibles à la latence et nécessitent des IOPS garantis (prévisibles) (accÚs aléatoires).
io2garantit une latence sub-milliseconde et les IOPS que vous payez (ex: 20 000 IOPS). - Choix (Dev/Test) :
gp3(avec IOPS/Throughput augmentés manuellement si besoin).
Workload 3 : Data Warehouse / Log Processing (Kafka)
- Choix :
st1(HDD). - Pourquoi : Ce workload est "Séquentiel" (scan de gros fichiers). Il se moque des IOPS (accÚs aléatoire), il a besoin de Débit (MB/s).
st1offre un haut débit (jusqu'à 500 MB/s) pour un coût (GB/mois) beaucoup plus bas quegp3.
Alternative (Latence ExtrĂȘme) : Instance Store
- Choix : (Pas EBS) Instances
i4i,c6gd... - Pourquoi : Si la latence (microsecondes) est reine et que la persistance n'est pas requise (ex: Caches (Redis), Buffers). Les disques NVMe (locaux) sont physiquement sur la machine (pas sur le réseau). (Attention : Données perdues si
Stop/Terminate).
6.3. Snapshots (Backups EBS)
Un Snapshot (Instantané) est un backup (une "photographie") d'un volume EBS, stocké (à moindre coût) dans S3 (géré en arriÚre-plan par AWS).
Caractéristique Clé : Inbound (Incrémentiel)
Les snapshots sont incrémentiels (ils ne copient que les "blocs" (données) modifiés depuis le dernier snapshot).
- Dimanche (Snap A) : Volume (100GB) (10GB utilisés) -> Snapshot A (Taille facturée : 10GB).
- Lundi (Snap B) : (Vous modifiez 2GB de données) -> Snapshot B (Taille facturée : 2GB (le delta)).
- Mardi (Snap C) : (Vous supprimez Snap A) -> (Magie) Snap B (2GB) "absorbe" (garde) les 8GB (de A) dont il dépend. (AWS ne supprime que les 2GB (de A) qui ont été modifiés par B).
Automatisation (AWS Data Lifecycle Manager - DLM)
C'est l'outil (PaaS) recommandé pour gérer les snapshots (plutÎt que des scripts cron/boto3).
Exemple de Policy (DLM) : "Backup-Prod-Daily"
- Cible (Target) : (Ressources) (Tag)
Backup=Prod-Daily. - Fréquence (Schedule) :
cron(0 2 * * ? *)(Tous les jours à 02:00 UTC). - Rétention (Retention) : Garder 7 (Type: "Count") snapshots. (DLM supprime automatiquement le 8Úme (le plus ancien)).
Chiffrement & Cross-Region Backup (DR)
- Chiffrement (Encryption) : Si le Volume EBS (source) est chiffrĂ© (KMS), le Snapshot (backup) est automatiquement chiffrĂ© (avec la mĂȘme clĂ©).
(Lors d'une "Copie" (Copy) de Snapshot, vous pouvez changer la clé KMS (re-chiffrer) ou chiffrer (un snapshot non-chiffré)). - Cross-Region Backup (DR) : DLM (ou l'API) permet de Copier (Copy) (automatiquement) le snapshot (créé à Paris
eu-west-3) vers une autre Région (ex: Francforteu-central-1) (pour un Plan de Reprise d'Activité (PRA) en cas de panne "Région").
6.4. Montage & Redimensionnement (Resize) (Linux)
Flux (Montage d'un NOUVEAU Volume)
- (AWS) Create Volume (EBS) (ex: 100GB).
- (AWS) Attach Volume (Ă l'EC2) (ex: Attribue le device
/dev/sdf). - (EC2 SSH)
lsblk(VĂ©rifie quenvme1n1(Nitro) ouxvdf(Xen) (mappĂ© Ă/dev/sdf) apparaĂźt). - (EC2 SSH)
sudo file -s /dev/nvme1n1(Vérifie "data" (vide)). - (EC2 SSH)
sudo mkfs -t xfs /dev/nvme1n1(Formater. XFS (recommandé) ouext4). - (EC2 SSH)
sudo mkdir /data(Créer le point de montage). - (EC2 SSH)
sudo mount /dev/nvme1n1 /data(Monter). - (EC2 SSH)
sudo blkid(Trouver l'UUIDdu device (ex:uuid-123...)). - (EC2 SSH) (Crucial)
sudo vi /etc/fstab(AjouterUUID=uuid-123... /data xfs defaults,nofail 0 0) (pour le montage au reboot).
Flux (Redimensionnement (Resize) Ă Chaud)
Pour agrandir (ex: 100GB -> 150GB) un volume existant (monté) (/data).
- (AWS Console/CLI) Modify Volume (EBS) (Changer 100 -> 150). (Attend
Optimizing->Completed). - (EC2 SSH)
lsblk(Le Disque (nvme1n1) (150G) est maintenant plus grand que la Partition (nvme1n1p1) (100G)). - (EC2 SSH)
sudo growpart /dev/nvme1n1 1(Agrandir la "Partition" 1 (pour/dev/nvme1n1p1)). - (EC2 SSH) (Si XFS)
sudo xfs_growfs /data - (EC2 SSH) (Si EXT4)
sudo resize2fs /dev/nvme1n1p1 - (EC2 SSH)
df -h(Vérifie que/dataaffiche 150G).
(à Chaud) : Ce processus (sur les OS modernes + XFS/EXT4) se fait à chaud (live), sans "unmount" (démonter) le volume (zéro downtime applicatif).
6.5. Performance Tuning (IOPS, Throughput, Burst)
IOPS vs Throughput (Débit)
- IOPS (Input/Output Operations Per Second) : (Nb Opérations/sec). Important pour les petites lectures/écritures aléatoires (ex: BDD OLTP, Boot OS).
- Throughput (Débit) : (Vitesse MB/s). Important pour les grosses lectures/écritures séquentielles (ex: Data Warehouse (st1), Streaming vidéo, Copie de gros fichiers).
Le PiĂšge (Goulot) : Instance vs EBS
(Le Goulot d'Ătranglement) : La performance (IOPS/Throughput) que vous obtenez est le MINIMUM de (A) ce que l'Instance (EC2) peut gĂ©rer, et (B) ce que le Volume (EBS) peut fournir.
ScĂ©nario (Ăchec) :
- (EBS) Vous provisionnez un
io2(Volume) capable de 50 000 IOPS. - (EC2) Vous l'attachez Ă une
t3.micro(Instance). - ProblĂšme : L'instance
t3.microa une limite (Baseline) (goulot) de (ex:) 2 000 IOPS (max). - Résultat : Vous payez pour 50 000 IOPS (EBS), mais vous n'obtenez (throttling) que 2 000 IOPS (limite EC2).
(Bonne Pratique) : Toujours utiliser des instances "EBS-Optimized" (ex: m6g.large, r6g.xlarge...) (activé par défaut) qui garantissent une bande passante (réseau) dédiée (ex: 10 Gbps / 10 000 IOPS) entre l'EC2 et le service EBS.
Crédits Burst (gp2 / Legacy)
Les volumes gp2 (Legacy) utilisaient un systÚme de "Crédits Burst" (similaire au CPU (3.1)).
- IOPS de base (3 IOPS/GB) (ex: 100GB = 300 IOPS).
- Accumule des crédits (idle).
- "Burst" (Dépense) à 3000 IOPS (pendant 30 min).
- (Crédits Vides) -> Performance s'effondre à 300 IOPS (Baseline).
(Solution gp3) : gp3 n'a pas de crédits Burst. Il offre une performance garantie (Baseline) (Défaut 3000 IOPS) 24/7. (Toujours préférer gp3 à gp2).
5.1. Placement dans un VPC
Une instance EC2 doit (obligatoirement) ĂȘtre lancĂ©e dans un Subnet (Sous-rĂ©seau) d'un VPC (Virtual Private Cloud).
Le VPC fournit l'isolation réseau (c'est votre datacenter virtuel privé).
Ce que l'EC2 obtient du VPC/Subnet
- Interface Réseau (ENI) : Une "carte réseau virtuelle" (Elastic Network Interface) est créée et attachée à l'EC2.
- IP Privée : L'ENI reçoit une IP Privée (ex:
10.0.1.50) issue de la plage CIDR du Subnet (ex:10.0.1.0/24). C'est son identité principale sur le réseau. - DNS Privé : Un nom DNS interne (ex:
ip-10-0-1-50.eu-west-3.compute.internal). - Routage : L'instance hérite (est soumise) aux rÚgles de la Route Table attachée à son Subnet.
- Pare-feu (Subnet) : L'instance hérite (est soumise) aux rÚgles de la Network ACL (NACL) attachée à son Subnet.
(Configuration EC2) : Lors du lancement, vous attachez (aussi) un Security Group (SG) Ă l'ENI de l'EC2. C'est le pare-feu de l'instance.
Conclusion : Le choix du Subnet (Public ou Privé) est la décision de sécurité la plus critique lors du lancement d'une EC2.
5.2. Subnets Publics vs Privés
La distinction (Public/PrivĂ©) ne dĂ©pend pas du Subnet lui-mĂȘme, mais de la Table de Routage (Route Table) (5.3) qui lui est attachĂ©e.
| CritÚre | Subnet Public | Subnet Privé |
|---|---|---|
| Définition (Routage) | La Route Table a une route (0.0.0.0/0) vers un Internet Gateway (IGW). | La Route Table n'a PAS de route vers un IGW. |
| AccĂšs Internet (Entrant) | Oui (si l'EC2 a une IP Publique/EIP et un SG l'autorise). | Non (Jamais. L'IGW ne sait pas comment l'atteindre). |
| AccÚs Internet (Sortant) | Oui (si l'EC2 a une IP Publique/EIP). | Non (par défaut). (Sauf si (cf 5.3) la Route Table a une route (0.0.0.0/0) vers un NAT Gateway). |
| Cas d'Usage (Ressources) | ⹠Load Balancers (ALB/NLB) ⹠Bastion Hosts (5.6) ⹠NAT Gateways (5.3) | ⹠Serveurs Applicatifs (EC2) (Web, API) ⹠Bases de Données (RDS) ⹠Caches (ElastiCache) ⹠Fonctions Lambda (VPC) |
(Bonne Pratique) : Toujours placer les EC2 (applicatives) dans un Subnet Privé, et mettre un Load Balancer (ALB) (dans un Subnet Public) devant.
5.3. Routage vers Internet (IGW vs NAT)
Option 1 : Internet Gateway (IGW) (Subnet Public)
Pour les ressources (ex: ALB) qui ont besoin d'un accĂšs bidirectionnel (Entrant + Sortant) avec Internet.
- Route Table (Publique) :
0.0.0.0/0->igw-123... - Ressource : Doit avoir une IP Publique/EIP.
- Flux : L'IGW gÚre le NAT 1:1 (IP Privée <-> IP Publique).
Option 2 : NAT Gateway (Subnet Privé)
Pour les ressources (ex: EC2-App) qui n'ont besoin que d'un accĂšs sortant (Egress-Only) (ex: apt-get update, pip install, appel API Stripe), tout en restant injoignables depuis Internet.
- Composant (PaaS) : Le NAT Gateway (PaaS) est placé dans le Subnet Public (il a besoin d'une EIP (5.4)).
- Route Table (Privée) :
0.0.0.0/0->nat-456...(L'ID du NAT GW). - Ressource : L'EC2 (Privée) n'a pas d'IP Publique.
- Flux (Sortant) : (EC2
10.0.1.50) -> (Routenat-456) -> (NAT GW) -> (NAT GW fait du SNAT :10.0.1.50devientEIP_DU_NAT) -> (IGW) -> (Internet). - Flux (Entrant) : (Internet) -> (NAT GW) -> (Bloqué). Le NAT GW (Stateful) n'accepte que les réponses (Retour) aux connexions qu'il a initiées.
(Coût) : Les NAT Gateways sont facturés $/Heure + $/GB (Data Processed). (Peut coûter trÚs cher).
5.4. Elastic IP (EIP)
Une Adresse IP Ălastique (EIP) est une adresse IPv4 publique statique (fixe) que vous "allouez" (rĂ©servez) dans votre compte AWS.
EIP (Statique) vs IP Publique (ĂphĂ©mĂšre)
- IP Publique (Auto-assign) : (ĂphĂ©mĂšre) AssignĂ©e au dĂ©marrage (Start) de l'EC2. Perdue (libĂ©rĂ©e) Ă l'arrĂȘt (Stop). (ProblĂšme pour les DNS).
- Elastic IP (Statique) : (Fixe) Vous l'associez (manuellement) Ă l'EC2. Elle survit Ă un
Stop/Start. (L'IP ne change pas).
Cas d'Usage
- (Obligatoire) NAT Gateways (5.3) : Un NAT GW requiert 1 EIP pour son IP sortante (fixe).
- (Recommandé) Bastion Hosts (5.6) : Pour avoir une IP (fixe) à (Whitelist) dans vos SGs et à mettre dans votre client SSH.
- (Legacy) Serveurs Uniques : (Anti-Pattern) Un serveur Web (unique) qui ne peut pas ĂȘtre derriĂšre un Load Balancer et nĂ©cessite un Record DNS
A.
(PiÚge de Coût FinOps) : Une EIP est GRATUITE si elle est attachée à une instance EC2 Running. Une EIP non-attachée (ou attachée à une instance Stopped) est facturée (cher) (pour éviter la pénurie d'IPv4).
5.5. DNS Interne (AmazonProvidedDNS & Route 53)
1. AWS DNS (Le ".2 Magique")
Par défaut (via DHCP), chaque ressource (EC2/Lambda) dans votre VPC est configurée pour utiliser le DNS Resolver d'AWS.
Il est toujours situé à l'adresse [Base_CIDR] + 2. (Ex: Si VPC = 10.0.0.0/16, le DNS est 10.0.0.2).
Ce DNS est "Split-Horizon" (intelligent) :
- (Public) Il résout les noms publics (ex:
google.com) (si l'EC2 a un accÚs Internet (5.3)). - (Privé) Il résout les noms DNS privés (ex:
ip-10-0-1-50.eu-west-3.compute.internal->10.0.1.50).
2. Route 53 (Private Hosted Zones)
C'est la Bonne Pratique (vs IP hardcodées) pour le "Service Discovery" (Découverte de services).
Scénario : L'EC2-App (10.0.1.50) doit appeler l'EC2-API (10.0.1.60).
- (Mauvais) :
config.py->API_HOST = "10.0.1.60". (Si l'EC2-API est remplacée (IP.61), le code est cassé). - (Bon) :
- (Route 53) Créer une "Private Hosted Zone" (Zone DNS Privée) :
my-app.internal. - (Route 53) Attacher cette Zone (
my-app.internal) au VPC. - (Route 53) Créer un Record (
A) :api.my-app.internal->10.0.1.60. - (Code)
config.py->API_HOST = "api.my-app.internal".
- (Route 53) Créer une "Private Hosted Zone" (Zone DNS Privée) :
(Résultat) : L'EC2-App (utilisant le DNS .2) résout api.my-app.internal en 10.0.1.60. Si l'API change d'IP (.61), il suffit de mettre à jour le DNS (pas le code).
5.6. Bastion Hosts (Serveurs de Rebond / Jump Servers)
C'est l'architecture "classique" (Legacy) pour accéder (SSH/RDP) à des instances (EC2, RDS-Tunnel) situées dans un Subnet Privé (5.2).
Un "Bastion" est une (petite) instance EC2 (Linux/Windows) qui "vit" dans le Subnet Public (5.2) et qui est durcie (Harden).
Architecture de Sécurité (Flux SSH)
(Admin PC) (Mon IP: 80.1.2.3)
|
(Port 22) (Autorisé par 'sg-bastion')
|
v
[ đ Subnet Public ]
|
+-- [ đ» EC2-Bastion (EIP: 54.1.2.3) ] (SG: 'sg-bastion')
|
(Port 22) (Autorisé par 'sg-app')
|
v
[ đ Subnet PrivĂ© ]
|
+-- [ đ» EC2-App (IP: 10.0.1.50) ] (SG: 'sg-app')
Configuration des Security Groups (SG)
sg-bastion(Sur le Bastion) :- Inbound :
Allow TCP/22(Source:80.1.2.3/32(Mon IP Bureau)).
- Inbound :
sg-app(Sur l'EC2 Privée) :- Inbound :
Allow TCP/22(Source:sg-bastion(L'ID du SG du Bastion)).
- Inbound :
(InconvĂ©nients) : NĂ©cessite d'ouvrir le Port 22 (mĂȘme si limitĂ©), nĂ©cessite de gĂ©rer/roter des clĂ©s SSH (.pem), nĂ©cessite de patcher (apt update) l'OS du Bastion.
(Alternative Moderne) : SSM Session Manager (5.7).
5.7. Alternative : SSM Session Manager (Mode Moderne)
(La Meilleure Pratique 2024) SSM Session Manager est un service AWS (partie de Systems Manager) qui vous donne un accĂšs Shell (bash) ou PowerShell (sĂ©curisĂ©, auditĂ©) Ă vos instances (mĂȘme privĂ©es)... SANS Bastion, SANS ClĂ© SSH (.pem), et SANS ouvrir le Port 22 (SSH).
Pré-requis (3 Conditions)
- Agent SSM : L'EC2 (Privée) doit avoir l'Agent SSM (installé par défaut sur Amazon Linux, Ubuntu...).
- IAM Role : L'EC2 (Privée) doit avoir un IAM Role (Instance Profile) attaché, avec la Policy (AWS)
AmazonSSMManagedInstanceCore. - Routage (Sortant) : L'EC2 (Privée) doit pouvoir contacter (en Sortie, HTTPS/443) l'API (Publique) de SSM.
- (Option A) via un NAT Gateway (5.3).
- (Option B) (Plus sécurisé/moins cher) via des VPC Endpoints (Interface) (pour
ssm,ssmmessages,ec2messages).
Architecture de Sécurité (Flux SSM)
(Admin PC) (Avec Perms IAM 'ssm:StartSession')
|
(API Call (443))
|
v
[ âïž AWS SSM API (Service) ]
|
(Initie le "Tunnel" (WebSocket))
|
v
[ đ Subnet PrivĂ© ]
|
+-- [ đ» EC2-App (IP: 10.0.1.50) ] (SG Inbound: VIDE (Port 22 FermĂ©))
|
(L'Agent SSM (local) a une connexion (Outbound 443) vers l'API SSM)
(Avantages) : Zéro exposition réseau (Pas de Port 22, pas de Bastion). AccÚs via IAM (pas de clés .pem). Audit complet (toutes les commandes (ls, rm) sont logguées sur S3/CloudWatch).
4.1. Security Groups (SG) - Le Pare-feu "Stateful"
Le Security Group (SG) est le pare-feu principal (le plus important) qui opĂšre au niveau de l'Instance (ENI) (ex: EC2, RDS).
Caractéristiques Clés (Stateful)
- Niveau : Instance (ENI). (La "porte" du bureau).
- RĂšgles :
Allow(Autoriser) uniquement. - Défaut :
Deny All(Tout est bloquĂ©, sauf ce qui est explicitement autorisĂ© (Whitelist)). - Ătat : STATEFUL (Contextuel).
- (La Force) : Si vous autorisez (Inbound) le Port
80(HTTP Entrant), le trafic de réponse (Outbound) (sur un port éphémÚre 49152+) est automatiquement autorisé (le SG "se souvient" de la connexion). - (Conséquence) : Vous n'avez (presque) jamais besoin de modifier les rÚgles Outbound (Sortantes) (qui sont
Allow Allpar défaut).
- (La Force) : Si vous autorisez (Inbound) le Port
Bonnes Pratiques (Least Privilege)
(Mauvaise Pratique) : Autoriser (Inbound) Port 22 (SSH) (Source: 0.0.0.0/0). (Ouvre l'administration (SSH) Ă toute la planĂšte -> Attaques Brute Force garanties).
(Bonne Pratique) :
sg-alb(Load Balancer) : AllowPort 443 (HTTPS)(Source:0.0.0.0/0).sg-app(EC2 App) : AllowPort 8080 (App)(Source:sg-alb(ID du SG)).sg-admin(Bastion) : AllowPort 22 (SSH)(Source:MON_IP_BUREAU/32).
(RĂšgle d'Or) : Toujours utiliser des ID de SG (sg-xxxx) comme Source (plutĂŽt que des IPs/CIDR) pour lier les services (ex: App -> DB).
4.2. Network ACL (NACL) - Le Pare-feu "Stateless"
Le NACL est une couche de défense optionnelle (facultative) qui opÚre au niveau du Subnet (le "bùtiment" entier).
Caractéristiques Clés (Stateless)
- Niveau : Subnet. (S'applique Ă toutes les EC2 dans ce Subnet).
- RĂšgles :
AllowETDeny. (ĂvaluĂ©es par N° (100, 200...)). - Ătat : STATELESS (AmnĂ©sique).
- (Le PiĂšge) : Si vous autorisez (Inbound) le Port
80, vous devez aussi autoriser (Outbound) les ports "éphémÚres" (1024-65535) (le trafic de réponse).
- (Le PiĂšge) : Si vous autorisez (Inbound) le Port
Meilleure Pratique (Utilisation)
(Bonne Pratique) : Laissez la NACL par Défaut (celle créée avec le VPC), qui est Allow All (In/Out). Ne la touchez pas.
Gérez 100% de votre sécurité réseau "applicative" (Port 80, 5432, 22) via les Security Groups (SG) (4.1) (qui sont Stateful et plus faciles à gérer).
(Seul Cas d'Usage) : N'utilisez une NACL que pour "Blacklister" (Deny) une IP (ou plage d'IP) malveillante (ex: attaque DDoS, scan) au niveau du Subnet (avant mĂȘme qu'elle n'atteigne vos SGs).
4.3. IAM Roles pour EC2 (L'Identité de la Machine)
(NE JAMAIS FAIRE) : Ne jamais copier des clés (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) (d'un "User IAM") dans le code (config.py) ou les variables d'environnement (.env) de l'instance EC2.
(Risque) : Si l'instance est compromise (via faille Web), l'attaquant vole ces clés (longue durée) et peut (potentiellement) détruire tout votre compte AWS.
La Bonne Pratique : IAM Role (Instance Profile)
C'est l'identité (temporaire) que l'EC2 "assume" (endosse). C'est la seule façon sécurisée de donner des permissions AWS à votre code (Boto3, SDK...).
Flux (Automatique)
- (Admin) Vous créez un IAM Role (ex:
Role-App-Web).- (Trust Policy) : Fait confiance Ă
ec2.amazonaws.com. - (Permission Policy) :
Allow s3:GetObject(surBucket-Assets),Allow secretsmanager:GetSecretValue(surSecret-RDS).
- (Trust Policy) : Fait confiance Ă
- (Admin) Vous attachez ce RĂŽle (via un "Instance Profile") Ă l'instance EC2.
- (Code Python/Boto3) (sur l'EC2) Vous faites :
client = boto3.client('s3')(sans clés !). - (SDK) (Automatique) Le SDK appelle l'IMDS (2.3) (
169.254.169.254). - (AWS STS) (Automatique) AWS (via IMDS) génÚre des clés temporaires (1h) (basées sur le
Role-App-Web). - (SDK) (Automatique) Le SDK utilise ces clés (temporaires) pour appeler
s3:GetObject.
(Résultat) : Zéro clé secrÚte sur la machine. Sécurité maximale (Least Privilege, Clés temporaires).
4.4. AWS Systems Manager (SSM) - Gestion (Sans SSH)
SSM est la "console de gestion" (PaaS) de votre flotte EC2 (et On-Premise).
(Pré-requis) : 1. L'instance EC2 doit avoir l'Agent SSM (installé par défaut sur Amazon Linux, Ubuntu...). 2. L'instance doit avoir un IAM Role (4.3) avec la Policy AmazonSSMManagedInstanceCore.
SSM Session Manager (Le "Tueur" de SSH)
(Bonne Pratique n°1) : C'est un accÚs Shell (bash) ou PowerShell (sécurisé, audité) à votre instance... SANS ouvrir le Port 22 (SSH) ou 3389 (RDP).
- RĂ©seau : Le Security Group (4.1) (Inbound) peut ĂȘtre 100% fermĂ© (Vide).
- Flux : L'Agent SSM (sur EC2) initie une connexion Sortante (Outbound) (Port 443) vers l'API (Publique) de SSM.
- AccĂšs (Admin) : L'Admin (via Console AWS/CLI) demande Ă l'API SSM : "Connecte-moi (via ce tunnel) Ă l'instance
i-123". - Sécurité (IAM) : L'accÚs est contrÎlé par IAM (
ssm:StartSession), pas par des clés SSH (.pem). - Audit : Toutes les commandes (
ls,rm) peuvent ĂȘtre logguĂ©es (CloudWatch Logs / S3).
Autres Fonctionnalités SSM
- Run Command : Exécuter un script (ex:
Restart-Nginx) (asynchrone) sur 1000 serveurs en mĂȘme temps. - Patch Manager : (AutomatisĂ©) Scanne (Compliance) et dĂ©ploie (Patche) les mises Ă jour OS (ex: "Appliquer patchs Critiques (CVE) tous les Dimanches Ă 2h").
- Inventory : Collecte (automatiquement) l'inventaire (Applications installées, Services, Versions...) de toute la flotte.
4.5. Durcissement OS (Hardening)
Le "Hardening" (Durcissement) est l'action de sĂ©curiser l'OS (SystĂšme d'Exploitation) lui-mĂȘme, en partant du principe que le rĂ©seau (SG/NACL) pourrait Ă©chouer (DĂ©fense en profondeur (6.1)).
CIS Benchmarks
Le CIS (Center for Internet Security) fournit des "Benchmarks" (guides/checklists) (ex: "CIS Benchmark for Ubuntu 22.04 LTS") qui sont le standard de l'industrie.
(Bonne Pratique) : Utiliser (ou acheter sur le Marketplace (2.2)) des "CIS Hardened AMIs" (AMIs pré-durcies).
Exemples d'Actions de Hardening
- Désactivation services inutiles :
systemctl disable avahi-daemon(mDNS)systemctl disable cups(Imprimantes)systemctl disable postfix(Serveur Mail)
- Configuration
sshd_config(si SSH utilisé) :PermitRootLogin no(Jamais de login root)PasswordAuthentication no(Clés SSH (.pem) uniquement, pas de mot de passe)
- Configuration SystĂšme de Fichiers (
/etc/fstab) :- Monter
/tmp(temporaire) et/var/tmpavec les optionsnoexec, nosuid, nodev(empĂȘche l'exĂ©cution de binaires (malware) depuis/tmp).
- Monter
- Audit Logs (OS) :
- Configurer
auditd(Linux) ou Windows Event Forwarding. - Installer l'Agent CloudWatch pour "streamer" (envoyer) les logs (ex:
/var/log/auth.log,/var/log/secure) vers CloudWatch Logs (pour alerte/rétention).
- Configurer
3.1. CPU (Processeurs)
Le vCPU (Virtual CPU) est l'unitĂ© de calcul. Sur la plupart des instances, 1 vCPU = 1 Thread (Hyperthreading). (1 CĆur physique = 2 vCPU).
Choix du Processeur (Famille)
| Processeur | Suffixe (Instance) | Architecture | Avantages |
|---|---|---|---|
| Intel Xeon | m7i, c7i (i = Intel) | x86_64 | Standard, performances AVX-512 (calcul intensif). |
| AMD EPYC | m6a, c6a (a = AMD) | x86_64 | TrĂšs bonnes performances, ~10% moins cher que Intel. |
| AWS Graviton | m6g, c7g (g = Graviton) | ARM (arm64) | Meilleur prix/perf (jusqu'à -40%). Nécessite une AMI (OS) compatible ARM. |
Mode "Burst" (Familles T2, T3, T4g)
Les instances "T" (Burstable) sont conçues pour les workloads "imprévisibles" (ex: site web faible trafic, serveur de dev).
- Crédits CPU : L'instance accumule des "Crédits CPU" quand elle est idle (inactive).
- Baseline : Elle a une performance de base garantie (ex: 20% d'1 vCPU).
- Burst (Rafale) : Quand un pic de trafic arrive, l'instance "dépense" ses crédits pour "burster" à 100% CPU pendant une courte période.
- Ăpuisement (Throttling) : Si les crĂ©dits tombent Ă zĂ©ro, l'instance est bridĂ©e (throttled) Ă sa performance de "baseline" (ex: 20% CPU), rendant l'application trĂšs lente.
(Mode "Unlimited" - Défaut T3/T4g) : Si les crédits sont à zéro, l'instance (T3) continue de burster, mais AWS vous facture (cher) le surplus de CPU (CPUSurplusCreditsCharged).
3.2. Mémoire RAM
La RAM (Mémoire) est fixe (liée au Type d'Instance (2.1)). Elle n'est pas "burstable" (contrairement au CPU (3.1) ou au Disque (gp2)).
Workloads "Memory-Bound" (Gourmands en RAM)
Si votre application est "memory-bound" (limitée par la RAM), utilisez les familles optimisées (Ratio CPU:RAM élevé 1:8+) :
- Famille R : (Standard) (ex:
r6g.large) - (Bases de données RDS, Caches In-Memory). - Famille X : (Ex:
x2iedn.xlarge) - (TrÚs haute RAM, pour SAP HANA, Caches In-Memory massifs). - Famille Z : (Haute fréquence CPU + Haute RAM).
Impact sur le Swap (Linux)
Le PiÚge : Par défaut, les AMIs (Amazon Linux, Ubuntu...) ne provisionnent PAS de partition SWAP (espace d'échange sur disque).
Conséquence (Manque de RAM) :
- (App) L'application (Java, Python) consomme toute la RAM (
FreeableMemory(CloudWatch) = 0). - (OS) Le Kernel Linux (n'ayant pas de SWAP) panique.
- (OS) L'OOM (Out-of-Memory) Killer se déclenche.
- (OS) L'OOM Killer "tue" (
SIGKILL) un processus (généralement le plus gourmand) pour sauver le systÚme (ex: tue le processpostgresounginx).
Solution : 1. (Mieux) Monitorer FreeableMemory (CloudWatch) et scaler (Upgrade) l'instance (ex: r6g.large -> r6g.xlarge). 2. (Dépannage) Créer (manuellement) un fichier SWAP (dd if=/dev/zero ..., mkswap) sur le disque EBS (mais ce sera lent).
3.3. Réseau (Bande Passante & Placement)
Bande Passante & Enhanced Networking (ENA)
La bande passante (Débit) est liée à la taille (type) de l'instance.
t3.micro: "Jusqu'Ă 5 Gbps" (Burstable).m6g.large: "Jusqu'Ă 10 Gbps".m6g.16xlarge: "40 Gbps".
Enhanced Networking (ENA) : C'est le "driver" (interface réseau virtuelle) moderne (basé sur SR-IOV) qui permet d'atteindre ces hautes performances (>10 Gbps). (Activé par défaut sur toutes les instances modernes (ex: M5, M6, C5, C6...)).
Placement Groups (Groupes de Placement)
Vous (Client) pouvez influencer le placement physique (Rack, Datacenter) de vos instances EC2 (pour optimiser la performance réseau ou la résilience).
| Type (Stratégie) | Description (Placement Physique) | Cas d'Usage (Objectif) |
|---|---|---|
| Cluster (Colocation) | Place toutes les instances EC2 (du groupe) dans le mĂȘme Rack (physique), dans 1 seule AZ. | Performance RĂ©seau Maximale (Latence Minimale). (Big Data (Hadoop), HPC, calcul MPI). (Risque : Si le Rack tombe (panne), tout tombe). |
| Spread (Anti-Colocation) | Place chaque instance (max 7/AZ) sur un Rack (Hardware) distinct. | DisponibilitĂ© Maximale (HA). (Minimise les pannes "corrĂ©lĂ©es" (matĂ©rielles)). (Ex: NĆuds Master (Zookeeper, Kafka), BDD (DC), ASG (Min=3)). |
| Partition (Hybride) | Place les instances dans des "Partitions" (groupes logiques), oĂč chaque Partition est sur un Rack (ou groupe de racks) distinct. | HA pour Big Data (HDFS, Cassandra). (Ex: RĂ©partir 100 nĆuds sur 7 Partitions (racks) pour garantir la rĂ©plication (HDFS) tout en gardant une bonne localitĂ©). |
3.4. Stockage (EBS vs Instance Store)
Instance Store (Stockage Local/ĂphĂ©mĂšre)
C'est un disque (SSD NVMe) physiquement connecté (PCIe) au serveur (Host) AWS. (Ex: instances i4i, d3, c6gd).
- Avantage (Perf) : ExtrĂȘmement rapide (IOPS (Millions) et latence (microsecondes) imbattables).
- InconvĂ©nient (Non-Persistent) : ĂphĂ©mĂšre (Temporaire). Les donnĂ©es sont PERDUES si l'instance est StoppĂ©e, TerminĂ©e, ou en cas de panne matĂ©rielle (Host).
- Usage : Caches (Redis/Memcached), Buffers (Kafka), Scratch space (calcul), BDD (NoSQL) qui gÚrent la réplication (ex: Cassandra).
EBS (Elastic Block Store) (Stockage Réseau/Persistent)
C'est un volume réseau (SAN) (disque dur "virtuel") qui est attaché (via le réseau) à l'instance EC2. (99% des instances (t3, m5, r6) bootent sur EBS).
- Avantage (Persistent) : Les donnĂ©es survivent Ă un Stop/Start ou Ă une panne (le volume peut ĂȘtre dĂ©tachĂ©/rĂ©-attachĂ© Ă une autre EC2).
- Inconvénient (Perf) : Plus lent (latence millisecondes) que l'Instance Store (latence microsecondes).
Types d'EBS (SSD vs HDD)
gp3(SSD - General Purpose) : (Recommandé) Le meilleur rapport prix/perf. (Base: 3000 IOPS / 125 MB/s). (IOPS/Throughput scalables indépendamment de la taille (GB)).gp2(SSD - Legacy) : (Ancien) IOPS liés à la taille (3 IOPS/GB). (Toujours migrer versgp3).io2 Block Express(SSD - Max IOPS) : (Pour BDD (SAP/Oracle)) Si vous avez besoin de > 16,000 IOPS garantis (jusqu'à 256,000 IOPS). (TrÚs cher).st1(HDD - Throughput) : (Disque dur "ScS") Optimisé Débit (MB/s) (gros blocs séquentiels). Pas IOPS (petits blocs aléatoires). (Usage: Data Warehouse, Logs (ELK)).
Fonctionnalités (EBS)
- EBS Multi-Attach : (Pour
io1/io2) Permet d'attacher 1 seul volume EBS Ă plusieurs (max 16) EC2s (dans la mĂȘme AZ). (NĂ©cessite un "clustering file system" (GFS2, OCFS2) pour gĂ©rer le locking). - Encryption (Chiffrement) : (Bonne Pratique) Cocher "Encrypt this volume" (At-Rest) (via KMS). (Transparent, impact performance nĂ©gligeable).
2.1. Types dâInstances (Nomenclature & Familles)
Le "Type d'Instance" définit le "Hardware" virtuel (vCPU, RAM, Réseau, Stockage) de votre VM EC2.
Nomenclature (Exemple : m6g.large)
m 6 g . large
| | | |
| | | +---- Taille (vCPU/RAM) (nano, micro, small, large, xlarge, 2xlarge...)
| | +------------ Attribut (g=Graviton (ARM), i=Intel, a=AMD, d=Disque local, n=Réseau)
| +---------------- Génération (6 = 6Úme gen. Plus haut = Mieux/Plus récent)
+-------------------- Famille (M = General, C = Compute, R = RAM...)
Familles d'Instances (Cas d'usage)
| Famille (Lettre) | Type | Usage Principal (Workload) | Exemples |
|---|---|---|---|
| T (Burstable) | General Purpose | Sites faible trafic, Dev/Test. (Utilise des "Crédits CPU"). | t2.micro, t3.medium |
| M (General) | General Purpose | Le "standard". Ăquilibre CPU/RAM (1:4). Serveurs Web (Prod), APIs. | m6g.large, m7i.xlarge |
| C (Compute) | Compute Optimized | CPU élevé, RAM faible (1:2). Batch, Transcodage, Gaming, HPC. | c6a.2xlarge, c7i.large |
| R, X, Z (Memory) | Memory Optimized | RAM élevée, CPU faible (1:8+). Bases de données (RDS), Caches (Redis), SAP HANA. | r6g.large, x2iedn.xlarge |
| I, D, H (Storage) | Storage Optimized | Stockage NVMe (Instance Store) local trĂšs rapide (IOPS). Data Warehousing, Kafka, Elasticsearch. | i4i.large, d3.xlarge |
| P, G, Inf, Trn | Accelerated (GPU) | Machine Learning (Training (P/Trn)), Inférence (Inf), Graphisme (G). (GPU Nvidia). | p4d.24xlarge, g5.xlarge |
2.2. AMI (Amazon Machine Image)
L'AMI est le template (modÚle) utilisé pour démarrer (boot) une instance EC2. C'est l'équivalent d'un .iso ou d'une image VMWare.
Une AMI contient (principalement) :
- Un Snapshot EBS (l'image du disque dur / OS).
- Des métadonnées (ex: Architecture (x86/ARM), Kernel, Mappage des disques).
Sources des AMIs
| Source | Description | OS Supportés (Exemples) |
|---|---|---|
| AMI Publiques (AWS) | (Quick Start) AMIs officielles, maintenues et patchées par AWS. (Recommandé). | Amazon Linux 2/2023, Ubuntu, RHEL, SUSE, Windows Server 2022. |
| AMI "My AMIs" (Privées) | AMIs que vous avez créées (cf. ci-dessous). Visibles uniquement par votre compte. | (Vos images custom). |
| AWS Marketplace | AMIs (payantes ou gratuites) vendues par des tiers (Vendors). (Souvent OS + Logiciel pré-installé). | Palo Alto (Firewall), WordPress (Bitnami), SAP, Oracle... |
| Community AMIs | AMIs (non-vérifiées) partagées par d'autres utilisateurs AWS. | (Risque de Sécurité) N'utilisez jamais ces AMIs pour la production. |
CrĂ©ation dâune AMI PersonnalisĂ©e ("Golden Image")
C'est une Bonne Pratique (vs User Data). Au lieu de démarrer (lentement) une instance "nue" (Ubuntu) et d'installer (apt install nginx...) à chaque fois, vous "pré-installez" (Bake) l'AMI.
- (Jour 1) Lancer 1 EC2 (Ubuntu).
- (Jour 1) S'y connecter (SSH) :
apt update,apt install nginx,apt install cloudwatch-agent... - (Jour 1) (Console EC2) Clic Droit -> "Create Image (AMI)". (Nom :
mon-app-web-v1.0). - (Jour 2) (ASG) L'Auto Scaling Group (ASG) démarre 10 EC2 depuis
mon-app-web-v1.0. - Résultat : Boot en 30 secondes (Nginx est déjà installé).
2.3. Instance Metadata (IMDS)
Le Service de MĂ©tadonnĂ©es (IMDS) est une "API" (REST) magique, accessible uniquement depuis l'EC2 elle-mĂȘme, Ă une adresse IP fixe (Link-Local) :
http://169.254.169.254
RĂŽle (Qu'est-ce qu'on y trouve ?)
Il permet Ă l'instance (EC2) de "savoir qui elle est" (introspection), sans connaĂźtre son contexte (via curl ou Boto3) :
.../latest/meta-data/instance-id(Retourne:i-12345...).../latest/meta-data/local-ipv4(Retourne:10.0.1.50).../latest/meta-data/public-ipv4(Retourne:54.1.2.3).../latest/meta-data/placement/availability-zone(Retourne:eu-west-3a).../latest/meta-data/iam/info(Info sur le RÎle IAM attaché)
IMDSv1 vs IMDSv2 (Sécurité Cruciale)
IMDSv1 (Legacy) : Un simple curl http://169.../iam/security-credentials/ROLE (requĂȘte GET) suffisait.
(Faille) : Si un site (sur l'EC2) avait une faille SSRF (Server-Side Request Forgery), un attaquant (externe) pouvait "tromper" le serveur pour qu'il curl cette URL (interne) et vole les credentials (clés secrÚtes) du RÎle IAM.
IMDSv2 (Moderne - Défaut) : Oblige l'utilisation d'un Token (Session). (ProtÚge contre SSRF).
# (Ătape 1) Demander un Token (Session) (via PUT)
$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
# (Ătape 2) Utiliser ce Token (Header) pour accĂ©der aux mĂ©tadonnĂ©es
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" "http://169.254.169.254/latest/meta-data/instance-id"
(Bonne Pratique) : Toujours forcer IMDSv2 (Option "HttpTokens: required") lors du lancement d'EC2.
2.4. Instance Lifecycle (Cycle de Vie)
Une instance EC2 passe par différents états (états facturés en gras).
Pending -> Running (En cours) -> Stopping -> Stopped (ArrĂȘtĂ©) -> Pending -> Running ... (ou) ... -> Shutting-down -> Terminated (TerminĂ©)
Différence (Cruciale) : Stop vs Terminate
C'est la diffĂ©rence entre "Ăteindre" (Stop) et "Jeter Ă la poubelle" (Terminate).
| Action | Ătat "Stop" (ArrĂȘter) | Ătat "Terminate" (Terminer) |
|---|---|---|
| Pré-requis (Disque) | EBS-backed (Disque Réseau) Uniquement. | EBS-backed ou Instance Store (Disque Local). |
| Ătat Final | Stopped | Terminated |
| RedĂ©marrage (Start) | Oui. (Peut ĂȘtre redĂ©marrĂ©e (Start)). | NON. (Destruction finale. IrrĂ©versible). |
| Stockage (Root EBS) | Le Volume EBS (Disque OS) persiste. | Le Volume EBS (Root) est supprimé (Détruit) (si DeleteOnTermination=True). |
| IP Publique (ĂphĂ©mĂšre) | Perdue. (Une nouvelle IP est assignĂ©e au Start). | Perdue (LibĂ©rĂ©e). |
| Elastic IP (EIP) | Reste attachée (mais facturée (PiÚge)). | Détachée. |
| Facturation (Calcul) | Stoppée. (Vous ne payez pas le CPU/RAM). | Stoppée. |
| Facturation (Stockage) | Continue. (Vous payez (toujours) le Volume EBS). | Stoppée (car disque détruit). |
Reboot (Redémarrer)
Action Reboot = RedĂ©marrage de l'OS (sudo reboot). L'instance ne s'arrĂȘte pas (Running -> Running). Les IPs (Publique/EIP) et le disque (EBS) persistent.
1.1. Quâest-ce quâAmazon EC2 ?
EC2 (Elastic Compute Cloud) est le service de calcul (compute) fondamental d'AWS. C'est le pilier central de l'IaaS (Infrastructure as a Service).
Son rÎle est de fournir des VMs (Machines Virtuelles) à la demande, appelées "Instances".
VM Ă la Demande (Le concept "Elastic")
Le terme "Elastic" (Ălastique) signifie que vous pouvez :
- Provisionner (Démarrer) : Lancer une nouvelle VM (Windows, Linux...) en quelques minutes (voire secondes).
- Scaler (Adapter) : Lancer 1 instance (pour un test) ou 10 000 instances (pour un calcul intensif), via Auto Scaling.
- DĂ©truire (ArrĂȘter) : Terminer l'instance (VM) dĂšs que vous n'en avez plus besoin.
- Payer (Facturation) : Vous ĂȘtes facturĂ© Ă la seconde (Pay-as-you-go), uniquement pour ce que vous utilisez.
ĂlĂ©ment Central de l'Infrastructure AWS
EC2 est le "cerveau" de votre infrastructure. C'est l'équivalent d'un serveur physique (On-Premise) ou d'une VM (VMware) dans votre datacenter, mais dans le cloud. C'est là que votre OS (SystÚme d'Exploitation) et votre application (Code) s'exécutent.
1.2. Pourquoi utiliser EC2 ? (vs PaaS/FaaS)
La réponse principale est : la Liberté (ContrÎle Total). Contrairement à RDS (PaaS) ou Lambda (FaaS) (qui sont des "boßtes noires" gérées), avec EC2, vous avez les "clés" (l'accÚs root ou Administrateur).
ContrĂŽle Total
- OS : Vous choisissez l'OS (Amazon Linux, Ubuntu, Windows Server, RHEL...) et vous ĂȘtes responsable des patchs de sĂ©curitĂ© (
apt update). - Logiciels : Vous pouvez installer n'importe quel logiciel (
apt-get,.exe), drivers spécifiques, ou binaires custom. - Réseau : Vous contrÎlez 100% du réseau (Security Groups, IP Privée/Publique, ENI multiples).
- Stockage : Vous choisissez le type (gp3, io2) et la taille du disque (EBS).
Compatible "Workload Legacy" (Migration)
C'est le cas d'usage "Lift & Shift". Si vous avez une application "legacy" (monolithique, ancienne, ex: un vieil Oracle, une app .NET 3.5) qui tourne sur un serveur physique (On-Premise), vous ne pouvez pas la mettre sur Lambda.
Vous pouvez (quasiment toujours) la "migrer" (Lift & Shift) sur une instance EC2 (Windows/Linux) configurée à l'identique (ex: via AWS Migration Service).
Multi-Usage (Flexibilité)
EC2 est la "brique" de base pour tout type de charge :
- Web : Héberger des serveurs Nginx, Apache, Django (Gunicorn), Node.js...
- Compute/Batch : Calculs scientifiques (HPC), jobs de batch (ex: traitement de fin de mois).
- Data : Héberger des bases de données "self-managed" (ex: Cassandra, MongoDB) (si RDS ne convient pas).
- IA / Machine Learning : Instances
G(GPU Nvidia, InfĂ©rence) ouP(GPU Nvidia, Training). - Conteneurs : Les "Worker Nodes" (NĆuds de travail) de vos clusters EKS (Kubernetes) ou ECS sont des instances EC2.
1.3. RĂŽle dâEC2 dans lâĂcosystĂšme AWS
EC2 est l'équivalent cloud d'un serveur physique/On-Premise. Il est au centre de l'IaaS et interagit (directement ou indirectement) avec la quasi-totalité des services AWS.
Interactions Principales (ĂcosystĂšme)
| Service AWS | Interaction avec EC2 |
|---|---|
| VPC (Réseau) | EC2 "vit dans" (est lancé dans) un Subnet (privé/public) de votre VPC. C'est le VPC qui lui donne son IP privée. |
| IAM (Sécurité) | EC2 "assume" (endosse) un IAM Role (Instance Profile) pour avoir les permissions d'appeler d'autres API AWS (ex: s3:GetObject). |
| AMI (Template) | L'AMI (Amazon Machine Image) est le "template" (OS + logiciels) utilisé pour démarrer (boot) l'instance EC2. |
| EBS (Stockage) | L'EBS (Elastic Block Store) est le disque dur (Volume) (ex: /dev/sda1) attaché à l'instance EC2. |
| Load Balancers (ELB) | L'ALB (Application Load Balancer) distribue (route) le trafic (HTTP/HTTPS) vers un "Target Group" (Groupe Cible) composé d'instances EC2. |
| Autoscaling (ASG) | L'ASG (Auto Scaling Group) crée (scale-out) et détruit (scale-in) (automatiquement) des instances EC2 en fonction de la charge (ex: CPU > 70%). |
| SSM (Systems Manager) | SSM est l'outil (moderne) pour gérer (patcher, exécuter des commandes, se connecter en shell sans SSH) vos instances EC2. |
| Route 53 (DNS) | Route 53 (DNS) pointe un nom de domaine (ex: www.monsite.com) vers l'IP Publique (EIP) ou l'ALB (qui pointe vers EC2). |
| S3 (Stockage Objet) | L'application (sur EC2) (via son IAM Role) lit/écrit des fichiers (objets, assets) sur S3. |
Qu'est-ce qu'EC2 ?
EC2 (Elastic Compute Cloud) est le service IaaS (Infrastructure as a Service) fondamental d'AWS. C'est (tout simplement) un serveur virtuel (VM) (un "VPS") que vous louez (Ă la seconde) dans le cloud AWS.
Il fournit du "Calcul" (Compute) (CPU/RAM) de maniĂšre "Ălastique" (vous pouvez en lancer 1 ou 10 000, et les arrĂȘter Ă tout moment).
Analogie (IaaS)
Si AWS était une "Pizza as a Service" :
- EC2 est le modĂšle IaaS.
- AWS vous fournit l'infrastructure (le four, la cuisine, les ingrédients bruts).
- Vous (Client) gérez tout le reste :
- L'installation de l'OS (via l'AMI).
- Les Patchs de Sécurité (
apt update). - Le Firewall (Security Group).
- L'installation des Logiciels (Nginx, Java...).
- L'Application (votre code).
L'AMI est le "template" (modÚle) de disque (OS) utilisé pour démarrer (boot) l'instance EC2. C'est la premiÚre chose que vous choisissez lors du lancement.
Qu'est-ce qu'une AMI ?
Une AMI (stockée/basée sur un Snapshot EBS) contient :
- L'OS (ex: Ubuntu 22.04, Amazon Linux 2, Windows Server 2022).
- L'architecture (
x86ouARM(Graviton)). - Le "boot loader" (chargeur de démarrage).
- (Optionnel) Des logiciels pré-installés (ex: une AMI "WordPress").
OĂč trouver les AMIs ?
| Type | Description |
|---|---|
| AWS (Quick Start) | (Recommandé) Images officielles, maintenues et patchées par AWS (ex: Amazon Linux 2, Ubuntu). |
| Marketplace | Images (payantes ou gratuites) vendues par des tiers (ex: "AMI Fortinet Firewall", "AMI WordPress par Bitnami"). |
| My AMIs (Custom) | (Bonne Pratique) (Voir 7.2) Vos propres images ("Golden Images") que vous avez créées à partir de vos Snapshots. |
| Community AMIs | (Non-vérifiées) AMIs partagées par d'autres utilisateurs. (Risque de sécurité). |
L'"Instance Type" (Type d'Instance) définit le "matériel" (Hardware) virtuel (vCPU, RAM, Réseau) de votre EC2.
Comprendre la Nomenclature (Ex: t3.micro)
| Partie | Exemple | Signification |
|---|---|---|
| Famille | t | T (Burstable), M (General), C (Compute), R (Memory), G (GPU)... |
| Génération | 3 | 3Úme génération (plus récente et moins chÚre que t2). |
| Taille | micro | nano, micro, small, medium, large, xlarge, 2xlarge... |
Familles Courantes (Pour Débutants)
- Famille T (Burstable) : (ex:
t2.micro,t3.medium)- (Free Tier)
t2.microest (généralement) inclus dans le Free Tier (12 mois). - Concept (CPU Credits) : L'instance a un CPU de base (faible), mais peut "burster" (exploser) à 100% CPU pendant une courte période (en utilisant des "Crédits CPU").
- Usage : Idéal pour sites à faible trafic (blog), tests, serveurs de dev. (Ne pas utiliser pour de la production soutenue).
- (Free Tier)
- Famille M (General Purpose) : (ex:
m5.large)- Le "standard" pour la production. (Ratio équilibré CPU/RAM).
- Usage : Serveurs web (prod), APIs, microservices.
- Famille C (Compute Optimized) : (CPU élevé, RAM faible).
- Famille R (Memory Optimized) : (RAM élevée, CPU faible). (ex: Caches, BDDs).
C'est la premiÚre étape de l'assistant ("Launch an instance") dans la console EC2.
Recommandations (Débutant) :
- Amazon Linux 2 / 2023 : (Recommandé par AWS) AMI optimisée (sécurisée, rapide), basée sur RHEL. (Utilisateur par défaut :
ec2-user). - Ubuntu Server 22.04 : (TrĂšs populaire) Standard (
apt). (Utilisateur par défaut :ubuntu). - Windows Server : (Si besoin .NET/IIS).
Architecture : Toujours choisir 64-bit (x86) (le standard) ou 64-bit (Arm) (si vous utilisez les instances "Graviton" (g), moins chĂšres).
C'est le choix du "Hardware" (CPU/RAM) (voir 1.3).
(Free Tier) Pour rester dans le niveau gratuit (12 premiers mois), vous devez sélectionner un type éligible "Free Tier eligible".
Généralement : t2.micro (ou t3.micro selon la Région).
Ătape la plus cruciale pour la connexion (Login).
L'AMI (Linux) est (par défaut) configurée pour désactiver la connexion par mot de passe (Password) SSH.
La seule façon de se connecter est d'utiliser une Clé SSH Asymétrique (Cryptographie).
Flux (Création)
- (Wizard AWS) Vous "Créez une nouvelle Key Pair".
- (AWS) GénÚre une Clé Privée et une Clé Publique.
- (AWS) "Injecte" la Clé Publique dans le fichier
~/.ssh/authorized_keysde l'instance (EC2). - (AWS) Vous force à télécharger la Clé Privée (le fichier
.pem).
Attention : C'est votre unique chance de télécharger le .pem. Si vous le perdez, vous ne pourrez plus jamais vous connecter à cette instance (il faudra la détruire).
Usage (Login) : (Voir 4.1 / 4.2) Vous utilisez ce fichier .pem (ClĂ© PrivĂ©e) pour prouver (au serveur) que vous ĂȘtes bien "vous" (possĂ©dant la clĂ© privĂ©e) (via SSH).
C'est ici que vous "placez" votre EC2 dans le réseau (voir guide AWS 3.3 / 4.1).
Configuration (Débutant)
- VPC : Laisser le VPC par défaut (default). (AWS en crée un pour vous dans chaque Région).
- Subnet (Sous-réseau) : Choisir un Subnet "Public" (ex:
... (AZ-a)).- (Un Subnet Public est un subnet qui a une route vers l'Internet Gateway (IGW)).
- Auto-assign Public IP (IP Publique) : Mettre
Enable(Activer).- Ceci est vital. Si "Disabled", l'instance n'aura qu'une IP Privée (ex:
172.31.x.x) et sera inaccessible depuis Internet.
- Ceci est vital. Si "Disabled", l'instance n'aura qu'une IP Privée (ex:
C'est le pare-feu (Stateful) de l'instance (voir guide AWS 2.3). Il est DENY ALL (Tout bloquer) par défaut (en entrée).
(PiÚge n°2 du Login) : Si vous ne configurez pas le Security Group (SG), le Port 22 (SSH) sera bloqué. Votre connexion (4.1) échouera (Timeout).
Configuration (Serveur Web)
Vous devez "Créer un nouveau Security Group" et ajouter (Whitelist) des rÚgles Inbound (Entrantes) :
| Type | Protocole | Port | Source | Description |
|---|---|---|---|---|
| SSH | TCP | 22 | My IP (ou 80.1.2.3/32) | (Permet votre IP (Admin) de se connecter en SSH). |
| HTTP | TCP | 80 | 0.0.0.0/0 (Anywhere) | (Permet à Internet d'accéder au site Web). |
| HTTPS | TCP | 443 | 0.0.0.0/0 (Anywhere) | (Permet à Internet d'accéder au site Web (SSL)). |
Ne jamais mettre 0.0.0.0/0 (Anywhere) sur le port 22 (SSH) ! (Sauf pour un test temporaire).
Configuration du "disque dur" (Volume EBS) de l'instance.
- Volume Root (Racine) : C'est le disque
/dev/sda1(OS).- Taille : (Défaut : 8 Go ou 10 Go). (Pour le Free Tier, restez < 30 Go).
- Type :
gp3(Recommandé) ougp2(Legacy).
- (Optionnel) Ajouter un Volume : (ex:
/dev/sdb) (Pour les données, ex: 100 Gogp3). - Delete on Termination (Supprimer à la fin) :
- CochĂ© (DĂ©faut) : Si vous terminez (Terminate) l'instance EC2, le Volume EBS (Disque) est dĂ©truit (supprimĂ©) en mĂȘme temps. (OK pour le Boot).
- DĂ©cochĂ© : Si vous terminez l'EC2, le Volume EBS (DonnĂ©es) survit (et continue d'ĂȘtre facturĂ©). (Bonne pratique pour les disques de DonnĂ©es).
Une fois l'instance "Running", sélectionnez-la dans la console AWS et cliquez sur "Connecter".
Ătape 1 : Permissions (chmod 400) (1 seule fois)
(PiÚge n°1) SSH (sécurité) refusera d'utiliser une clé (.pem) qui est "publique" (lisible par d'autres).
# (Rendre la clé 'Read-Only' pour vous seul)
$ chmod 400 /chemin/vers/ma-cle.pem
Ătape 2 : Connexion (ssh -i)
# Syntaxe: ssh -i [CLE_PRIVEE] [USER]@[IP_PUBLIQUE]
# (IP Publique ou DNS : ex: 'ec2-34-1-2-3.eu-west-3.compute.amazonaws.com')
$ ssh -i /chemin/vers/ma-cle.pem ec2-user@34.1.2.3
Quel "Utilisateur" (user) ?
L'utilisateur dépend de l'AMI (2.1) que vous avez choisie :
| AMI | Utilisateur (user) |
|---|---|
| Amazon Linux 2 / 2023 | ec2-user |
| Ubuntu | ubuntu |
| Debian | admin |
| RHEL | ec2-user ou root |
| CentOS | centos |
PuTTY (Windows "legacy") ne peut pas lire le format .pem (OpenSSH). Il a besoin de son propre format : .ppk (PuTTY Private Key).
Ătape 1 : Conversion (PuTTYgen) (1 seule fois)
- Ouvrir PuTTYgen (l'outil de conversion).
- Cliquer "Load".
- Sélectionner "All Files (*.*)" (pour voir le
.pem). - Charger
ma-cle.pem. - Cliquer "Save private key" (Ignorer la "passphrase" pour le moment).
- Sauvegarder
ma-cle.ppk.
Ătape 2 : Connexion (PuTTY)
- Ouvrir PuTTY.
- Session (Accueil) :
- Host Name:
ec2-user@34.1.2.3(user@IP)
- Host Name:
- Connection -> SSH -> Auth :
- Cliquer "Browse..." (Parcourir).
- Sélectionner
ma-cle.ppk.
- (Optionnel) Session -> Save (Sauvegarder la session).
- Cliquer Open.
AWS Systems Manager (SSM) Session Manager est la méthode moderne (et la plus sécurisée) pour se connecter (Shell) à une instance (Linux ou Windows).
Avantages (Sécurité)
- Pas de Clé SSH (
.pem) : (Pas de risque de vol de clĂ©). - Pas de Port 22 (SSH) : Le Security Group (3.2) peut ĂȘtre 100% fermĂ© (Inbound). (Surface d'attaque nulle).
- Authentification (IAM) : La connexion est autorisée par le RÎle IAM (5.2) (pas par une clé).
- Audit (Logs) : Toutes les commandes (Shell) peuvent ĂȘtre logguĂ©es (CloudWatch/S3).
Pré-requis
- L'instance (EC2) doit avoir l'Agent SSM (installé par défaut sur Amazon Linux, Ubuntu 18+).
- L'instance doit avoir un RÎle IAM (5.2) attaché, avec la Policy (gérée par AWS) :
AmazonSSMManagedInstanceCore. - (Si en Subnet Privé) L'EC2 doit pouvoir joindre les "VPC Endpoints" de SSM (via NAT (4.2) ou VPC Endpoint).
Connexion (UI)
Console EC2 -> Sélectionner l'Instance -> Clic "Connecter" -> Onglet "Session Manager" -> Clic "Connect". (Ouvre un terminal (shell) dans le navigateur).
cloud-init)Le User Data (Données Utilisateur) est un script (cloud-init) que vous fournissez (dans le Wizard de Lancement, section "Advanced details") pour initialiser l'instance.
Il est exécuté 1 SEULE FOIS, au premier démarrage (boot) de l'instance. (Il ne s'exécute pas lors d'un "Reboot").
Exemple (cloud-init - Bash)
Utilisé pour "bootstrapper" un serveur web (ex: apt install ...).
#!/bin/bash
# (Le 'shebang' est important)
# (Exécuté en tant que 'root')
# (Exemple Ubuntu/Debian)
apt-get update -y
apt-get install -y nginx
systemctl enable --now nginx
# (Exemple Amazon Linux 2 / RHEL)
yum update -y
yum install -y httpd
systemctl enable --now httpd
echo "Hello from EC2" > /var/www/html/index.html
Usage : Permet de crĂ©er des "Golden Images" (7.2) ou de configurer des nĆuds (ASG) (7.3) de maniĂšre automatisĂ©e.
ProblÚme (Mauvaise Pratique) : Une application (Python) sur un EC2 doit lire un fichier sur S3. Le développeur "hardcode" (écrit en dur) les clés (AWS_ACCESS_KEY) d'un "User" (IAM) dans le code (config.ini).
(FAILLE) Si le code (Git) fuite, l'attaquant a les clés (longue durée) de votre compte.
Solution (RĂŽle IAM)
C'est la meilleure pratique de sécurité. On "attache" un RÎle IAM (une "casquette" de permissions) à l'instance EC2 lors du lancement.
- (Console IAM) Créer une Policy (ex: "AllowReadMonBucket").
- (Console IAM) Créer un RÎle (ex: "MonRoleEC2") qui fait confiance au Service EC2 (
ec2.amazonaws.com). - (Console IAM) Attacher la "Policy" au "RĂŽle".
- (Console EC2) Lancer l'instance en lui attachant "MonRoleEC2".
Flux (Magique)
- L'application (Python/Boto3 SDK) sur l'EC2 fait :
boto3.client('s3')(sans clés). - Le SDK "voit" qu'il est sur un EC2 avec un RÎle.
- Il appelle (automatiquement) le "Metadata Service" (
169.254.169.254). - AWS (STS) génÚre des clés temporaires (1h) (basées sur la Policy du RÎle).
- Le SDK utilise ces clés temporaires pour appeler S3.
Résultat : Zéro clé "hardcodée". Sécurité maximale.
ProblĂšme : L'IP Publique (Auto-assignĂ©e, 3.1) d'une instance EC2 est dynamique (Ă©phĂ©mĂšre). Si vous Stoppez (ArrĂȘtez) et RedĂ©marrez (Start) l'instance, l'IP Publique change. (L'IP PrivĂ©e (VPC) ne change pas).
(ProblĂšme DNS) Votre enregistrement DNS (A) (ex: www.ideolab.com) pointe vers l'ancienne IP (morte).
Solution : Elastic IP (EIP)
Une EIP est une adresse IPv4 Publique Statique (Fixe) (réservée à votre compte).
Flux
- (Console VPC) Allouer (Allocate) une nouvelle EIP (ex:
54.1.2.3). - (Console EC2) Lancer l'instance (sans IP publique auto-assignée).
- (Console VPC) Associer (Associate) l'EIP (
54.1.2.3) Ă l'Instance EC2. - (DNS) Faire pointer
www.ideolab.comvers54.1.2.3.
(PiĂšge de CoĂ»t) Les EIPs sont gratuites (1 par instance) tant qu'elles sont ATTACHĂES Ă une instance RUNNING (en cours).
Une EIP non-attachée (ou attachée à une instance STOPPED) est facturée (cher) (pour éviter la pénurie d'IPv4).
C'est le modÚle de tarification (Compute) par défaut. (Le plus cher, mais le plus flexible).
Principe : Pay-as-you-go (Paiement Ă l'utilisation).
- Facturation : Ă la seconde (minimum 60 secondes).
- Coût : Prix plein (ex:
t3.micro= ~$0.01/heure). - Engagement : Aucun.
Usage
- Développement & Test : (Besoin d'instances pour 2 heures).
- Applications "Spiky" (à Pics) : (ex: Un site e-commerce pendant le Black Friday, géré par un ASG (3.2)).
- Applications (Stateless) : (Si combiné avec Spot).
ModÚles de réduction basés sur l'Engagement (Commitment).
Principe : Vous vous engagez (auprÚs d'AWS) à payer pour une certaine quantité de "Compute" pendant 1 an ou 3 ans, en échange d'une réduction massive (jusqu'à -72% vs On-Demand).
Usage : Charges de travail stables et prévisibles (ex: "Je sais que j'aurai besoin de ces 2 EC2 (BDD) 24/7 pendant 3 ans").
Reserved Instances (RI)
Engagement (Rigide) : Vous vous engagez sur une Famille (ex: m5) + Région (ex: eu-west-3) + OS (Linux) ... pendant 1/3 ans.
Avantage : (Convertible RI) Permet de changer de famille (ex: m5 -> c5).
Savings Plans (SP) (Recommandé)
Engagement (Flexible) : Vous ne vous engagez pas sur une instance, mais sur un montant ($).
Exemple : "Je m'engage à dépenser $10.00 / heure en Compute (EC2, Fargate, Lambda) pendant 3 ans."
Avantage : Flexibilité totale. La réduction s'applique automatiquement (jusqu'à $10/h) à tous vos types d'instances (t3, m5, c5) et services (EC2, Fargate, Lambda) dans le monde entier.
Les Instances Spot sont le modÚle de coût le moins cher (jusqu'à -90% de réduction vs On-Demand).
Le "Deal" (Marché)
Principe : Vous achetez (via "enchÚres") la capacité EC2 inutilisée (spare) d'AWS.
L'Inconvénient (Le "PiÚge") : C'est une capacité interruptible. Si AWS (ou un client On-Demand) a besoin de cette capacité, AWS vous envoie un "avis d'interruption" (2 minutes) et termine (tue) votre instance Spot.
Usage (Tolérance aux Pannes)
Ne jamais utiliser Spot pour des charges "Stateful" (ex: une BDD) ou critiques (ex: un serveur web unique).
Idéal pour :
- Tùches "Stateless" (Batch) : (Rendu vidéo, Calcul scientifique, Jobs Spark). (Si le job est tué, on le relance plus tard).
- ASG (Mixte) : (Bonne pratique) Configurer un ASG (3.2) (ex:
MaxSize=10) pour utiliser 70% Spot (pas cher) et 30% On-Demand (stable).
Un Snapshot EBS (voir 3.3) est un backup (sauvegarde) "point-in-time" (instantané) d'un Volume EBS (Disque).
Fonctionnement
- Stockage (S3) : Les snapshots sont (cachés) stockés sur S3 (moins chers que l'EBS).
- Incrémentiel : Le 1er Snapshot (A) est complet. Le 2Úme (B) ne copie que les blocs modifiés (deltas) depuis A. (Optimisation coût/temps).
- Crash-Consistent : (Prise "Ă chaud" (live)).
Usage
- Backup/Restore : (Sauvegarde) (Action :
CrĂ©er Snapshot). - Restauration : Vous pouvez crĂ©er un nouveau Volume EBS (disque) Ă partir d'un Snapshot (n'importe oĂč, mĂȘme dans une autre AZ (1.2) -> (HA)).
- Clonage : (Snapshot -> Nouveau Volume -> Attacher Ă une nouvelle EC2).
- Création d'AMI (7.2) : C'est la base des AMIs "Custom".
ProblÚme : Utiliser "User Data" (5.1) (apt install nginx...) est lent. (Chaque nouvelle instance de l'ASG prend 5 minutes pour démarrer/installer).
Solution : AMI "Golden Image" (Pré-installé)
Une "Custom AMI" est un Snapshot (7.1) + des Métadonnées (ex: "Type de Kernel"). C'est votre "Golden Image" (Image de référence).
Workflow (Baking)
- (Jour 1) Lancer 1 EC2 (Ubuntu).
- (Jour 1) S'y connecter (SSH) :
apt update,apt install nginx,apt install monit,apt install cloudwatch-agent... - (Jour 1) (Console EC2) Clic Droit -> "Create Image (AMI)". (Nom :
mon-app-v1.0). - (Jour 2) Modifier le Launch Template (3.2) de l'ASG (7.3) pour utiliser
ami-mon-app-v1.0(au lieu de l'AMI Ubuntu brute).
Résultat : Au prochain Scale-Out (3.2), la nouvelle instance EC2 démarre immédiatement (ex: < 30 sec) avec Nginx/Monit déjà installés (boot "chaud").
Un ASG (Auto Scaling Group) est le service qui automatise le cycle de vie des EC2, en combinant tous les concepts précédents.
Un ASG est défini par :
- 1. Le "Quoi" (Launch Template) (7.2) :
- Quelle AMI (1.2) ?
- Quel Instance Type (1.3) ?
- Quel Key Pair (2.3) ?
- Quel Security Group (3.2) ?
- Quel IAM Role (5.2) ?
- 2. Le "OĂč" (RĂ©seau) :
- Dans quel VPC (3.3) ?
- Dans quels Subnets (4.1) ? (Bonne Pratique : Au moins 2 AZs (ex:
eu-west-3a,eu-west-3b) pour la HA).
- 3. Le "Comment" (Gestion) :
MinSize/MaxSize: (Limites de scaling).DesiredCapacity: (L'état souhaité).Health Checks: (Sonde ELB ou EC2) (Pour l'auto-réparation).Scaling Policies: (Politiques de scaling) (ex:CPU > 50%).
