Amazon SAA-C03: Intégration d'applications, messagerie et streaming — Guide d'étude

Fait partie du AWS SAA-C03 — Guide d’étude complet. Entraînez-vous avec des réponses vérifiées dans le centre d’examens Amazon, ou passez des tests chronométrés sur ExamRoll.io.

Amazon SQS : Découplage, Ordre et Sémantique de Livraison

Amazon SQS est une file d’attente de messages entièrement gérée et basée sur le mode pull dont le rôle architectural principal est de découpler les producteurs des consommateurs. Une chaîne d’appels synchrone lie la latence et la disponibilité du producteur à chaque dépendance en aval ; l’insertion d’une file d’attente SQS transforme cela en un transfert asynchrone. Les producteurs ajoutent des messages au rythme où le trafic arrive, et les consommateurs les retirent au rythme où ils peuvent les traiter en toute sécurité. C’est la solution classique pour les pics d’écriture qui, autrement, surchargeraient une instance RDS — la file d’attente absorbe le pic, et une flotte limitée de consommateurs la vide avec une simultanéité contrôlée, maintenant le nombre de connexions à la base de données sous contrôle.

Il existe deux types de files d’attente, et le choix détermine à la fois le débit et les garanties de livraison.

CaractéristiqueStandardFIFO
OrdreAu mieuxStrict, par MessageGroupId
LivraisonAu moins une fois (doublons possibles)Exactement une fois dans une fenêtre de déduplication de 5 minutes
DébitPresque illimité300 TPS (3 000 par lot) ; 70 000 avec le mode haut débit
Nom de la file d’attentequelconquedoit se terminer par .fifo

Les files d’attente standard livrent les messages au moins une fois avec un ordre au mieux. Des doublons peuvent apparaître lorsqu’un consommateur ne parvient pas à supprimer un message avant l’expiration du délai de visibilité, ou lorsque le backend distribué rejoue un message à travers les partitions (shards). Même si vous ne voyez jamais de doublon lors des tests, le service est architecturalement autorisé à effectuer une nouvelle livraison, en particulier lors du basculement d’un broker. Supposer que les files d’attente standard livreront « habituellement » une seule fois est un défaut de conception, pas un risque opérationnel — il est garanti que des doublons se produiront à grande échelle. La logique du consommateur doit donc être idempotente : suivre un MessageId ou une clé métier dans DynamoDB avec une écriture conditionnelle, utiliser une clé d’idempotence sur les appels d’API en aval, ou s’appuyer sur une sémantique d’upsert.

Les files d’attente FIFO fournissent un ordre strict au sein d’un MessageGroupId et un traitement exactement unique via un MessageDeduplicationId (explicite ou un SHA-256 du corps du message) qui supprime les doublons pendant une fenêtre de 5 minutes. Le MessageGroupId est le concept central : tous les messages partageant un ID de groupe sont livrés strictement dans l’ordre à un seul consommateur à la fois, tandis que différents ID de groupe peuvent être traités en parallèle. Pour un système de traitement de commandes où les événements de chaque client doivent être séquentiels mais où les différents clients sont indépendants, utilisez MessageGroupId = customerId. Utiliser un seul ID de groupe pour tout sérialise l’ensemble de la charge de travail et anéantit le débit. Les ID de déduplication sont la primitive correcte pour empêcher la création de commandes en double lorsqu’un utilisateur soumet à nouveau un paiement bloqué : le client génère un jeton d’idempotence déterministe (un UUID lié à la session de paiement) et SQS rejette toute soumission en double arrivant dans la fenêtre de temps.

PaymentsQueue:
  Type: AWS::SQS::Queue
  Properties:
    QueueName: payments.fifo
    FifoQueue: true
    ContentBasedDeduplication: true
    DeduplicationScope: messageGroup
    FifoThroughputLimit: perMessageGroupId
    VisibilityTimeout: 60
    RedrivePolicy:
      deadLetterTargetArn: !GetAtt PaymentsDLQ.Arn
      maxReceiveCount: 5

Sélectionner une file standard lorsque les exigences spécifient « ordre » ou « pas de doublons » est l’erreur classique. Aucune logique applicative ne peut restaurer un ordre que la file d’attente n’a jamais préservé, car les messages provenant de différents hôtes du backend arrivent de manière entrelacée. Choisissez FIFO chaque fois que la charge de travail exige un ordre (registres de transactions, transitions de machine à états) ou une sémantique de traitement unique (capture de paiement, décrémentation d’inventaire).

Délai de Visibilité, Messages Empoisonnés et Limites de Charge Utile

Lorsqu’un consommateur reçoit un message, SQS le rend invisible aux autres consommateurs pendant le délai de visibilité (par défaut 30 secondes, max 12 heures). Si le consommateur supprime le message avant l’expiration du délai, il disparaît ; sinon — parce que le consommateur a planté, ou que le traitement a simplement pris trop de temps — le message réapparaît et est livré à nouveau. Définir un délai de visibilité plus court que le temps de traitement réel est une cause majeure de traitement en double : une fonction Lambda prenant 45 secondes pour traiter un message d’une file avec le délai par défaut de 30 secondes retraitera chaque message au moins deux fois. Réglez le délai de visibilité à au moins le temps de traitement p99 (la recommandation d’AWS pour les files d’attente pilotées par Lambda est d’au moins 6 fois le timeout de la fonction), et pour les tâches de durée imprévisible, prolongez le délai de manière dynamique :

sqs.change_message_visibility(
    QueueUrl=queue_url,
    ReceiptHandle=handle,
    VisibilityTimeout=300  # extend by 5 minutes
)

Les files de lettres mortes (DLQ) capturent les messages empoisonnés (poison pills). Une RedrivePolicy sur la file d’attente source spécifie un maxReceiveCount (généralement 3 à 5) ; une fois ce seuil dépassé, SQS déplace le message vers la DLQ pour une inspection hors ligne. La DLQ doit être du même type que la file d’attente source (FIFO ↔ FIFO). Sans DLQ, les messages malformés bouclent indéfiniment, et dans une file FIFO, c’est particulièrement dommageable — le respect de l’ordre empêche la livraison des messages suivants du même groupe jusqu’à ce que le message problématique soit traité, donc un seul mauvais message bloque tout un groupe.

Les messages SQS sont limités à 256 Ko. Pour les charges utiles plus volumineuses — par exemple, une tâche transportant un document rendu — utilisez la bibliothèque cliente étendue SQS (SQS Extended Client Library), qui écrit la charge utile dans S3 et ne met en file d’attente qu’une référence au bucket/à la clé. La bibliothèque du consommateur récupère la charge utile de manière transparente à la réception. Ne divisez pas les charges utiles sur plusieurs messages (vous perdez l’atomicité et l’ordre) et n’encodez pas en base64 un blob de 2 Mo en espérant qu’il passe.

Mise à l’Échelle Automatique Pilotée par la File d’Attente

Pour une flotte de consommateurs sur EC2 ou ECS derrière une file d’attente SQS, le bon signal de mise à l’échelle n’est pas le CPU — c’est le backlog de la file d’attente. Le CPU est en retard sur le taux d’arrivée et interprète à tort un consommateur saturé comme étant « occupé mais gérant la charge ». La métrique de mise à l’échelle canonique est ApproximateNumberOfMessagesVisible, mais une mise à l’échelle directe sur la profondeur brute de la file est imprécise. L’approche recommandée est la métrique personnalisée de backlog par instance :

backlogPerInstance = ApproximateNumberOfMessagesVisible / RunningInstances

Publiez cette métrique sur CloudWatch et pilotez une politique de suivi de cible (target tracking) sur un groupe Auto Scaling ou un service ECS afin que chaque worker maintienne un backlog limité (par exemple, 10 messages). Cela permet un scale-out fluide pendant les pics et empêche l’oscillation lorsque la profondeur de la file est faible mais que les consommateurs sont déjà saturés. Pour le scale-in, associez-la à ApproximateAgeOfOldestMessage pour éviter de supprimer de la capacité alors que des messages anciens persistent.

Amazon SNS : Fan-Out, Filtrage et Livraison Inter-Comptes

SNS est un service de publication/abonnement (pub/sub) basé sur le mode push. Les publicateurs écrivent dans un topic ; SNS envoie (push) à chaque abonnement : files d’attente SQS, fonctions Lambda, points de terminaison HTTP(S), e-mails, SMS, Kinesis Data Firehose ou notifications push mobiles. Le modèle de durabilité dominant est le fan-out SNS → SQS : un topic avec plusieurs files d’attente SQS abonnées, de sorte que chaque service en aval dispose de son propre tampon durable, de sa politique de nouvelle tentative et de sa DLQ, tandis que le publicateur ne connaît que le topic. Si un service consommateur tombe en panne pendant des heures, sa file d’attente accumule les messages et se vide lors de la reprise — SNS seul ne dispose pas de cette mise en mémoire tampon et épuisera sa politique de nouvelle tentative.

Producer ──▶ SNS topic ──┬──▶ SQS Queue A ──▶ Service A
                         ├──▶ SQS Queue B ──▶ Service B
                         └──▶ SQS Queue C ──▶ Service C

Le filtrage des messages permet à chaque abonnement de déclarer une politique de filtrage JSON afin que SNS ne livre que les messages correspondants, évitant l’anti-modèle où chaque consommateur reçoit chaque message et filtre côté client :

{
  "eventType": ["order_placed", "order_cancelled"],
  "region": ["us-east-1", "us-west-2"]
}

Deux propriétés comportementales sont importantes. Premièrement, les topics SNS standard ne garantissent pas l’ordre des messages — les temporisateurs de nouvelle tentative par abonné et les chemins réseau indépendants rendent la réorganisation courante. Si l’ordre est important, utilisez un topic SNS FIFO abonné à des files d’attente SQS FIFO ; l’ID du groupe de messages se propage de bout en bout. Sinon, les abonnés doivent être idempotents et tolérants à la réorganisation. Deuxièmement, les abonnements HTTP(S) effectuent des nouvelles tentatives selon une politique de livraison (par défaut : trois nouvelles tentatives immédiates, puis un backoff exponentiel jusqu’à une heure, puis suppression). Les abonnés doivent répondre avec un code 2xx en 15 secondes, valider la signature x-amz-sns-message-type, et — pour les points de terminaison non fiables — toujours avoir une DLQ SNS (redirigée vers SQS) afin que les messages non livrés soient capturés plutôt que silencieusement abandonnés.

L’invocation inter-comptes est un piège fréquent. Lorsque le Compte A publie dans un topic qui distribue (fan-out) à une fonction Lambda dans le Compte B, deux politiques sont nécessaires : la politique du topic SNS (ou la direction de l’abonnement) doit autoriser l’abonnement, et la politique basée sur les ressources de la Lambda doit autoriser lambda:InvokeFunction depuis sns.amazonaws.com avec une condition SourceArn correspondant au topic. L’absence de la politique de ressource Lambda est le mode d’échec le plus courant — l’abonnement semble sain, mais les invocations sont rejetées avec une erreur 403. Si le topic est chiffré avec une clé KMS gérée par le client, la politique de la clé doit également accorder kms:Decrypt et kms:GenerateDataKey au principal qui publie et à sns.amazonaws.com.

{
  "Effect": "Allow",
  "Principal": {"Service": "sns.amazonaws.com"},
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:us-east-1:222222222222:function:ProcessOrder",
  "Condition": {"ArnLike": {"AWS:SourceArn": "arn:aws:sns:us-east-1:111111111111:orders"}}
}

Amazon EventBridge : Bus d’Événements Routés

EventBridge (anciennement CloudWatch Events) étend le modèle pub/sub avec un routage basé sur le contenu, la découverte de schémas, des sources d’événements de partenaires SaaS, et l’archivage/relecture. Les événements transitent par des bus d’événements (par défaut, personnalisés ou partenaires) et sont comparés à des règles dont les modèles d’événements (event patterns) filtrent sur la structure JSON. Les règles peuvent transformer les charges utiles (payloads) via des chemins d’entrée (input paths) et des modèles d’entrée (input templates), attacher des cibles de lettres mortes (dead-letter targets), et livrer à plus de 20 cibles natives, y compris Lambda, Step Functions, tâches ECS, SQS, SNS, Kinesis et API destinations.

{
  "source": ["com.acme.orders"],
  "detail-type": ["OrderPlaced"],
  "detail": {"amount": [{"numeric": [">", 500]}]}
}

La distinction avec SNS est d’ordre architectural. SNS est optimisé pour la diffusion à haut débit (broadcast) vers des abonnés homogènes avec un filtrage simple par attributs et une latence plus faible. EventBridge est optimisé pour les architectures hétérogènes pilotées par les événements : de nombreux producteurs émettent des schémas d’événements différents, et les consommateurs s’abonnent par modèle (pattern) plutôt que par topic. Pour un monolithe en cours de décomposition en microservices — surtout lorsque les producteurs incluent des partenaires SaaS ou des services AWS (Config, GuardDuty, CodePipeline, CloudTrail) qui émettent nativement des événements — EventBridge est généralement le bon choix. Pour un fan-out à très haut volume et faible latence vers des abonnés identiques, SNS reste gagnant car EventBridge a une latence par événement légèrement plus élevée et un plafond de débit par défaut plus bas.

Amazon MQ : Messagerie à base de Broker pour les Protocoles Existants

Amazon MQ est un broker géré exécutant ActiveMQ ou RabbitMQ. Il a pour but de migrer des charges de travail on-premises qui dépendent de AMQP 0-9-1, AMQP 1.0, MQTT, STOMP, OpenWire, ou JMS sans réécrire l’application. Si un système de paiement utilise un broker JMS tiers avec une sémantique transactionnelle de type “exactly-once”, le migrer vers Amazon MQ préserve le protocole filaire (wire protocol) et les garanties de livraison tout en éliminant la gestion de l’infrastructure. Choisissez SQS/SNS/EventBridge pour les nouvelles conceptions natives AWS (greenfield) ; ne choisissez Amazon MQ que lorsque la compatibilité protocolaire est la contrainte.

Kinesis Data Streams

Kinesis Data Streams (KDS) est un journal (log) durable, ordonné et partitionné pour l’ingestion de flux à haut débit — flux de clics (clickstreams), télémétrie IoT, agrégation de logs. Les enregistrements (records) sont placés dans des partitions (shards) par PartitionKey ; l’ordre est garanti au sein d’une partition, mais pas à travers tout le flux. Chaque partition supporte 1 Mo/s ou 1 000 enregistrements/s en écriture et 2 Mo/s en lecture (ou plus avec l’Enhanced Fan-Out). Les enregistrements sont conservés 24 heures par défaut, extensible jusqu’à 365 jours, afin que plusieurs consommateurs indépendants puissent relire le même historique — ce que SQS ne peut pas faire car SQS supprime après acquittement (ack).

Le mode à la demande (on-demand) élimine le calcul des partitions en scalant automatiquement jusqu’à 200 Mio/s en écriture par flux, idéal pour un trafic imprévisible. Le mode provisionné est moins cher pour un état stable où la capacité est connue.

Choisissez KDS plutôt que SQS FIFO lorsque la charge de travail exige une ingestion ordonnée et rejouable à des débits que FIFO ne peut pas supporter (FIFO plafonne bien en dessous des millions d’enregistrements/seconde que KDS gère), lorsque plusieurs consommateurs indépendants doivent lire le même flux, ou lorsque la formulation “préserver l’ordre original tout au long du traitement” est associée à un volume élevé.

Kinesis Data Firehose

Kinesis Data Firehose est un service de livraison entièrement géré. Il lit depuis un flux Kinesis ou par des appels PUT directs, met en mémoire tampon par taille (1–128 Mo) ou par temps (60–900 secondes, selon la première limite atteinte), invoque optionnellement une fonction Lambda pour la transformation de chaque enregistrement (nettoyage des PII, normalisation du format), peut convertir le JSON en Parquet ou ORC à la volée en utilisant un schéma Glue, chiffre avec KMS, et livre à S3, Redshift, OpenSearch ou Splunk. Il n’a pas de partitions (shards), pas de consommateurs à exécuter, et une tarification au Go.

Le modèle canonique pour une ingestion évolutive dans un data lake associe Data Streams (en mode on-demand) comme tampon durable avec Firehose pour la livraison vers S3 :

Producers → Kinesis Data Streams (on-demand) → Firehose (60s buffer, Parquet) → S3 → Athena/Glue

Pour ingérer des millions d’événements mobiles, les chiffrer et les déposer dans S3 au format Parquet, la bonne réponse est Firehose avec la conversion Parquet et une clé KMS — et non KDS plus un consommateur personnalisé plus un rédacteur Parquet écrit à la main, ce qui représente beaucoup plus de code et d’infrastructure. Firehose fonctionne en quasi-temps réel et ne prend pas en charge la relecture côté consommateur ; lorsque la relecture est nécessaire, conservez KDS dans le cheminement.

Kinesis Data Analytics (maintenant Managed Service for Apache Flink) exécute des tâches SQL ou Flink sur un flux pour des agrégations fenêtrées.

Intégration Lambda et Sémantiques de Nouvelle Tentative

Lambda s’intègre avec ces services avec des comportements de nouvelle tentative matériellement différents :

SourceTraitement par lotsOrdonnancementEn cas d’échec
SQS StandardJusqu’à 10 000 messagesAucunRetourne après l’expiration du délai de visibilité ; DLQ après maxReceiveCount
SQS FIFOPar groupePar groupeLe groupe est bloqué jusqu’au succès ou à la mise en DLQ
Kinesis StreamsJusqu’à 10 000 enregistrementsPar partition (shard)Les nouvelles tentatives bloquent la partition (shard) jusqu’au succès, à l’expiration de l’enregistrement ou à l’atteinte de la destination MaximumRetryAttempts/OnFailure
FirehoseS/O (transformation)S/OLes enregistrements en échec sont placés dans un préfixe d’erreur S3

Pour SQS, maintenez le délai d’expiration (timeout) de la fonction Lambda ≤ au délai de visibilité de la file d’attente, et configurez le délai de visibilité à au moins 6 fois le timeout de la fonction. Pour Kinesis, activez BisectBatchOnFunctionError et configurez une destination OnFailure (SQS ou SNS) pour qu’un seul enregistrement empoisonné ne bloque pas indéfiniment toute la partition (shard).

Tableau de Décision pour la Sélection

BesoinChoix correctPourquoi les alternatives échouent
Messagerie applicative ordonnée, avec traitement unique (exactly-once), opérations minimalesSQS FIFOSQS Standard n’a pas d’ordonnancement/dédoublonnage ; MQ ajoute la gestion d’un broker
Conserver les clients AMQP/JMS/MQTT existantsAmazon MQSQS/SNS utilisent des API propriétaires
Diffuser (fan-out) un événement à de nombreux consommateurs AWS de manière durableSNS → plusieurs SQSLe couplage direct producteur-consommateur réintroduit le monolithe ; SNS seul perd des messages si un consommateur est hors service
Router des événements hétérogènes avec des filtres/transformationsEventBridgeLes politiques de filtrage SNS n’ont pas de transformations, de sources partenaires, ni de registre de schémas
Diffusion (fan-out) à très haut débit vers des abonnés identiquesSNSEventBridge a une latence plus élevée et un débit par défaut plus faible
Ingérer et relire des flux ordonnés à haut volumeKinesis Data StreamsLa rétention SQS est plafonnée à 14 jours sans relecture par offset
Livrer un flux à S3/Redshift/OpenSearch sans codeFirehoseData Streams seul nécessite une application consommatrice
Convertir un flux JSON en Parquet dans S3Firehose avec un schéma GlueUn consommateur KDS personnalisé nécessite d’écrire/opérer un rédacteur Parquet

Analytique · Tous les domaines · Sécurité

Entraînez-vous sur ces questions → · Tests chronométrés sur ExamRoll.io →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

Réussissez votre examen →

Parcourir Amazon →

Related guides

Accès tout-en-un

Un seul abonnement. Chaque examen.

Chaque plan débloque la recherche de réponses illimitée, les tests pratiques, les explications IA et la bibliothèque complète de ressources — en plus de 20 langues.

Mensuel
24.87
Just €0.83/day
Tout inclus :
  • Recherche de réponses illimitée
  • Tests pratiques illimités
  • Explications basées sur l'IA
  • Bibliothèque complète de ressources
  • Plus de 20 langues
  • Mises à jour de contenu hebdomadaires
  • Récompenses et parrainages
  • Support prioritaire
Commencer l'essai gratuit

Aucune carte de crédit requise*

Meilleur rapport qualité/prix
12 mois
179.87
Just €0.49/daySave 40%
Tout inclus :
  • Recherche de réponses illimitée
  • Tests pratiques illimités
  • Explications basées sur l'IA
  • Bibliothèque complète de ressources
  • Plus de 20 langues
  • Mises à jour de contenu hebdomadaires
  • Récompenses et parrainages
  • Support prioritaire
Commencer l'essai gratuit

Aucune carte de crédit requise*

✓ Plan gratuit inclus · ✓ Annulez à tout moment · ✓ Tous les plans débloquent le produit complet