0

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

4

3 回答 3

0

不要从 CloudWatch 事件控制台将 Lambda 添加为订阅者,而是从 Lambda 控制台配置 cloudwatch 事件触发器

这样做将为已配置的 CloudWatch 事件添加“Lambda:Invoke”权限。

或者,手动为 CW 事件添加调用权限,以使用 Lambda 的 add-permission 方法进行调用。

命令行示例

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>"
于 2018-06-05T11:30:55.623 回答
0

CloudWatch 规则事件模式源不正确。它应该是 - “source”:[“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

于 2019-05-01T09:53:26.147 回答
0

特别是 cloudtrail 的,因为我正在部署到 us-east-1 但想从所有地区获取事件。

CloudTrail 有两种主要的交付机制:

  1. 轨迹配置,以及
  2. 转发到 CloudWatch Events。

当您创建多区域跟踪时,来自所有区域的事件将发送到该一个多区域跟踪配置,即发送到唯一的 S3 存储桶和 CloudWatch Logs 组。

但是将事件转发到 CloudWatch Events,因为它不是 Trail 配置的一部分,所以不能以相同的方式工作。事件转发在区域内完成。

us-east-1 中发生的事件将转发到 us-east-1 中的 CloudWatch Events,us-west-2 中发生的事件将转发到 us-west-2 中的 CloudWatch Events。

为了实现您的要求,最好的近似方法是在 us-east-1 中创建一个 Lambda 函数,然后在每个区域创建一个 CloudWatch Events 规则,指向 us-east-1 中的相同 Lambda 函数(跨区域)。

于 2020-05-28T01:24:39.830 回答