eventbridge
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAWS EventBridge
AWS EventBridge
Amazon EventBridge is a serverless event bus that connects applications using events. Route events from AWS services, custom applications, and SaaS partners.
Amazon EventBridge 是一款无服务器事件总线,可通过事件连接各类应用。能够路由来自AWS服务、自定义应用以及SaaS合作伙伴的事件。
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
接收事件的通道。类型包括:
- 默认总线:接收AWS服务事件
- 自定义总线:接收您的应用事件
- 合作伙伴总线:接收SaaS应用事件
Rules
规则
Match incoming events and route to targets. Each rule can have up to 5 targets.
匹配传入事件并路由到目标。每条规则最多可配置5个目标。
Event Patterns
事件模式
JSON patterns that define which events match a rule.
用于定义哪些事件可匹配规则的JSON模式。
Targets
目标
AWS services that receive matched events (Lambda, SQS, SNS, Step Functions, etc.).
接收匹配事件的AWS服务(如Lambda、SQS、SNS、Step Functions等)。
Scheduler
调度器
Schedule one-time or recurring events to invoke targets.
配置一次性或周期性事件以触发目标。
Common Patterns
常见模式
Create Custom Event Bus and Rule
创建自定义事件总线与规则
AWS CLI:
bash
undefinedAWS CLI:
bash
undefinedCreate custom event bus
Create custom event bus
aws events create-event-bus --name my-app-events
aws events create-event-bus --name my-app-events
Create rule
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"] }'
--name order-created-rule
--event-bus-name my-app-events
--event-pattern '{ "source": ["my-app.orders"], "detail-type": ["Order Created"] }'
aws events put-rule
--name order-created-rule
--event-bus-name my-app-events
--event-pattern '{ "source": ["my-app.orders"], "detail-type": ["Order Created"] }'
--name order-created-rule
--event-bus-name my-app-events
--event-pattern '{ "source": ["my-app.orders"], "detail-type": ["Order Created"] }'
Add Lambda target
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" }]'
--rule order-created-rule
--event-bus-name my-app-events
--targets '[{ "Id": "process-order", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder" }]'
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" }]'
--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
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
--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:**
```python
import boto3
events = boto3.client('events')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
--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:**
```python
import boto3
events = boto3.client('events')Create event bus
Create event bus
events.create_event_bus(Name='my-app-events')
events.create_event_bus(Name='my-app-events')
Create rule
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'
)
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
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'
}]
)
undefinedevents.put_targets(
Rule='order-created-rule',
EventBusName='my-app-events',
Targets=[{
'Id': 'process-order',
'Arn': 'arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder'
}]
)
undefinedPublish Custom Events
发布自定义事件
python
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,
'items': [
{'product_id': 'prod-1', 'quantity': 2}
]
}),
'EventBusName': 'my-app-events'
}
]
)python
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,
'items': [
{'product_id': 'prod-1', 'quantity': 2}
]
}),
'EventBusName': 'my-app-events'
}
]
)Scheduled Events
定时事件
bash
undefinedbash
undefinedRun every 5 minutes
Run every 5 minutes
aws events put-rule
--name every-5-minutes
--schedule-expression "rate(5 minutes)"
--name every-5-minutes
--schedule-expression "rate(5 minutes)"
aws events put-rule
--name every-5-minutes
--schedule-expression "rate(5 minutes)"
--name every-5-minutes
--schedule-expression "rate(5 minutes)"
Run at specific times (cron)
Run at specific times (cron)
aws events put-rule
--name daily-cleanup
--schedule-expression "cron(0 2 * * ? *)"
--name daily-cleanup
--schedule-expression "cron(0 2 * * ? *)"
aws events put-rule
--name daily-cleanup
--schedule-expression "cron(0 2 * * ? *)"
--name daily-cleanup
--schedule-expression "cron(0 2 * * ? *)"
Add target
Add target
aws events put-targets
--rule every-5-minutes
--targets '[{ "Id": "cleanup-function", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:Cleanup" }]'
--rule every-5-minutes
--targets '[{ "Id": "cleanup-function", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:Cleanup" }]'
undefinedaws events put-targets
--rule every-5-minutes
--targets '[{ "Id": "cleanup-function", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:Cleanup" }]'
--rule every-5-minutes
--targets '[{ "Id": "cleanup-function", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:Cleanup" }]'
undefinedEventBridge Scheduler (One-Time and Flexible)
EventBridge 调度器(一次性与灵活调度)
bash
undefinedbash
undefinedOne-time schedule
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": "Merry Christmas!"}" }'
--flexible-time-window '{"Mode": "OFF"}'
--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": "Merry Christmas!"}" }'
--flexible-time-window '{"Mode": "OFF"}'
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": "Merry Christmas!"}" }'
--flexible-time-window '{"Mode": "OFF"}'
--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": "Merry Christmas!"}" }'
--flexible-time-window '{"Mode": "OFF"}'
Recurring with flexible window
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}'
--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}'
undefinedaws 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}'
--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}'
undefinedAWS Service Events
AWS 服务事件
bash
undefinedbash
undefinedEC2 state changes
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"] } }'
--name ec2-state-change
--event-pattern '{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["stopped", "terminated"] } }'
aws events put-rule
--name ec2-state-change
--event-pattern '{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["stopped", "terminated"] } }'
--name ec2-state-change
--event-pattern '{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["stopped", "terminated"] } }'
S3 object created
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/"}]} } }'
--name s3-upload
--event-pattern '{ "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": {"name": ["my-bucket"]}, "object": {"key": [{"prefix": "uploads/"}]} } }'
undefinedaws events put-rule
--name s3-upload
--event-pattern '{ "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": {"name": ["my-bucket"]}, "object": {"key": [{"prefix": "uploads/"}]} } }'
--name s3-upload
--event-pattern '{ "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": {"name": ["my-bucket"]}, "object": {"key": [{"prefix": "uploads/"}]} } }'
undefinedCLI Reference
CLI 参考
Event Buses
事件总线
| Command | Description |
|---|---|
| Create event bus |
| Delete event bus |
| List event buses |
| Get event bus details |
| 命令 | 描述 |
|---|---|
| 创建事件总线 |
| 删除事件总线 |
| 列出事件总线 |
| 获取事件总线详情 |
Rules
规则
| Command | Description |
|---|---|
| Create or update rule |
| Delete rule |
| List rules |
| Get rule details |
| Enable rule |
| Disable rule |
| 命令 | 描述 |
|---|---|
| 创建或更新规则 |
| 删除规则 |
| 列出规则 |
| 获取规则详情 |
| 启用规则 |
| 禁用规则 |
Targets
目标
| Command | Description |
|---|---|
| Add targets to rule |
| Remove targets |
| List rule targets |
| 命令 | 描述 |
|---|---|
| 为规则添加目标 |
| 移除目标 |
| 列出规则关联的目标 |
Events
事件
| Command | Description |
|---|---|
| Publish events |
| 命令 | 描述 |
|---|---|
| 发布事件 |
Best Practices
最佳实践
Event Design
事件设计
- Use meaningful source names —
company.service.component - Use descriptive detail-types — ,
Order CreatedUser Signed Up - Include correlation IDs for tracing
- Keep events small (< 256 KB)
- Use versioning for event schemas
python
undefined- 使用有意义的源名称 — 格式
company.service.component - 使用描述性的事件类型 — 如、
Order CreatedUser Signed Up - 包含关联ID 用于追踪链路
- 保持事件体积小巧(小于256 KB)
- 对事件 schema 进行版本控制
python
undefinedGood event structure
Good event structure
{
'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': {...}
})
}
undefined{
'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': {...}
})
}
undefinedReliability
可靠性
- Use DLQs for failed deliveries
- Implement idempotency in consumers
- Monitor failed invocations
- Use archive and replay for recovery
- 使用死信队列(DLQ) 处理投递失败的事件
- 在消费者端实现幂等性
- 监控失败调用情况
- 使用归档与重放功能 进行故障恢复
Security
安全性
- Use resource policies to control access
- Enable encryption with KMS
- Use IAM roles for targets
- 使用资源策略 控制访问权限
- 启用KMS加密
- 为目标使用IAM角色
Cost Optimization
成本优化
- Use specific event patterns to reduce matches
- Batch events when publishing (up to 10 per call)
- Archive selectively — not all events
- 使用精准的事件模式 减少匹配次数
- 发布事件时批量处理(每次调用最多10个事件)
- 选择性归档 — 无需归档所有事件
Troubleshooting
故障排查
Rule Not Triggering
规则未触发
Debug:
bash
undefined调试步骤:
bash
undefinedCheck rule status
Check rule status
aws events describe-rule --name my-rule
aws events describe-rule --name my-rule
Check targets
Check targets
aws events list-targets-by-rule --rule my-rule
aws events list-targets-by-rule --rule my-rule
Test event pattern
Test event pattern
aws events test-event-pattern
--event-pattern '{"source": ["my-app"]}'
--event '{"source": "my-app", "detail-type": "Test"}'
--event-pattern '{"source": ["my-app"]}'
--event '{"source": "my-app", "detail-type": "Test"}'
**Common causes:**
- Rule disabled
- Event pattern doesn't match
- Target permissions missingaws events test-event-pattern
--event-pattern '{"source": ["my-app"]}'
--event '{"source": "my-app", "detail-type": "Test"}'
--event-pattern '{"source": ["my-app"]}'
--event '{"source": "my-app", "detail-type": "Test"}'
**常见原因:**
- 规则处于禁用状态
- 事件模式不匹配
- 目标缺少权限Lambda Not Invoked
Lambda 未被调用
Check Lambda permissions:
bash
aws lambda get-policy --function-name MyFunctionRequired permission:
json
{
"Principal": "events.amazonaws.com",
"Action": "lambda:InvokeFunction",
"Resource": "function-arn",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "rule-arn"
}
}
}检查Lambda权限:
bash
aws lambda get-policy --function-name MyFunction所需权限示例:
json
{
"Principal": "events.amazonaws.com",
"Action": "lambda:InvokeFunction",
"Resource": "function-arn",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "rule-arn"
}
}
}Events Not Reaching Custom Bus
事件未到达自定义总线
Check:
- Publishing to correct bus name
- Event format is valid JSON
- Put events has proper permissions
bash
undefined检查项:
- 发布时使用了正确的总线名称
- 事件格式为有效的JSON
- 发布事件的操作拥有正确权限
bash
undefinedTest publish
Test publish
aws events put-events
--entries '[{ "Source": "test", "DetailType": "Test Event", "Detail": "{}", "EventBusName": "my-app-events" }]'
--entries '[{ "Source": "test", "DetailType": "Test Event", "Detail": "{}", "EventBusName": "my-app-events" }]'
undefinedaws events put-events
--entries '[{ "Source": "test", "DetailType": "Test Event", "Detail": "{}", "EventBusName": "my-app-events" }]'
--entries '[{ "Source": "test", "DetailType": "Test Event", "Detail": "{}", "EventBusName": "my-app-events" }]'
undefinedViewing Failed Events
查看失败事件
bash
undefinedbash
undefinedEnable CloudWatch metrics
Enable CloudWatch metrics
aws events put-rule
--name my-rule
--event-pattern '...'
--state ENABLED
--name my-rule
--event-pattern '...'
--state ENABLED
aws events put-rule
--name my-rule
--event-pattern '...'
--state ENABLED
--name my-rule
--event-pattern '...'
--state ENABLED
Check FailedInvocations metric
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
--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
undefinedaws 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
--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
undefined