我正在尝试处理cloudwatch事件,特别是cloudtrail事件,因为我正在部署到us-east-1但希望从所有地区获取事件。一切都在部署,但事件并没有触发lambda。
我的cloudtrail已针对所有地区进行配置并交付给Cloudwatch日志组。
functions:
ec2_instance_region_watch:
handler: ec2_instance_region_watch.ec2_instance_region_watch
events:
- cloudwatchEvent:
event:
source:
- “ec2.amazonaws.com”
detail-type:
- “AWS API Call via CloudTrail”
detail:
eventName:
- “RunInstances”
我的cloudwatch活动已创建。
{
“detail-type”: [
“AWS API Call via CloudTrail”
],
“source”: [
“ec2.amazonaws.com”
],
“detail”: {
“eventName”: [
“RunInstances”
]
}
}
我启动了一个实例,在cloudwatch日志组中,我得到了一个包含我期望的事件。
"eventSource": "ec2.amazonaws.com",
"eventName": "RunInstances",
然而我的lambda永远不会发射,因此它与cloudtrail事件不匹配。
我试图有点欺骗,https://serverless.com/blog/serverless-cloudtrail-cloudwatch-events/
答案 0 :(得分:0)
不是从CloudWatch Events Console添加Lambda作为订阅者, 从Lambda控制台配置cloudwatch事件触发器
这样做会添加" Lambda:Invoke"已配置的CloudWatch事件的权限。
或者,为CW事件手动添加调用权限,以使用Lambda的add-permission方法进行调用。
CLI示例
aws lambda add-permission \
--function-name FUNCTION_NAME \
--statement-id STATEMENT_ID \
--action lambda:InvokeFunction \
--principal events.amazonaws.com \
--source-arn "arn:aws:events:<region>:<acct_id>:rule/<rule_name>"
答案 1 :(得分:0)
CloudWatch Rule Event Pattern源不正确。它应该是 - “源”:[“ aws.ec2”]
{
"source": [
"aws.ec2"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"ec2.amazonaws.com"
],
"eventName": [
"RunInstances"
]
}
}
https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Cloud
答案 2 :(得分:0)
特别是cloudtrail的,因为我正在部署到us-east-1,但希望从所有地区获得事件。
CloudTrail有两种主要的交付机制:
创建多区域跟踪时,所有区域的事件都将发送到该多区域跟踪配置,即发送到该唯一的S3存储桶和CloudWatch Logs组。
但是将事件转发到CloudWatch Events,因为它不是Trail配置的一部分,所以不能以相同的方式工作。事件转发是在区域中完成的。
在us-east-1中发生的事件将转发到us-east-1中的CloudWatch事件,在us-west-2中发生的事件将转发到us-west-2中的CloudWatch事件。
要实现您的要求,最好的近似方法是在us-east-1中创建一个Lambda函数,然后在每个区域中创建一个CloudWatch Events规则,指向us-east-1中的同一Lambda函数(跨区域)