【问题标题】:Getting Cloudtrail Cloudwatch Events Working让 Cloudtrail Cloudwatch 事件正常工作
【发布时间】:2018-11-13 17:43:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    或者,手动为 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>"
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        特别是 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 函数(跨区域) .

        【讨论】:

          猜你喜欢
          • 2021-03-30
          • 2020-10-06
          • 2019-12-29
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2022-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多