【问题标题】:Trigger AWS lambda function after ECR eventECR 事件后触发 AWS lambda 函数
【发布时间】:2018-05-05 03:16:25
【问题描述】:

我正在尝试让 AWS Lambda 函数在将新映像推送到 AWS 容器注册表时运行。我已经创建并测试了可以正常工作的功能。然后,我使用以下模式创建了一个简单的 CloudWatch 事件规则:

{
  "source": [
    "aws.ecr"
  ]
}

我相信它会在 ECR 的任何事件上触发。

规则有一个 lambda 函数的目标。问题是当将新图像推送到注册表(或删除等)时,不会调用该函数。该函数的 CloudWatch 日志中不显示任何内容。事件规则中是否缺少某些内容或诊断可能出错的方法?

【问题讨论】:

  • 您能否分享完整的详细信息作为您自己问题的答案?肯定会投票赞成 :) 我有完全相同的任务,而且我对这些东西很陌生,我会接受你使用的 lambda 代码。

标签: amazon-web-services aws-lambda amazon-cloudwatch


【解决方案1】:

CloudTrail 记录 PutImage 事件并可以将其写入 CloudWatch Logs。只要在 CloudWatch Logs 中写入 PutImage 事件,就可以触发警报,这可以进一步通过 SNS 触发 Lambda 函数。

您将创建一个日志指标过滤器,类似这样。

{ ($.eventSource = ecr.amazonaws.com) && ($.eventName = PutImage) && ($.requestParameters.repositoryName = “<RepoName>”) && ($.errorCode NOT EXISTS) }

您需要配置 ECR CloudTrail API 调用事件。

{
  "source": [
    "aws.ecr"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ecr.amazonaws.com"
    ]
  }
}

【讨论】:

  • 好的。因此,这似乎可行,尽管对于一些非常简单的事情来说似乎很复杂(AWS 并没有让生活变得简单)。因此,我已将 Cloudtrail 设置为登录 Cloudwatch(它已经这样做了),按照您的描述创建了一个日志指标过滤器,然后向该过滤器添加了一个警报,该过滤器将消息发布到 SNS 主题。 lambda 函数然后订阅主题,因此当消息到达主题时调用!不知道有没有更简单的方法?
  • 所以,第二种技术似乎也很有效(而且看起来更整洁)。我在 Cloudwatch 中创建了一个具有上述模式的事件规则,除了添加了 eventName 以便我只获取 PutImage 事件。然后将 Target 设置为 lambda 函数,每次上传新图像时都会调用该函数。感谢您的帮助。
  • 这种方法可行,但是你不能在Cloudtrail推送到S3的时候也直接触发吗?这也可以避免将 cloudtrail 推送到 cloudwatch 的延迟。
  • 是的 - 触发 S3 也可以。这是任何想要走这条路的人的指南:docs.aws.amazon.com/lambda/latest/dg/with-cloudtrail.html。我可以看到的 s3 路由的唯一缺点是,我看不到在调用 Lambda 之前过滤事件的简单方法。它确实消除了 Cloudtrail 推送到 Cloudwatch 的延迟,尽管主要延迟似乎在 Cloudtrail 部分。
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 2015-11-10
  • 2020-04-20
  • 2021-12-07
  • 2018-05-18
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多