re:Invent 2025 : Démasquer le Hype autour du Dernier Renouveau de Lambda et S3
Bon, les amis, un autre re:Invent est derrière nous, et la poussière numérique retombe encore sur le Las Vegas Strip. En tant qu'ingénieur senior qui a passé une semaine à passer au crible les keynotes, les sessions de breakout et l'inévitable marketing, je suis ici pour vous donner la vérité sans fard sur les dernières offres d'AWS pour Lambda et S3. Oubliez les mots à la mode "révolutionnaires" et "innovants". Nous allons plonger en profondeur dans les implications pratiques, les nuances de configuration et, surtout, voir où le caoutchouc rencontre la route – et où il pourrait encore être un peu glissant.
Le thème de cette année semblait être un double mandat : étendre les capacités serverless à des workflows de plus en plus complexes et avec état, et faire de S3 une plateforme de données encore plus redoutable, prête pour l'IA. Sur le papier, cela semble solide. Mais comme nous le savons tous, le diable se cache dans les logs de cloudformation deploy.
Lambda Durable Functions : La Promesse à Long Terme vs. la Réalité
AWS a enfin apporté un modèle d'"exécution durable" natif à Lambda, baptisé Lambda Durable Functions. L'argumentaire est convaincant : écrire des applications fiables, multi-étapes directement dans Lambda en utilisant des modèles de programmation familiers, avec checkpointing, suspension jusqu'à un an et récupération automatique. La communauté réclamait depuis longtemps quelque chose comme ça, recourant souvent à Step Functions ou à une orchestration personnalisée.
Comment Ça Marche (et Où Ça Devient Compliqué)
Les Durable Functions ne sont pas un nouveau type de ressource ; ce sont une amélioration des fonctions Lambda existantes. Vous activez l'exécution durable sur une fonction Lambda standard, puis, à l'aide d'un nouveau SDK open source (disponible pour Python, Node.js et TypeScript au lancement), vous accédez à des primitives de "contexte durable" comme steps et waits. Le wrapper with_durable_execution autour de votre gestionnaire est le point d'entrée.
Considérez un workflow de traitement de commande en plusieurs étapes :
- Valider la commande.
- Traiter le paiement (appel d'API externe).
- Notifier le service d'expédition.
- Attendre la confirmation d'expédition (jusqu'à 7 jours).
- Mettre à jour le client.
Auparavant, l'étape 4 nécessitait un état Wait de Step Functions ou un mécanisme de sondage complexe basé sur SQS/DynamoDB. Avec les Durable Functions, vous pourriez écrire quelque chose de similaire à ceci (pseudo-Python) :
from lambda_durable_sdk import DurableContext, with_durable_execution
@with_durable_execution
def order_processor_handler(event: dict, context: DurableContext):
order_id = event["order_id"]
# Étape 1 : Valider la commande (logique Lambda normale)
context.step("validate_order", validate_order_logic, order_id)
# Étape 2 : Traiter le paiement (appel externe, potentiellement retentable)
payment_result = context.step("process_payment", process_payment_api, order_id)
if payment_result["status"] != "SUCCESS":
# Les fonctions durables gèrent les nouvelles tentatives implicitement ou explicitement
raise PaymentFailedException("Paiement échoué après plusieurs tentatives.")
# Étape 3 : Notifier l'expédition
shipping_ack = context.step("notify_shipping", notify_shipping_service, order_id)
# Étape 4 : Attendre un événement externe (confirmation d'expédition)
# C'est là que la magie opère : la fonction se suspend, pas de coût de calcul.
# Elle reprend lorsqu'un événement externe spécifique (par exemple, un message SQS, un rappel API Gateway)
# est reçu, corrélé à cette instance spécifique de fonction durable.
shipment_details = context.wait_for_external_event("shipment_confirmed", timeout_seconds=7*24*3600) # jusqu'à un an
# Étape 5 : Mettre à jour le client
context.step("update_customer", update_customer_record, order_id, shipment_details)
return {"status": "Commande traitée avec succès", "order_id": order_id}
La clé ici est le mécanisme sous-jacent de "checkpoint et relecture". L'environnement d'exécution des Durable Functions capture l'état de votre fonction à chaque appel step ou wait, le persiste, puis le réhydrate lors de la reprise. Ce n'est pas entièrement nouveau ; les Durable Functions de Microsoft Azure (dont cela s'inspire clairement) l'utilisent depuis des années. Le délai d'exécution total de la fonction durable peut désormais aller jusqu'à un an, avec une période de rétention configurable pour les checkpoints.
Le Hic : Bien que cela simplifie le code, l'expérience de développement pour le débogage des workflows complexes et suspendus sera cruciale. La surveillance devra rapidement évoluer au-delà des simples logs CloudWatch. De plus, la manière réelle de corréler les événements externes à une instance spécifique de fonction durable (par exemple, via un message SQS avec un ID de corrélation) nécessite une conception minutieuse. Cela abstrait Step Functions, mais n'élimine pas le besoin d'une gestion d'état prudente et d'une logique de gestion des erreurs robuste dans votre code. L'affirmation de "aucun outil personnalisé requis" semble optimiste lorsqu'il s'agit de workflows d'état distribués de longue durée.
Lambda Managed Instances : Serverless avec des Roulettes ?
Cette annonce a semblé reconnaître un point douloureux spécifique : les démarrages à froid imprévisibles et les performances variables de Lambda standard pour les charges de travail spécialisées et à l'état stable. Lambda Managed Instances vous permet d'exécuter des fonctions Lambda sur des instances de calcul EC2 tout en prétendument maintenant la simplicité opérationnelle serverless. Cela est présenté comme un moyen d'accéder à des options de calcul spécialisées (pensez aux GPU, types d'instances spécifiques) et d'optimiser les coûts pour les scénarios de charge constante sans le fardeau opérationnel complet d'EC2.
La Réalité Technique
Essentiellement, AWS provisionne et gère des instances EC2 dédiées pour vos fonctions Lambda. Cela vous offre des caractéristiques de performance plus prévisibles, car le calcul sous-jacent n'est pas partagé aussi agressivement dans un environnement multitenant. Vous définissez la manière dont vos fonctions Lambda s'exécutent sur ces instances EC2, en choisissant des profils de calcul spécifiques.
Du point de vue du développeur, le scénario idéal est que votre code de fonction Lambda reste inchangé. La différence opérationnelle est ce qu'AWS gère : création d'instance, application de correctifs, mise à l'échelle en fonction des métriques d'utilisation (CPU/mémoire, plutôt que simplement le nombre de requêtes) et terminaison.
Mais voici le hic : Si votre trafic est très "pic", passant de zéro à des milliers de requêtes en quelques secondes, la mise à l'échelle instantanée de Lambda standard réagira toujours plus rapidement. Les Managed Instances se mettent à l'échelle en fonction de l'utilisation des ressources, ce qui est un processus asynchrone, introduisant un profil de latence différent. Le modèle de coût, bien qu'optimisé pour l'état stable, doit être soigneusement évalué. Vous payez effectivement pour la capacité EC2 provisionnée, même si elle est gérée par Lambda. Cela brouille la ligne entre "serverless" et "calcul géré" de manière significative. C'est une solution pragmatique pour des niches spécifiques, mais la qualifier de simplicité "purement serverless" semble exagérée pour ceux qui embrassent véritablement la nature éphémère du FaaS. Pour ceux qui cherchent à échapper au délai d'expiration de 15 minutes de Lambda et qui ont besoin de performances constantes sur du matériel spécialisé, cela pourrait être une alternative pratique (mais moins "serverless") à ECS/Fargate.
La Vérité Brutale : La Nouvelle Facturation de Lambda pour la Phase INIT
Celui-ci a frappé la communauté comme une douche froide. À compter du 1er août 2025, AWS facturera désormais la phase d'initialisation (phase INIT) pour toutes les configurations de fonctions Lambda. Auparavant, pour les fonctions empaquetées en ZIP utilisant des runtimes gérés, cette phase était essentiellement gratuite. Maintenant, elle est standardisée, ce qui signifie que vous paierez pour elle comme vous le faites pour les images de conteneur, les runtimes personnalisés et la concurrence provisionnée.
Pourquoi Cela Compte
La phase INIT comprend le téléchargement de votre code, le démarrage du runtime et l'exécution de tout code en dehors de votre gestionnaire principal. Pour les fonctions complexes avec des dépendances importantes, des frameworks lourds ou des attachements VPC, cela peut prendre des centaines de millisecondes, voire quelques secondes.
Impact et Atténuation
- Augmentation des Coûts : AWS n'a pas fourni de chiffres d'impact spécifiques, mais les estimations suggèrent une augmentation des coûts Lambda de 5 à 50 % pour les fonctions avec une surcharge d'initialisation importante. Les fonctions avec des dépendances minimales verront un impact faible (5 à 10 %), tandis que celles avec des frameworks lourds ou plusieurs SDK pourraient voir des augmentations substantielles (25 à 50 %).
- L'Optimisation est la Clé (Plus Que Jamais) : Ce changement force un regain d'attention sur l'optimisation des démarrages à froid. Les techniques telles que la réduction de la taille du package, l'utilisation de calques Lambda pour les dépendances partagées, l'optimisation du code d'initialisation et l'exploitation de SnapStart (pour les runtimes pris en charge) deviennent essentielles.
- Repenser les Architectures : Pour les API orientées utilisateur où chaque milliseconde et chaque dollar comptent, ou pour les fonctions rarement invoquées, ce changement de facturation pourrait inciter les équipes à réévaluer leurs choix. Une Lambda est-elle toujours adaptée, ou devriez-vous envisager Fargate/ECS pour les processus de longue durée, ou même combiner plusieurs fonctions Lambda pour réduire les démarrages à froid globaux ?
Ce n'est pas un "game-changer" au sens positif, mais un rappel pragmatique que le serverless n'est pas exempt de considérations de coûts pour l'initialisation. C'est un mouvement clair pour monétiser un coût auparavant "caché" de leur infrastructure.
Amazon S3 Vectors : Un Nouveau Type de Données pour l'Ère de l'IA ?
Avec le cycle de battage médiatique de l'IA toujours à plein régime, AWS a lancé Amazon S3 Vectors, maintenant généralement disponible. Il s'agit du support natif de S3 pour le stockage et l'interrogation de données vectorielles, visant à réduire le coût total de possession du stockage et de l'interrogation vectorielle jusqu'à 90 % par rapport aux solutions de bases de données vectorielles spécialisées. Bien qu'AWS pousse S3 comme une plateforme prête pour l'IA, AI Agents 2025 : Pourquoi AutoGPT et CrewAI ont Toujours du Mal avec l'Autonomie souligne que l'infrastructure n'est que la moitié de la bataille.
Le Plongée Technique
S3 Vectors vous permet de stocker des embeddings de haute dimension directement dans les buckets S3 et d'effectuer des recherches de similarité. Il se vante d'une impressionnante évolutivité : jusqu'à deux milliards de vecteurs par index (une augmentation de 40 % par rapport à la capacité d'aperçu) et jusqu'à 20 billions de vecteurs par bucket. Les affirmations de performance incluent une performance de requête fréquente 2 à 3 fois plus rapide.
Les intégrations clés sont avec les bases de connaissances Amazon Bedrock et le service Amazon OpenSearch, ce qui facilite la création d'agents d'IA, de systèmes de génération augmentée par récupération (RAG) et d'applications de recherche sémantique.
# Pseudo-code pour l'interaction S3 Vectors (conceptuel)
import boto3
s3_client = boto3.client('s3')
# En supposant que votre bucket S3 'my-vector-bucket' est configuré pour S3 Vectors
# et qu'un index 'my-vector-index' existe.
def store_vector_embedding(bucket_name, object_key, vector_data, metadata=None):
"""Stocke un embedding vectoriel en tant qu'objet S3 avec des métadonnées associées."""
s3_client.put_object(
Bucket=bucket_name,
Key=object_key,
Body=str(vector_data), # En réalité, ce serait un format binaire spécialisé
Metadata={
'x-amz-meta-vector-index-id': 'my-vector-index',
'x-amz-meta-vector-data': str(vector_data) # Simplifié pour l'exemple
# Autres métadonnées pour le filtrage, etc.
}
# Des paramètres S3 Vectors spécifiques supplémentaires seraient ici
)
print(f"Embedding vectoriel stocké pour {object_key}")
def query_vector_embedding(bucket_name, query_vector, top_k=10):
"""Interroge S3 Vectors pour des embeddings similaires."""
response = s3_client.query_objects(
Bucket=bucket_name,
QueryType='VECTOR_SIMILARITY', # Nouveau type de requête
QueryParameters={
'VectorIndexId': 'my-vector-index',
'QueryVector': str(query_vector),
'TopK': top_k
}
# Des paramètres S3 Vectors spécifiques supplémentaires
)
return response['Results']
# Exemple d'utilisation (fortement simplifié)
embedding = [0.1, 0.2, 0.9, ...] # votre embedding réel
store_vector_embedding('my-vector-bucket', 'doc-123.vec', embedding)
search_results = query_vector_embedding('my-vector-bucket', [0.11, 0.22, 0.88, ...])
for res in search_results:
print(f"Objet similaire trouvé : {res['ObjectKey']}, Similarité : {res['SimilarityScore']}")
Le Point de Vue Sceptique : Bien que les allégations de réduction des coûts soient attrayantes, les performances réelles pour les systèmes RAG en direct et à haut débit restent à voir. Les bases de données vectorielles spécialisées consacrent des années à optimiser la recherche de similarité à faible latence et les stratégies d'indexation complexes. S3, bien qu'incroyablement durable et évolutif, est fondamentalement un stockage d'objets. Comment ses modèles de cohérence éventuelle affecteront-ils les mises à jour vectorielles en temps réel ? Et dans quelle mesure les mécanismes d'indexation sous-jacents sont-ils transparents ? La réduction des coûts de 90 % est probablement comparée à l'exécution de votre propre base de données vectorielle spécialisée sur EC2, et non nécessairement à des alternatives entièrement gérées avec des modèles de tarification différents. C'est un mouvement pragmatique pour maintenir les charges de travail d'IA au sein de l'écosystème AWS, mais les développeurs doivent effectuer des tests de référence approfondis pour leurs cas d'utilisation spécifiques avant d'abandonner complètement les magasins vectoriels dédiés.
S3 Tables et Métadonnées : L'Embrassement du Cloud par Apache Iceberg
AWS joue également de manière significative pour l'architecture data lakehouse avec Amazon S3 Tables, maintenant généralement disponible, et Amazon S3 Metadata. S3 Tables optimise spécifiquement le stockage de données tabulaires dans Apache Iceberg, promettant des requêtes performantes et à faible coût avec des outils tels qu'Athena, EMR et Spark.
Sous le Capot
L'idée principale est d'automatiser les complexités de la gestion des tables Apache Iceberg sur S3. Auparavant, bien que vous puissiez créer des tables Iceberg sur S3, cela impliquait beaucoup de travail dans la gestion de la compaction, des contrôles d'accès et de l'évolution du schéma. S3 Tables vise à abstraire cela, en fournissant un service entièrement géré qui améliore les performances jusqu'à 10x TPS et 3x les performances des requêtes. Il prend également en charge le Tiering Intelligent pour l'optimisation automatique des coûts.
S3 Tables traite les tables comme des ressources AWS de premier ordre, vous permettant d'appliquer des contrôles de sécurité via des politiques IAM, de la même manière que vous gérez les buckets ou les préfixes. S3 Metadata, quant à lui, se concentre sur la génération automatique de métadonnées d'objets en temps quasi réel, utile pour les applications d'analyse et d'inférence, et s'intègre à S3 Tables.
Mon Point de Vue Critique : C'est une abstraction très nécessaire. Apache Iceberg est puissant mais opérationnellement intensif. La gestion par AWS des "parties difficiles" comme la compaction et les magasins de métadonnées est une victoire. Cependant, les affirmations de performance doivent être examinées de près. "Jusqu'à 3x plus rapide" est excellent, mais plus rapide que quoi ? Iceberg géré manuellement ? Un S3 select brut ? Le diable sera dans les benchmarks avec des requêtes réelles et complexes. De plus, bien que cela simplifie les choses, il est toujours primordial de comprendre le format de table Iceberg sous-jacent et ses implications pour le partitionnement des données et l'évolution du schéma pour les ingénieurs de données. La promesse d'une "analytique et d'une IA/ML unifiées sur une seule copie de données" est forte, mais les points d'intégration avec d'autres services (par exemple, des tâches Spark personnalisées, des moteurs de requête non-AWS) auront besoin d'une documentation robuste et d'une adoption par la communauté. C'est un pas pratique vers un data lakehouse plus utilisable, mais ce n'est pas une solution miracle qui annule les meilleures pratiques d'ingénierie des données.
S3 Batch Operations & Conditional Writes : Gérer les Données à Grande Échelle
AWS a également apporté des améliorations significatives aux capacités de manipulation de données de base de S3 : S3 Batch Operations est maintenant jusqu'à 10 fois plus rapide, et S3 Conditional Writes introduit une fonctionnalité de type mutex fortement cohérente.
Batch Operations en Détail
L'augmentation de 10x des performances de S3 Batch Operations est une bonne nouvelle pour tous ceux qui gèrent le traitement ou les migrations de données à grande échelle. Ils ont également ajouté une option "sans manifeste", vous permettant de pointer un travail par lots directement vers un bucket ou un préfixe pour traiter tous les objets qu'il contient, plutôt que d'exiger un fichier manifeste pré-généré. L'automatisation de la création de rôles IAM a également été simplifiée, et l'échelle des travaux a été augmentée pour gérer jusqu'à 20 milliards d'objets.
# Exemple AWS CLI simplifié pour S3 Batch Operations sans manifeste
# Créer un travail pour exécuter des checksums sur tous les objets de 'my-archive-bucket'
aws s3control create-job \
--account-id 123456789012 \
--operation '{"S3InitiateRestoreObject":{"ExpirationInDays":7,"OutputLocation":{"Bucket":"arn:aws:s3:::my-report-bucket","Prefix":"restore-reports/"}}}' \
--report {"Bucket":"arn:aws:s3:::my-report-bucket","Prefix":"batch-job-reports/","Format":"CSV","Enabled":true,"Scope":"AllTasks"} \
--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20230628","Location":{"Bucket":"arn:aws:s3:::my-archive-bucket","Key":"no-manifest-prefix-placeholder"}},"Filter":{"Prefix":"archive/"}}' \
--priority 1 \
--role-arn "arn:aws:iam::123456789012:role/S3BatchOperationsRole" \
--description "Effectuer des checksums sur le préfixe archive"
Conditional Writes
Il s'agit d'une petite mais critique amélioration. S3 a toujours été éventuellement cohérent pour les écritures, ce qui a conduit à des problèmes de "lecture après écriture" dans les charges de travail parallèles où plusieurs clients pourraient essayer de mettre à jour le même objet. Les écritures conditionnelles fournissent un mécanisme de type mutex fortement cohérent pour garantir qu'un objet n'a pas été modifié avant une mise à jour. Ceci est généralement réalisé à l'aide d'en-têtes de requête conditionnels HTTP tels que If-Match (avec un ETag) ou If-Unmodified-Since. Faire de cela une fonctionnalité de premier ordre, de type "mutex", implique des garanties plus fortes, simplifiant potentiellement les modèles de verrouillage distribués complexes qui nécessitaient auparavant des services externes tels que DynamoDB ou une logique de coordination personnalisée.
Les Petits Caractères : Autres Améliorations de S3 & Lambda
Au-delà des fonctionnalités phares, plusieurs petites mais importantes mises à jour ont été lancées :
- S3 Express One Zone Améliorations des Performances et des Coûts : Cette classe de stockage ultra-faible latence se vante désormais de lectures d'accès aux données 10 fois plus rapides et de réductions de coûts de requête de 50 % par rapport à S3 standard. N'oubliez pas qu'il s'agit de "One Zone" – ce qui signifie des garanties de durabilité plus faibles que S3 standard.
- Réduction des Coûts de Balisage des Objets S3 : Une réduction bienvenue de 35 % des coûts de balisage des objets (0,0065 $ par 10 000 balises mensuelles), à partir du 1er mars 2025. Cela rend la gestion du cycle de vie basée sur les balises plus économiquement viable.
- Nouveaux Runtimes Lambda : Python 3.14, Java 25 et Node.js 24 sont désormais pris en charge, AWS visant à être disponible dans les 90 jours suivant la publication par la communauté.
- Fault Injection Simulator (FIS) pour Lambda : La possibilité d'injecter des fautes telles que la latence et les erreurs directement dans les fonctions Lambda via FIS est un pas en avant significatif pour les tests de résilience.
- CloudWatch Logs Live Tail : Streaming de logs en temps réel et analyses pour les fonctions Lambda, directement dans la console ou via le kit d'outils AWS pour VS Code.
Conclusion : Une Évolution Pragmatic (Mais Pas Parfaite)
re:Invent 2025 a mis en évidence la volonté continue d'AWS d'élargir les horizons du serverless et de renforcer les capacités de S3, en particulier dans le paysage en plein essor de l'IA. Lambda Durable Functions est sans doute le changement architectural le plus important, offrant une alternative convaincante à Step Functions pour de nombreux workflows d'état de longue durée. Cependant, la surcharge opérationnelle de la gestion de ces workflows durables, en particulier en ce qui concerne la corrélation des événements externes et le débogage, ne doit pas être sous-estimée. Lambda Managed Instances semble être un compromis, une offre pragmatique pour des profils de performance et de coût spécifiques, mais elle dilue la promesse fondamentale du "serverless". Et le changement de facturation de la phase INIT est un rappel brutal que même le serverless n'est pas exempt de considérations de coûts pour l'initialisation.
Sur le front S3, S3 Vectors et S3 Tables sont des tentatives claires de positionner S3 comme la base de l'IA et des architectures data lakehouse. Bien que les allégations de performance et de coût soient attrayantes, les développeurs doivent les aborder avec une dose saine de scepticisme et des tests de référence rigoureux. S3 évolue, mais reste fondamentalement un stockage d'objets, et ses nouvelles capacités devront faire leurs preuves face à des alternatives spécialisées. Les Batch Operations et les Conditional Writes sont des améliorations solides et pratiques qui répondent aux frustrations de longue date concernant la manipulation de données à grande échelle et la cohérence.
Dans l'ensemble, re:Invent 2025 a livré une suite d'améliorations solides et pratiques plutôt que des percées véritablement "révolutionnaires". AWS affine continuellement ses offres de base, les rendant plus capables pour les charges de travail modernes complexes. Mais comme toujours, c'est à nous, les développeurs, de dépasser le marketing, de comprendre les mécanismes sous-jacents et de tester rigoureusement ces nouveaux outils dans le creuset de la production réelle.
Sources
🛠️ Outils Associés
Explorez ces outils DataFormatHub liés à ce sujet :
- JSON vers YAML - Convertir les modèles CloudFormation
- Encodeur Base64 - Encoder les charges utiles Lambda
