Skip to main content

aws-eventbridge


title: "Aws Eventbridge" sidebar_label: "Aws Eventbridge" description: "AWS EventBridge serverless event bus for event-driven architectures. Use when creating rules, configuring event patterns, setting up scheduled events, integrating with SaaS, or building cross-account event routing."​

Aws Eventbridge

AWS EventBridge serverless event bus for event-driven architectures. Use when creating rules, configuring event patterns, setting up scheduled events, integrating with SaaS, or building cross-account event routing.

Details​

PropertyValue
Skill Directory.github/skills/aws-eventbridge/
PhaseGeneral
User Invocable✅ Yes
Usage/aws-eventbridge Event source, pattern type, or scheduling scenario to look up (e.g. 'custom event bus rule', 'S3 event pattern', 'scheduled rate expression', 'cross-account event routing')

Documentation​

AWS EventBridge

Amazon EventBridge is a serverless event bus that connects applications using events. Route events from AWS services, custom applications, and SaaS partners.

Table of Contents​

Core Concepts​

Event Bus​

Channel that receives events. Types:

  • Default: Receives AWS service events
  • Custom: Your application events
  • Partner: SaaS application events

Rules​

Match incoming events and route to targets. Each rule can have up to 5 targets.

Event Patterns​

JSON patterns that define which events match a rule.

Targets​

AWS services that receive matched events (Lambda, SQS, SNS, Step Functions, etc.).

Scheduler​

Schedule one-time or recurring events to invoke targets.

Common Patterns​

Create Custom Event Bus and Rule​

AWS CLI:

# Create custom event bus
aws events create-event-bus --name my-app-events

# Create rule
aws events put-rule \
--name order-created-rule \
--event-bus-name my-app-events \
--event-pattern '{
"source": ["my-app.orders"],
"detail-type": ["Order Created"]
}'

# Add Lambda target
aws events put-targets \
--rule order-created-rule \
--event-bus-name my-app-events \
--targets '[{
"Id": "process-order",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder"
}]'

# Add Lambda permission
aws lambda add-permission \
--function-name ProcessOrder \
--statement-id eventbridge-order-created \
--action lambda:InvokeFunction \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/my-app-events/order-created-rule

boto3:

import boto3
import json

events = boto3.client('events')

# Create rule
events.put_rule(
Name='order-created-rule',
EventBusName='my-app-events',
EventPattern=json.dumps({
'source': ['my-app.orders'],
'detail-type': ['Order Created']
}),
State='ENABLED'
)

# Add target
events.put_targets(
Rule='order-created-rule',
EventBusName='my-app-events',
Targets=[{
'Id': 'process-order',
'Arn': 'arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder'
}]
)

Publish Custom Events​

import boto3
import json

events = boto3.client('events')

events.put_events(
Entries=[
{
'Source': 'my-app.orders',
'DetailType': 'Order Created',
'Detail': json.dumps({
'order_id': '12345',
'customer_id': 'cust-789',
'total': 99.99
}),
'EventBusName': 'my-app-events'
}
]
)

Scheduled Events​

# Run every 5 minutes
aws events put-rule \
--name every-5-minutes \
--schedule-expression "rate(5 minutes)"

# Run at specific times (cron)
aws events put-rule \
--name daily-cleanup \
--schedule-expression "cron(0 2 * * ? *)"

# Add target
aws events put-targets \
--rule every-5-minutes \
--targets '[{
"Id": "cleanup-function",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:Cleanup"
}]'

EventBridge Scheduler (One-Time and Flexible)​

# One-time schedule
aws scheduler create-schedule \
--name send-reminder \
--schedule-expression "at(2024-12-25T09:00:00)" \
--target '{
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:SendReminder",
"RoleArn": "arn:aws:iam::123456789012:role/scheduler-role",
"Input": "{\"message\": \"Happy Holidays!\"}"
}' \
--flexible-time-window '{"Mode": "OFF"}'

# Recurring with flexible window
aws scheduler create-schedule \
--name hourly-sync \
--schedule-expression "rate(1 hour)" \
--target '{
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:SyncData",
"RoleArn": "arn:aws:iam::123456789012:role/scheduler-role"
}' \
--flexible-time-window '{"Mode": "FLEXIBLE", "MaximumWindowInMinutes": 15}'

AWS Service Events​

# EC2 state changes
aws events put-rule \
--name ec2-state-change \
--event-pattern '{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["stopped", "terminated"]
}
}'

# S3 object created
aws events put-rule \
--name s3-upload \
--event-pattern '{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {"name": ["my-bucket"]},
"object": {"key": [{"prefix": "uploads/"}]}
}
}'

Good Event Structure​

events.put_events(
Entries=[{
'Source': 'mycompany.orders.api',
'DetailType': 'Order Created',
'Detail': json.dumps({
'version': '1.0',
'correlation_id': 'req-abc-123',
'timestamp': '2024-01-15T10:30:00Z',
'order_id': '12345',
'data': {'total': 99.99}
}),
'EventBusName': 'my-app-events'
}]
)

CLI Reference​

Event Buses​

CommandDescription
aws events create-event-busCreate event bus
aws events delete-event-busDelete event bus
aws events list-event-busesList event buses
aws events describe-event-busGet event bus details

Rules​

CommandDescription
aws events put-ruleCreate or update rule
aws events delete-ruleDelete rule
aws events list-rulesList rules
aws events describe-ruleGet rule details
aws events enable-ruleEnable rule
aws events disable-ruleDisable rule

Targets​

CommandDescription
aws events put-targetsAdd targets to rule
aws events remove-targetsRemove targets
aws events list-targets-by-ruleList rule targets

Events​

CommandDescription
aws events put-eventsPublish events

Best Practices​

Event Design​

  • Use meaningful source names — company.service.component
  • Use descriptive detail-types — Order Created, User Signed Up
  • Include correlation IDs for tracing
  • Keep events small (< 256 KB)
  • Use versioning for event schemas

Reliability​

  • Use DLQs for failed deliveries
  • Implement idempotency in consumers
  • Monitor failed invocations
  • Use archive and replay for recovery

Security​

  • Use resource policies to control access
  • Enable encryption with KMS
  • Use IAM roles for targets

Cost Optimization​

  • Use specific event patterns to reduce matches
  • Batch events when publishing (up to 10 per call)

Troubleshooting​

Rule Not Triggering​

Debug:

# Check rule status
aws events describe-rule --name my-rule

# Test event pattern
aws events test-event-pattern \
--event-pattern '{"source": ["my-app"]}' \
--event '{"source": "my-app", "detail-type": "Test"}'

Common causes:

  • Rule disabled
  • Event pattern doesn't match
  • Target permissions missing

Lambda Not Invoked​

Check Lambda permissions:

aws lambda get-policy --function-name MyFunction

Required permission:

{
"Principal": "events.amazonaws.com",
"Action": "lambda:InvokeFunction",
"Resource": "function-arn",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "rule-arn"
}
}
}

Viewing Failed Events​

# Check FailedInvocations metric
aws cloudwatch get-metric-statistics \
--namespace AWS/Events \
--metric-name FailedInvocations \
--dimensions Name=RuleName,Value=my-rule \
--start-time $(date -d '1 hour ago' -u +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 300 \
--statistics Sum

References​