EventBridge : architectures event-driven
À la fin de ce tutoriel, vous saurez expliquer pourquoi un bus d’événements, dessiner une architecture event-driven avec Amazon EventBridge, écrire des event patterns, brancher des targets (Lambda, SQS, SNS, Step Functions, CloudWatch Logs), et dérouler un lab safe en
ca-central-1(bus custom +PutEvents+ règle + cleanup) sans exploser la facture.Niveau : Intermédiaire · Temps estimé : 50–70 min · Versions cibles : Amazon EventBridge · AWS CLI v2 · Lambda / SQS / SNS · Dernière vérification : 2026-09-11 · Region :
ca-central-1Slug :
wow-eventbridge-patterns· Série : WOW · Mot-clé SEO : Amazon EventBridge · Publish : HOLD→ Aussi : SNS & SQS · Lambda + API Gateway · CloudWatch alarmes · Démarrer avec AWS
Prérequis
- Compte AWS de lab (profil
lab) — Démarrer avec AWS - Bases messaging (file vs topic) — SNS & SQS
- Notions Lambda (fonction, IAM role) — Lambda + API Gateway
- AWS CLI v2 configurée
Coût estimé : quasi 0 € pour ce lab (bus custom, règles, PutEvents, Logs). Les targets Lambda/SQS/SNS restent dans le free tier si vous restez sur le volume du tutoriel. Cleanup obligatoire en fin de lab.
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
aws sts get-caller-identity
Ce que nous allons construire
Amazon EventBridge event-driven (WOW) — ca-central-1
├── Pourquoi un bus (découplage, fan-out, audit)
├── Bus default vs custom + event buses partenaires
├── Event pattern JSON (source, detail-type, detail)
├── Rules → targets (Lambda, SQS, SNS, SFN, Logs)
├── Lab : bus custom + PutEvents + règle Logs
├── Archive / replay, DLQ, retries
└── Quiz + FAQ + maillage SNS/SQS/Lambda
(Schéma — alt : « Producers PutEvents vers un bus custom EventBridge ; règles filtrent et routent vers Lambda, SQS, SNS et CloudWatch Logs en ca-central-1 ».)
Étape 1 — Pourquoi EventBridge en 2026 ?
Les architectures event-driven découplent producteurs et consommateurs. Au lieu d’appeler l’API du voisin en synchrone (timeouts, versions, blast radius), vous émettez un fait : OrderCreated, InstanceTerminated, DeployFailed. Les intéressés s’abonnent.
Amazon EventBridge est le bus managé AWS pour ça :
| Besoin | Pattern EventBridge |
|---|---|
| Fan-out 1→N | Une règle, plusieurs targets |
| Filtrage riche | Event patterns (JSON) |
| SaaS → AWS | Partner event buses |
| AWS → vous | Default bus (EC2, CloudTrail, etc.) |
| Replay / audit | Archives + replay |
| Orchestration | Target Step Functions |
EventBridge route et filtre ; SQS absorbe le backlog ; SNS diffuse. Voir SNS & SQS — trio DEH.
Étape 2 — Vocabulaire utile
- Event bus — canal nommé. Default (événements AWS + custom si vous le choisissez), custom (votre domaine), partner (Stripe, Auth0, Datadog…).
- Event — envelope JSON :
Source,DetailType,Detail,Time,Resources… - Rule — filtre (event pattern ou schedule cron/
rate) + targets. - Target — Lambda, SQS, SNS, Step Functions, Kinesis, API Destination, CloudWatch Logs, Bus cross-account…
- Archive / Replay — rétention des events pour rejouer après un bug.
- Dead-letter queue (DLQ) — SQS pour les invocations target en échec répété.
Structure minimale d’un event custom :
{
"Source": "deh.orders",
"DetailType": "OrderCreated",
"Detail": {
"orderId": "ord-42",
"amount": 19.9,
"currency": "CAD",
"env": "lab"
}
}
Convention DEH : Source en reverse-DNS métier (deh.orders, deh.billing), DetailType en PastTense métier, Detail versionné (champ schemaVersion recommandé dès le jour 2).
Étape 3 — Event patterns : le cœur du filtrage
Une règle match si tous les champs du pattern matchent. Exemple : seulement les commandes CAD en lab :
{
"source": ["deh.orders"],
"detail-type": ["OrderCreated"],
"detail": {
"currency": ["CAD"],
"env": ["lab"]
}
}
Patterns utiles :
| Intention | Astuce pattern |
|---|---|
| Tout d’une source | "source": ["deh.orders"] |
| Plusieurs types | "detail-type": ["OrderCreated", "OrderCancelled"] |
| Présence d’un champ | "detail": { "orderId": [{"exists": true}] } |
| Préfixe | "detail": { "orderId": [{"prefix": "ord-"}] } |
| Anything-but | "detail": { "env": [{"anything-but": "prod"}] } |
Piège : les clés du pattern sont en minuscules côté EventBridge (source, detail-type) même si l’API PutEvents utilise Source / DetailType. Testez toujours avec un event réel avant la prod.
Schedule (cron) reste une règle EventBridge : cron(0 9 ? * MON-FRI *) en UTC — documentez le fuseau (Montréal = UTC−4/−5). Pour DEH lab, préférez rate(1 hour) sur un bus jetable.
Étape 4 — Architecture DEH de référence
[Producers]
app / Lambda / EventBridge Scheduler
│ PutEvents
▼
custom bus: deh-domain-bus (ca-central-1)
│
├── Rule OrderCreated → Lambda enrich + SQS worker
├── Rule OrderCreated → SNS ops (email/Slack)
├── Rule *.Failed → CloudWatch Logs + alarme
└── Rule audit-all → Archive 7j + optional Firehose
Principes DEH :
- Un bus custom par domaine (orders, billing) plutôt qu’un monolithe « god bus » dès que plusieurs équipes publient.
- Default bus pour les events AWS (EC2 state, CloudTrail via CloudWatch Events legacy → EventBridge).
- Cross-account : bus dans le compte Shared/Platform, rules qui forwardent vers comptes Workloads — voir Multi-account Org.
- Idempotence côté consumers : EventBridge garantit at-least-once vers les targets ; dédoublonnez sur
orderId/id.
Étape 5 — Lab safe : bus custom + PutEvents + Logs (ca-central-1)
Objectif : créer un bus, une règle filtrante, un target CloudWatch Logs (pas de Lambda à packager), injecter un event, vérifier le log, tout détruire.
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
BUS=deh-lab-eventbus
LOG_GROUP=/aws/events/deh-lab-eventbus
RULE=deh-lab-order-created
# 1) Bus custom
aws events create-event-bus --name "$BUS"
# 2) Log group + resource policy (EventBridge → Logs)
aws logs create-log-group --log-group-name "$LOG_GROUP" || true
ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
aws logs put-resource-policy --policy-name EventBridgeToCWLogsDehLab --policy-document "{
"Version":"2012-10-17",
"Statement":[{
"Sid":"EventBridgeToCWLogs",
"Effect":"Allow",
"Principal":{"Service":"events.amazonaws.com"},
"Action":["logs:CreateLogStream","logs:PutLogEvents"],
"Resource":"arn:aws:logs:ca-central-1:${ACCOUNT}:log-group:${LOG_GROUP}:*"
}]
}"
# 3) Rule + pattern
aws events put-rule
--name "$RULE"
--event-bus-name "$BUS"
--event-pattern '{"source":["deh.orders"],"detail-type":["OrderCreated"]}'
--state ENABLED
# 4) Target Logs
aws events put-targets
--rule "$RULE"
--event-bus-name "$BUS"
--targets "Id"="1","Arn"="arn:aws:logs:ca-central-1:${ACCOUNT}:log-group:${LOG_GROUP}"
# 5) Injecter un event
aws events put-events --entries "[{
"EventBusName": "$BUS",
"Source": "deh.orders",
"DetailType": "OrderCreated",
"Detail": "{"orderId":"ord-42","amount":19.9,"currency":"CAD","env":"lab"}"
}]"
# 6) Vérifier (attendez quelques secondes)
aws logs filter-log-events --log-group-name "$LOG_GROUP" --limit 5
Si FailedEntryCount > 0 sur PutEvents, regardez ErrorCode / ErrorMessage (souvent JSON Detail mal échappé). Si la règle ne match pas, comparez source / detail-type exactement.
Cleanup (obligatoire)
aws events remove-targets --rule "$RULE" --event-bus-name "$BUS" --ids 1
aws events delete-rule --name "$RULE" --event-bus-name "$BUS"
aws events delete-event-bus --name "$BUS"
aws logs delete-log-group --log-group-name "$LOG_GROUP" || true
Étape 6 — Targets avancés, retries, DLQ, archive
| Target | Quand l’utiliser |
|---|---|
| Lambda | Enrichissement, validation, side-effects courts |
| SQS | Buffer + workers lents / burst |
| SNS | Alertes multi-canal |
| Step Functions | Runbooks / workflows (voir WOW Step Functions SRE) |
| API Destination | Webhook HTTP hors AWS (Slack, PagerDuty) |
| Logs | Debug / audit léger |
Retries EventBridge vers une target : backoff automatique puis DLQ si configurée. Sans DLQ, l’event est perdu après épuisement — en prod DEH, DLQ SQS obligatoire sur les targets critiques.
Archive :
aws events create-archive
--archive-name deh-orders-7d
--event-source-arn "arn:aws:events:ca-central-1:${ACCOUNT}:event-bus/${BUS}"
--retention-days 7
--event-pattern '{"source":["deh.orders"]}'
Replay = filet après bug consumer. Pas un CDC Kafka : pour un event store durable, Kinesis / MSK / DynamoDB streams selon le cas.
Erreurs fréquentes
| Erreur | Impact | Correction |
|---|---|---|
Pattern Source au lieu de source |
Règle ne match jamais | Clés pattern en minuscules |
| Detail string non JSON | PutEvents / consumers cassés | Detail = JSON stringifié valide |
| Tout sur le default bus | Bruit AWS + collisions | Bus custom par domaine |
| Pas de DLQ | Events critiques perdus | SQS DLQ + alarme profondeur |
| Fan-out synchrone Lambda→Lambda | Couplage + timeouts | Bus + règles + SQS |
| Region us-east-1 par défaut | Hors standard DEH | Forcer ca-central-1 |
| Oublier resource policy Logs | Target Logs silencieux | put-resource-policy comme au lab |
Quiz (5 questions)
1. EventBridge sert surtout à :
– A. Remplacer RDS
– B. Router / filtrer des événements vers des targets
– C. Remplacer IAM
2. Un event pattern match si :
– A. Au moins un champ correspond
– B. Tous les champs du pattern correspondent
– C. Le bus s’appelle default
3. Pour un backlog worker lent derrière un bus, le duo typique est :
– A. EventBridge → RDS only
– B. EventBridge → SQS → workers
– C. EventBridge → S3 website
4. Region lab DEH imposée :
– A. us-east-1
– B. ca-central-1
– C. eu-west-3
5. Sans DLQ sur une target critique :
– A. Rien ne change
– B. Risque de perte après retries épuisés
– C. EventBridge bascule automatiquement vers SNS
Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B
FAQ
EventBridge vs SNS vs SQS ?
EventBridge = bus + filtrage riche + intégrations AWS/SaaS. SNS = pub/sub simple / fan-out notifications. SQS = file de travail durable. DEH : EventBridge route, SQS absorbe, SNS alerte. Voir SNS & SQS.
Default bus ou custom ?
Default pour events AWS et quelques customs simples. Custom dès qu’un domaine métier publie (isolation IAM, archives, quotas, clarté d’équipe).
EventBridge remplace-t-il Kafka ?
Non. Kafka / MSK = log haute volumétrie et replay massif. EventBridge = routing managé, patterns, targets serverless.
Pourquoi ca-central-1 ?
Standard lab DevOps Elastic Hayway : cohérence IAM, FinOps et tutos AWS entre guides.
Comment tester un pattern sans déployer Lambda ?
Target CloudWatch Logs (ce lab) ou SQS + receive-message. Validez le match avant d’ajouter de la logique métier.
Cross-account possible ?
Oui : permissions sur le bus, règles qui forwardent vers un autre bus / compte. Utile avec une landing zone multi-compte — Multi-account Org.
Combien coûte PutEvents ?
Facturation au million d’events + targets. Le lab est négligeable ; surveillez les rate() oubliés et le fan-out × N targets.
Pour aller plus loin
- SNS & SQS
- Lambda + API Gateway
- CloudWatch alarmes
- AWS Well-Architected
- Multi-account Org
- Démarrer avec AWS
Maillage série WOW
| ← Précédent | Step Functions pour runbooks SRE |
| → Suivant | OpenTelemetry : traces metrics logs |
| Aussi | SNS & SQS · Lambda + API Gateway · Multi-account Org |
Meta publication (SEO)
- Title SEO : Amazon EventBridge : architectures event-driven (guide FR)
- Meta description : Amazon EventBridge event-driven : bus custom, event patterns, règles, targets Lambda/SQS/SNS, archive/replay. Lab safe ca-central-1, FAQ, quiz DEH.
- Focus keyword : Amazon EventBridge
- Secondary : event-driven architecture, event bus, event pattern, PutEvents, EventBridge rules
- Image :
assets/web/devopelastichayway/cover-wow-eventbridge-patterns-1200x630.webp(à générer) - Catégorie : WOW / AWS · Niveau : Intermédiaire
- URL cible : https://devopelastichayway.com/tutoriels/wow-eventbridge-patterns/
- Post live : N/A (nouveau) · slug
wow-eventbridge-patterns· 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.