Amazon Web Services a annoncé le 25 octobre 2025 la disponibilité générale de S3 Express One Zone, une nouvelle classe de stockage ultra-rapide offrant des latences milliseconde unique et un débit 10x supérieur à S3 Standard. Destinée aux workloads temps réel comme le ML training, les analytics et le gaming, cette innovation change la donne pour les applications exigeantes.
Performance Exceptionnelle
Latence Milliseconde Unique
S3 Express One Zone atteint des latences jamais vues sur du stockage objet cloud :
Benchmarks mesurés :
| Métrique | S3 Standard | S3 Express One Zone | Amélioration |
|---|---|---|---|
| Latence GET (p50) | 45ms | 2ms | 22x plus rapide |
| Latence PUT (p50) | 60ms | 3ms | 20x plus rapide |
| Latence DELETE | 40ms | 2ms | 20x plus rapide |
| Débit (single client) | 5500 req/s | 55000 req/s | 10x |
Pourquoi si rapide ?
S3 Standard (multi-AZ) :
Request → Load Balancer → S3 Frontend → S3 Backend (3 AZ)
→ Réplication synchrone vers 3 zones
→ Confirmation au client
Latence totale : 40-60ms
S3 Express One Zone :
Request → S3 Express Endpoint (in-VPC)
→ Stockage local SSD (1 seule AZ)
→ Confirmation immédiate
Latence totale : 2-5ms
Gain : pas de latence réseau inter-AZ, pas de réplication
Débit Massivement Parallèle
Test de charge :
import boto3
import concurrent.futures
import time
s3 = boto3.client('s3')
bucket = 'my-express-bucket--usw2-az1--x-s3' # Format spécial Express
def upload_object(i):
s3.put_object(
Bucket=bucket,
Key=f'test-{i}.dat',
Body=b'x' * 1024 # 1KB
)
# 10000 uploads concurrents
start = time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
list(executor.map(upload_object, range(10000)))
duration = time.time() - start
print(f"10000 uploads en {duration:.2f}s = {10000/duration:.0f} req/s")
# S3 Standard : 10000 uploads en 18s = 556 req/s
# S3 Express : 10000 uploads en 1.8s = 5556 req/s
# → 10x plus rapide !
Cas d'Usage Principaux
1. ML Training à Grande Échelle
Problème ancien : Entraîner un modèle sur 100TB de données avec S3 Standard = goulot d'étranglement I/O.
Solution S3 Express :
import sagemaker
from sagemaker.pytorch import PyTorch
# Training job SageMaker
estimator = PyTorch(
entry_point='train.py',
role='SageMakerRole',
instance_type='ml.p4d.24xlarge', # 8x A100 GPUs
instance_count=10,
framework_version='2.1',
py_version='py310',
hyperparameters={
'epochs': 100,
'batch-size': 512
}
)
# Dataset sur S3 Express One Zone
estimator.fit({
'training': 's3://ml-dataset--usw2-az1--x-s3/imagenet/',
'validation': 's3://ml-dataset--usw2-az1--x-s3/val/'
})
# Résultats :
# S3 Standard : GPU utilization 65% (I/O bottleneck)
# S3 Express : GPU utilization 94% (presque pas d'attente I/O)
# Training time : 48h → 28h (-42%)
Économie réelle :
- 10x instances ml.p4d.24xlarge : 325$/h
- Gain : 20h × 325$/h = 6500$ économisés
- Coût stockage S3 Express : +50$ (négligeable)
- ROI immédiat
2. Analytics Temps Réel
Requêtes Athena ultra-rapides :
-- Query sur S3 Standard
SELECT user_id, COUNT(*) as events
FROM s3_standard_events
WHERE event_date = '2025-10-25'
GROUP BY user_id;
-- Temps d'exécution : 45 secondes
-- Même query sur S3 Express
SELECT user_id, COUNT(*) as events
FROM s3_express_events
WHERE event_date = '2025-10-25'
GROUP BY user_id;
-- Temps d'exécution : 4 secondes
-- → 11x plus rapide !
Use case ClickHouse :
# ClickHouse avec S3 Express comme storage tier
CREATE TABLE events (
event_id UUID,
user_id UInt64,
event_type String,
timestamp DateTime
)
ENGINE = MergeTree()
ORDER BY (user_id, timestamp)
SETTINGS storage_policy = 's3_express';
-- INSERT 1 billion rows
INSERT INTO events SELECT * FROM s3(
's3://events--usw2-az1--x-s3/batch/*.parquet',
'Parquet'
);
-- S3 Standard : 25 min
-- S3 Express : 3 min
-- → 8x plus rapide
3. Gaming : Save Files et Leaderboards
Problème : Jeux multijoueurs avec millions de players = latence save/load critique.
Solution :
// AWS SDK v3
import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
const s3 = new S3Client({
region: 'us-west-2',
// Important : endpoint spécifique Express
endpoint: 'https://s3express-usw2-az1.us-west-2.amazonaws.com'
});
// Save player state (moins de 5ms)
async function savePlayerState(playerId, state) {
const start = Date.now();
await s3.send(new PutObjectCommand({
Bucket: 'game-saves--usw2-az1--x-s3',
Key: `players/${playerId}/state.json`,
Body: JSON.stringify(state)
}));
console.log(`Saved in ${Date.now() - start}ms`);
// S3 Standard : 60ms
// S3 Express : 3ms
}
// Load player state (moins de 3ms)
async function loadPlayerState(playerId) {
const start = Date.now();
const response = await s3.send(new GetObjectCommand({
Bucket: 'game-saves--usw2-az1--x-s3',
Key: `players/${playerId}/state.json`
}));
const state = JSON.parse(await response.Body.transformToString());
console.log(`Loaded in ${Date.now() - start}ms`);
return state;
// S3 Standard : 50ms
// S3 Express : 2ms
}
Impact utilisateur :
- Temps de chargement partie : 50ms → 2ms
- Expérience fluide même avec sauvegardes fréquentes
- Supporte 100K+ players simultanés
Architecture et Limitations
Single-AZ uniquement
Trade-off clé :
S3 Express One Zone :
✅ Latence ultra-faible (2-5ms)
✅ Débit 10x supérieur
✅ Prix compétitif pour hot data
❌ Pas de réplication multi-AZ (durabilité 99.95% vs 99.999999999%)
❌ Si AZ down → data inaccessible
Recommandation :
- Data critique → S3 Standard (multi-AZ)
- Hot cache, temp data, ML training → S3 Express
Best practice : Hybrid Storage Strategy
# Architecture hybride
import boto3
s3_standard = boto3.client('s3')
s3_express = boto3.client('s3', endpoint_url='https://s3express-usw2-az1.us-west-2.amazonaws.com')
# 1. Master data → S3 Standard (durable)
s3_standard.put_object(
Bucket='master-data',
Key='dataset/train.parquet',
Body=data
)
# 2. Copy to S3 Express pour training (performance)
s3_express.copy_object(
CopySource={'Bucket': 'master-data', 'Key': 'dataset/train.parquet'},
Bucket='ml-cache--usw2-az1--x-s3',
Key='dataset/train.parquet'
)
# 3. Train from S3 Express (fast)
train_model(input_path='s3://ml-cache--usw2-az1--x-s3/dataset/')
# 4. Results → S3 Standard (durable)
s3_standard.put_object(
Bucket='ml-models',
Key='model-v2.pth',
Body=model_weights
)
Naming Convention Spéciale
Format bucket S3 Express :
bucket-name--azid--x-s3
Exemples :
- my-data--usw2-az1--x-s3 (US West 2, AZ 1)
- analytics--euw1-az2--x-s3 (EU West 1, AZ 2)
- cache--apse1-az3--x-s3 (Asia Pacific Southeast 1, AZ 3)
Important :
- Suffixe --x-s3 obligatoire
- AZ ID doit matcher région du bucket
- Incompatible avec outils existants ne supportant pas ce format
Pricing et Coût Total
Tarification
| Métrique | S3 Standard | S3 Express One Zone |
|---|---|---|
| Storage | 0,023$ / GB-month | 0,16$ / GB-month |
| PUT/POST | 0,005$ / 1000 | 0,0025$ / 1000 |
| GET/SELECT | 0,0004$ / 1000 | 0,0003$ / 1000 |
| Data transfer out | 0,09$ / GB | 0,09$ / GB |
S3 Express = 7x plus cher en stockage, mais 2x moins cher en requêtes
Analyse ROI
Scénario : Analytics temps réel
Données : 10 TB
Requêtes : 100 millions GET/jour
Durée de vie données : 7 jours (rolling window)
S3 Standard :
- Storage : 10000 GB × 0,023$ × (7/30) = 53$
- GET : 100M × 30 jours × 0,0004$ / 1000 = 1200$
- Total/mois : 1253$
S3 Express One Zone :
- Storage : 10000 GB × 0,16$ × (7/30) = 373$
- GET : 100M × 30 jours × 0,0003$ / 1000 = 900$
- Total/mois : 1273$
Différence : +20$/mois (+1,6%)
Gain latency : 45ms → 2ms
Gain débit : 5500 → 55000 req/s
→ ROI positif si performance critique
Scénario : ML Training
Dataset : 50 TB
Training jobs : 10/mois × 24h chacun
Read throughput : 10 GB/s
S3 Standard :
- Storage : 50000 × 0,023$ = 1150$/mois
- GET : ~500M requêtes × 0,0004$ / 1000 = 200$
- GPU idle time (I/O wait) : 20% × 10 jobs × 24h × 325$/h = 15600$
- Total : 16950$/mois
S3 Express :
- Storage : 50000 × 0,16$ = 8000$/mois
- GET : 500M × 0,0003$ / 1000 = 150$
- GPU idle time : 5% × 10 jobs × 24h × 325$/h = 3900$
- Total : 12050$/mois
Économie : 4900$/mois (-29%)
S3 Express = rentable si workload I/O intensif
Intégrations
SageMaker
# SageMaker automatiquement optimisé pour S3 Express
estimator.fit('s3://training--usw2-az1--x-s3/data/')
# → Utilise S3 Express endpoint automatiquement
EMR / Spark
// Spark configuré pour S3 Express
spark.read.parquet("s3://analytics--usw2-az1--x-s3/events/")
.groupBy("user_id")
.count()
.write.parquet("s3://results--usw2-az1--x-s3/aggregates/")
// Performance :
// S3 Standard : 15 min
// S3 Express : 2 min
Lambda
import boto3
s3 = boto3.client('s3', endpoint_url='https://s3express-usw2-az1.us-west-2.amazonaws.com')
def lambda_handler(event, context):
# Lambda dans même AZ = latence minimale
obj = s3.get_object(
Bucket='cache--usw2-az1--x-s3',
Key='config.json'
)
# Cold start S3 Express : 2ms vs 50ms S3 Standard
# → Lambda execution 20ms plus rapide
Disponibilité
Régions lancées (25 oct 2025) :
- US East (N. Virginia, Ohio)
- US West (Oregon, N. California)
- EU (Ireland, Frankfurt, London)
- Asia Pacific (Tokyo, Singapore, Sydney)
Prochaines régions (Q4 2025) :
- Canada, South America, Middle East
Articles connexes
Pour approfondir le sujet, consultez également ces articles :
- AWS Graviton 4 : Les Processeurs ARM Révolutionnent le Cloud Computing en 2025
- AWS Quick Suite : l’automatisation par agents IA prend forme
- Kubernetes 1.29 : Sidecar Containers GA et JobSet pour ML
Conclusion
S3 Express One Zone révolutionne le stockage cloud avec des latences et débits jamais atteints sur du stockage objet. Idéal pour ML training, analytics temps réel et applications latence-sensibles, ce service s'adresse aux workloads où la performance prime sur la durabilité multi-AZ.
Quand utiliser S3 Express :
- ML training datasets (hot data)
- Analytics temps réel (ClickHouse, Athena)
- Gaming (save files, leaderboards)
- Caches applicatifs haute performance
Quand rester sur S3 Standard :
- Archivage long terme
- Backups critiques
- Data nécessitant durabilité 11 neuf
S3 Express One Zone = nouveau standard pour stockage cloud haute performance.


