一些可能原因如下:
1.资源名称在SAM模板中定义不一致,确认资源名称正确并保证Lambda函数定义与事件桥相同。 2. Lambda函数没有与事件桥绑定,确认SAM模板中Lambda函数使用的事件桥ARN正确,并将事件桥ARN添加到Lambda函数的事件触发器中。 3. 事件类型(例如:dynamodb更新,sqs消息)与Lambda函数的触发器类型(例如:s3对象创建,kinesis数据记录)不匹配,确保Lambda函数的触发器类型与事件类型相同并确保它们都正确设置。
在template.yaml
文件中,确保Lambda函数的触发器定义语法如下:
Resources:
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
...
Events:
MyEventBridge:
Type: EventBridgeRule
Properties:
Pattern:
source:
- my.source.name
确保事件桥的规则定义如下:
Resources:
MyEventBridgeRule:
Type: AWS::Events::Rule
Properties:
EventPattern:
source:
- my.source.name
State: ENABLED
确保Lambda函数的IAM角色拥有访问事件桥的权限,在IAM角色中添加以下策略:
Resources:
MyLambdaRole:
Type: AWS::IAM::Role
Properties:
...
Policies:
- PolicyName: my-event-bridge-access
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- events:PutEvents
- events:PutRule
- events:RemoveTargets
- events:DescribeRule
- events:ListTargetsByRule
- events:PutTargets
Resource: "*"
当以上步骤均按要求执行且仍无法解决问题时,请检查事件桥是否正常工作,并触发事件以确保其配置正确。
代码示例:
import boto3
client = boto3.client('events')
response = client.put_events(
Entries=[
{
'Source': 'my.source.name',
'DetailType': 'my.detail.type',
'Detail': '{}'
}
]
)
print(response)