如何在特定后缀的S3键上传时触发AWS事件规则

12

我正在尝试创建一个AWS事件规则,只有当特定后缀的文件上传到S3存储桶时才会触发。

{
  "source": [
    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "s3.amazonaws.com"
    ],
    "eventName": [
      "PutObject",
      "CompleteMultipartUpload"
    ],
    "requestParameters": {
      "bucketName": [
        "bucket-name"
      ],
      "key": [
        { "suffix": ".csv" }
      ]
    }
  }
}

据我了解,AWS拥有基于内容的过滤功能,但文档没有显示可以使用后缀,只能使用前缀等其他模式: https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html

理想情况下,我希望能够在这里直接完成过滤,而不需要一个中间的Lambda函数,因为我的事件目标是一个ECS Fargate任务。

2个回答

6

目前(2020年7月)CloudWatch事件不支持后缀过滤。

您可以配置S3事件通知,它支持指定前缀和后缀的能力。

通过使用S3事件通知,您仍然可以将目标设置为Lambda。


@ChrisWilliams,我们现在是否有在CloudWatch规则中添加后缀的功能? - Abdul Haseeb
我唯一的担忧是,即使创建了一个新的空文件夹,我的目标也会被触发事件。我只想避免这种情况。 - Abdul Haseeb
2
你可以使用 S3 事件 -> SNS -> Eventbridge -> Fargate。 - Merlin
2
@Merlin 虽然这个方法可以行得通,但我的 AWS 成本会大幅增加,因为我不想每月额外添加 5 亿条消息到 SNS 中。真不可思议,他们竟然不支持适当的过滤 - 难道他们希望人们使用更少的过滤器,以便触发更多的事件,从而赚更多的钱吗? - Sun
@Sun 或许过滤实现上存在一些困难。无论如何,您可以使用前缀,例如s3://yada-yada/csv/path/file.csv,并将所有CSV文件放入包含“csv”的前缀中。上传时也可能标记对象作为触发器。 - Merlin
显示剩余2条评论

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接