让Cloudtrail Cloudwatch活动正常运行

时间:2018-06-04 11:39:02

标签: amazon-cloudwatch serverless-framework amazon-cloudtrail

我正在尝试处理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/

3 个答案:

答案 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有两种主要的交付机制:

  1. 跟踪配置和
  2. 转发到CloudWatch Events。

创建多区域跟踪时,所有区域的事件都将发送到该多区域跟踪配置,即发送到该唯一的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函数(跨区域)