À la fin de ce tutoriel, vous saurez mettre des EC2 Spot en production sans drama : ASG mixed instances (base On-Demand + Spot), diversification types/AZ, capacity rebalance, draining, observabilité EventBridge/CloudWatch, et un lab CLI en
ca-central-1. Fondations dans aws-ec2-types-spot ; ici l’angle est patterns prod DevOps Elastic Hayway (DEH).Niveau : Intermédiaire · Temps estimé : 55–75 min · Versions cibles : AWS CLI v2 · EC2 Spot · Auto Scaling mixed instances · Dernière vérification : 2026-09-11 · Region :
ca-central-1Slug :
wow-spot-instances-prod· Série : WOW (44/50) · Mot-clé SEO : spot instances prod · Publish : HOLD← Précédent : AWS Cost FinOps · → Suivant : Multi-account Org · Aussi : Types EC2 & Spot · ASG Launch Template · Karpenter EKS
Prérequis
- Fondations Spot — EC2 types & Spot
- Launch Template + ASG — ASG & Launch Template
- Compte lab (
AWS_PROFILE=lab) — Démarrer avec AWS - VPC multi-AZ utile pour diversifier
Coût estimé : 0–quelques € (types petits, cleanup obligatoire). Spot est facturé. Pas de NAT/RDS « pour tester ».
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
aws sts get-caller-identity
Ce que nous allons construire
Spot en prod sans drama (WOW 44/50) — ca-central-1
├── Pourquoi Spot en prod (économie vs interruption)
├── Contrats Spot 2026 : 2 min notice, rebalance, allocation
├── Patterns DEH : ASG mixed + diversification + drain
├── Ce qu’il ne faut PAS mettre sur Spot seul
├── Lab : Launch Template Spot + ASG mixed (CLI)
├── Observabilité + runbook EventBridge / CloudWatch
└── Anti-patterns + checklist + quiz + FAQ
(Schéma — alt : « ASG mixed en ca-central-1 : base On-Demand + Spot diversifié, rebalance et draining ».)
Étape 1 — Pourquoi Spot en prod (économie vs interruption)
Les Spot Instances consomment la capacité EC2 spare. AWS peut les reprendre ; le prix est souvent très inférieur à l’On-Demand (ordre de grandeur fréquent 60–90 % selon type/AZ/période — vérifiez Spot Advisor, ne figez pas un %).
Lab = jetable. Prod = levier FinOps si l’app tolère l’interruption ou si une couche On-Demand absorbe le risque. DEH : économie sans drama, pas 100 % Spot partout.
| Dimension | On-Demand | Spot |
|---|---|---|
| Prix | Référence | Remise variable |
| Interruption | Rare | Prévue (capacity) |
| Notice | Variable | ~2 min (IMDS) |
| Usage DEH | Baseline critique | Burst, workers, flotte ASG |
Stateless + scalable + drainable = candidat Spot. Sinon On-Demand / Savings Plans pour la baseline.
Étape 2 — Contrats Spot 2026 : notice, rebalance, allocation
2.1 — Interruption notice (~2 minutes)
Avis via IMDS : fenêtre typique ~2 minutes pour drain / checkpoint / remplacement ASG.
TOKEN=$(curl -sX PUT "http://169.254.169.254/latest/api/token"
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -s -H "X-aws-ec2-metadata-token: $TOKEN"
http://169.254.169.254/latest/meta-data/spot/instance-action
Vide = pas d’action. JSON action/time = interruption planifiée.
2.2 — Rebalance Recommendation
Signal « cette Spot risque d’être reprise bientôt ». Avec Capacity Rebalance, l’ASG lance un remplacement prophylactique — cœur du sans drama.
2.3 — Allocation
| Stratégie | Idée | Quand |
|---|---|---|
| capacity-optimized | Pools les plus fournis | Stabilité |
| price-capacity-optimized | Prix + capacité | Défaut moderne |
| lowest-price | Moins cher | Lab ; risqué seul en prod |
DEH : price-capacity-optimized ou capacity-optimized — jamais lowest-price + 1 type / 1 AZ.
Étape 3 — Patterns prod sans drama (DEH)
- Launch Template (AMI, user-data, IAM, SG)
- MixedInstancesPolicy : base On-Demand (1–2 ou 20–40 %) + reste Spot
- Plusieurs types + AZ
- Capacity Rebalance = true
- Health checks ALB + draining / lifecycle hooks
[ ALB / Target Group ]
│
▼
[ ASG mixed — ca-central-1a/b/d ]
├── On-Demand base (ex. 2 × m6i.large)
└── Spot : m6i.large | m6a.large | m7i.large | m5.large
+ capacity rebalance + drain
Diversifiez 4–8 types proches et ≥ 2–3 AZ. Écoutez IMDS + rebalance ; checkpoint jobs longs (SQS/S3). Lifecycle hooks terminating:wait allongent le drain au-delà des 2 minutes brutes.
Étape 4 — Ce qu’il ne faut PAS mettre sur Spot seul
| Workload | Spot seul ? | Pourquoi |
|---|---|---|
| DB single-AZ / primary unique | Non | État / RTO |
| Broker stateful solo | Non | Pas de failover |
| Licence sticky sans drain | Non | Downtime |
| Bastion unique | Non | Accès coupé |
| Workers batch / CI / queue | Oui | Relançables |
| Front API stateless + ALB | Oui (+ base OD) | Transparent |
| Nodes EKS/ECS (ASG/Karpenter) | Oui (patterns) | Karpenter |
Jamais un seul Spot pour toute la prod : base On-Demand ou design multi-AZ survivant à la perte d’un nœud.
Étape 5 — Lab ca-central-1 : LT Spot + ASG mixed (CLI)
Remplacez subnet-* / sg-*. Cleanup obligatoire.
5.1 — AMI + Launch Template
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
AMI_ID=$(aws ssm get-parameters
--names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
--query 'Parameters[0].Value' --output text)
aws ec2 create-launch-template
--launch-template-name deh-wow44-spot-lt
--version-description "WOW44 Spot prod lab"
--launch-template-data "{
"ImageId": "${AMI_ID}",
"InstanceType": "t3.small",
"SecurityGroupIds": ["sg-REPLACE"]
}"
5.2 — ASG mixed instances
cat > /tmp/asg-mixed.json << 'EOF'
{
"LaunchTemplate": {
"LaunchTemplateSpecification": {
"LaunchTemplateName": "deh-wow44-spot-lt",
"Version": "$Latest"
},
"Overrides": [
{ "InstanceType": "t3.small" },
{ "InstanceType": "t3a.small" },
{ "InstanceType": "t2.small" }
]
},
"InstancesDistribution": {
"OnDemandBaseCapacity": 1,
"OnDemandPercentageAboveBaseCapacity": 20,
"SpotAllocationStrategy": "price-capacity-optimized"
}
}
EOF
aws autoscaling create-auto-scaling-group
--auto-scaling-group-name deh-wow44-spot-asg
--min-size 1 --max-size 4 --desired-capacity 2
--vpc-zone-identifier "subnet-AAA,subnet-BBB"
--mixed-instances-policy file:///tmp/asg-mixed.json
--capacity-rebalance
--tags ResourceId=deh-wow44-spot-asg,ResourceType=auto-scaling-group,Key=Project,Value=deh-wow44,PropagateAtLaunch=true
5.3 — IMDS check + cleanup
TOKEN=$(curl -sX PUT "http://169.254.169.254/latest/api/token"
-H "X-aws-ec2-metadata-token-ttl-seconds: 60")
curl -s -H "X-aws-ec2-metadata-token: $TOKEN"
http://169.254.169.254/latest/meta-data/instance-life-cycle
curl -s -H "X-aws-ec2-metadata-token: $TOKEN"
http://169.254.169.254/latest/meta-data/spot/instance-action || true
curl -s -H "X-aws-ec2-metadata-token: $TOKEN"
http://169.254.169.254/latest/meta-data/events/recommendations/rebalance || true
aws autoscaling update-auto-scaling-group
--auto-scaling-group-name deh-wow44-spot-asg --min-size 0 --desired-capacity 0
aws autoscaling delete-auto-scaling-group
--auto-scaling-group-name deh-wow44-spot-asg --force-delete
aws ec2 delete-launch-template --launch-template-name deh-wow44-spot-lt
En lab calme, IMDS Spot est souvent vide : câblez le chemin, ne forcez pas une interruption.
Étape 6 — Observabilité + runbook
| Signal | Source | Action |
|---|---|---|
| Rebalance recommendation | EventBridge | Vérifier CR + nouvelle instance |
| Spot interruption warning | EventBridge | Drain ; escalade si Desired bas |
| InsufficientInstanceCapacity | ASG activities | Élargir overrides / ↑ % OD |
| UnHealthy host ALB | CloudWatch | Corréler terminaisons Spot |
{
"source": ["aws.ec2"],
"detail-type": [
"EC2 Spot Instance Interruption Warning",
"EC2 Instance Rebalance Recommendation"
]
}
Runbook : 1) % Spot vs OD, 2) diversification, 3) Capacity Rebalance on, 4) alarme InService, 5) urgence = OD % → 100 %.
Étape 7 — Anti-patterns + checklist prod DEH
Anti-patterns : 100 % Spot sans base OD ; 1 type / 1 AZ ; lowest-price exclusif ; ignorer rebalance ; pas d’EventBridge ; jobs longs sans checkpoint ; licence sticky sur Spot.
Checklist : workload drainable ; ASG mixed avec OnDemandBaseCapacity ≥ 1 ; ≥ 3–4 overrides + multi-AZ ca-central-1 ; allocation capacity/price-capacity-optimized ; Capacity Rebalance ; ALB draining testé ; EventBridge → alerte ; runbook OD 100 % ; tags Owner/Service/Env/CostCenter ; cleanup lab.
Erreurs fréquentes
| Erreur | Impact | Correction |
|---|---|---|
| Spot 100 % sans base OD | Outage si pool vide | OnDemandBaseCapacity + % OD |
| Un type / une AZ | Interruptions corrélées | Diversifier types + AZ |
| lowest-price seul en prod | Pools fragiles | capacity / price-capacity-optimized |
| Pas de Capacity Rebalance | Remplacement tardif | Activer CR + écouter rebalance |
| DB stateful unique sur Spot | Perte / RTO long | OD / RDS multi-AZ |
| Region us-east-1 par défaut | Incohérence DEH | Forcer ca-central-1 |
| Oublier cleanup ASG | Facture | --force-delete + delete LT |
| Confondre Spot et Savings Plans | Mauvais levier FinOps | Spot = interruptible ; SP = engagement |
Quiz (5 questions)
1. Le signal Spot d’interruption via IMDS donne typiquement :
– A. 24 h pour migrer
– B. Environ 2 minutes
– C. Aucun délai
2. En prod DEH, le pattern recommandé est :
– A. Une seule Spot dans une AZ
– B. ASG mixed : base On-Demand + Spot diversifié + Capacity Rebalance
– C. Spot Fleet lowest-price sans ALB
3. Que faut-il éviter sur Spot seul ?
– A. Workers CI batch
– B. Base de données stateful single-instance
– C. Front API stateless derrière ALB (avec base OD)
4. Region lab de ce tuto :
– A. us-east-1
– B. ca-central-1
– C. eu-west-3
5. La Rebalance Recommendation sert surtout à :
– A. Augmenter le prix Spot
– B. Anticiper un remplacement avant interruption
– C. Remplacer Savings Plans
Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B
FAQ
Pourquoi ca-central-1 ?
Standard lab DevOps Elastic Hayway : cohérence IAM/FinOps entre tutos. Diversifiez les AZ dans ca-central-1.
Spot vs Savings Plans ?
Spot = spare interruptible, rabais variable. Savings Plans = engagement 1–3 ans, baseline stable. DEH : SP/OD au socle + Spot au burst.
Karpenter vs ASG Spot ?
ASG mixed = pattern EC2 classique. Karpenter = nœuds EKS dynamiques (dont Spot). Mêmes règles de diversification. Voir wow-karpenter-eks.
Spot Fleet ou ASG ?
Derrière un ALB, ASG + MixedInstancesPolicy (health checks, lifecycle). Spot Fleet utile pour certains batch. Ce WOW = ASG mixed.
Quelle stratégie d’allocation ?
Prod : price-capacity-optimized ou capacity-optimized. lowest-price pour labs / ultra-tolérants.
Comment tester l’interruption ?
Pas de forçage d’une vraie reprise Spot AWS. Mock IMDS, EventBridge injecté, ou terminate ASG pour valider drain.
Spot et Free Tier ?
Non — Spot facturé. Free Tier = surtout certains On-Demand. Voir aws-ec2-types-spot.
Quel % Spot viser ?
Conservateur d’abord (base OD + 50–70 % Spot hors critique), mesurez, augmentez. APIs critiques : base OD plus haute.
Pour aller plus loin
- EC2 types & Spot (fondations)
- ASG & Launch Template
- Karpenter sur EKS
- AWS Cost FinOps
- CloudWatch alarmes
- Well-Architected
- Démarrer avec AWS
Maillage série WOW
| ← Précédent | AWS Cost FinOps |
| → Suivant | Multi-account Org |
| Aussi | Types EC2 & Spot · ASG Launch Template · Karpenter EKS |
Meta publication (SEO)
- Title SEO : Spot Instances en prod sans drama : ASG mixed, rebalance (guide FR)
- Meta description : Spot Instances en production sans drama : ASG mixed instances, diversification, capacity rebalance, lab ca-central-1, FAQ, quiz et check-list DEH.
- Focus keyword : spot instances prod
- Secondary : EC2 Spot production, ASG mixed instances, capacity rebalance, Spot interruption
- Image :
assets/web/devopelastichayway/cover-wow-spot-instances-prod-1200x630.webp(à générer) - Catégorie : WOW / FinOps · Niveau : Intermédiaire
- URL cible : https://devopelastichayway.com/tutoriels/wow-spot-instances-prod/
- Post live : N/A (nouveau) · slug
wow-spot-instances-prod· Publish : HOLD (draft only — feu vert Maître requis)
Pour aller plus loin — hubs live
Retour parcours Catalogue Tutoriels — hub de la série et leçons sœurs.