如何在 AWS EventBridge 上按对象键后缀过滤 s3 数据事件

我在 AWS EventBridge 上创建了一条触发 Sagemaker Pipeline 执行的规则。为此,我有以下事件模式:

{
  "source": ["aws.s3"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["s3.amazonaws.com"],
    "eventName": ["PutObject", "CopyObject", "CompleteMultipartUpload"],
    "requestParameters": {
      "bucketName": ["my-bucket-name"],
      "key": [{
        "prefix": "folder/inside/my/bucket/"
      }]
    }
  }
}

我已启用 CloudTrail 来记录我的 S3 数据事件,并且该规则正在正确触发我的 Sagemaker 管道执行。

这里的问题是:正在为我的前缀中的 any 对象的所有 put/copy 触发管道执行。然后,我想仅在存储桶中上传特定对象时触发我的管道执行,因为我不知道它的全名。

例如,我将拥有的可能对象名称是,该日期是动态构建的:

my-bucket-name/folder/inside/my/bucket/2021-07-28/_SUCESS

我想用这样的东西写一个事件模式:

"prefix": "folder/inside/my/bucket/{current_date}/_SUCCESS"

或者

"key": [{
  "prefix": "folder/inside/my/bucket/"
}, {
  "suffix": "_SUCCESS"
}]

我认为 AWS 上的事件模式不支持后缀过滤。在文档中,并不清楚行为。我已经使用后缀配置了 S3 事件通知并将过滤后的通知发送到 SQS 队列,但现在我不知道如何处理此队列以调用我的 EventBridge 规则来触发 Sagemaker 管道执行。

stack overflow How to filter an s3 data event by object key suffix on AWS EventBridge
原文答案
author avatar

接受的答案

我正在寻找类似的功能。

不幸的是, based on the docs from AWS ,它看起来只支持以下模式:

比较 示例 规则语法
用户 ID 为空 “用户 ID”:[空]
姓氏为空 “姓氏”:[“”]
等于 名字是“爱丽丝” “姓名”:[“爱丽丝”]
位置是“纽约”,日期是“星期一” “位置”:[“纽约”],“日期”:[“星期一”]
或者 PaymentType 是 "Credit" 或 "Debit" "PaymentType": [ "贷方", "借方"]
天气不是“下雨” “天气”:[{“除了”:[“下雨”]}]
数字(等于) 价格是 100 “价格”:[{“数字”:[“=”,100]}]
数值(范围) 价格大于10,小于等于20 “价格”:[{“数字”:[“>”,10,“<=,20]}]
存在 ProductName 存在 “产品名称”:[{“存在”:真}]
不存在 产品名称不存在 “产品名称”:[{“存在”:假}]
开始于 地区在美国 “地区”:[{“前缀”:“我们-”}]

答案:

作者头像

似乎最近添加了对后缀的支持,基于 documentation

比较 范例 规则语法
结尾文件名以 .png 扩展名结尾。 “文件名”: [ { "suffix": ".png" } ]

reference: Content-based filtering