À 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-1

Slug : 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

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)

  1. Launch Template (AMI, user-data, IAM, SG)
  2. MixedInstancesPolicy : base On-Demand (1–2 ou 20–40 %) + reste Spot
  3. Plusieurs types + AZ
  4. Capacity Rebalance = true
  5. 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

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)

← Catalogue Tutoriels

Pour aller plus loin — hubs live

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