在ECR事件后触发AWS lambda函数

the*_*uck 7 amazon-web-services amazon-cloudwatch aws-lambda

我试图让AWS Lambda函数在新图像被推送到AWS容器注册表时运行.我创建并测试了功能正常的功能.然后,我创建了一个简单的CloudWatch事件规则,其中包含以下模式:

{
  "source": [
    "aws.ecr"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我认为这将引发ECR的任何事件.

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

joe*_*ler 9

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

您将创建一个Logs Metric Filter,就像这样.

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

要么

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

{
  "source": [
    "aws.ecr"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ecr.amazonaws.com"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 因此,第二种技术似乎也可以工作(并且看起来更整洁)。我在Cloudwatch中使用上述模式创建了事件规则,除了添加了eventName之外,因此我仅收到PutImage事件。然后将目标设置为lambda函数,每次上传新图像时都会调用该函数。谢谢你的帮助。 (2认同)