You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在S3自定义事件模式中使用通配符触发指定路径SQS通知

问题说明

需求为针对S3存储桶my-s3-bucket配置事件通知,仅当文件上传至路径MyFolder/<username>/INPUT/abc.txt(为任意用户名字段)时触发SQS消息,桶内其他路径的文件上传操作不触发通知。
原有EventBridge规则未生效,且S3原生事件通知、默认EventBridge匹配规则不支持路径中段通配符匹配。

原有配置失效原因

你之前编写的EventBridge规则存在语法错误:规则中使用的prefix是严格前缀匹配操作符,不会将*解析为通配符,配置值*/INPUT/*会被当做普通字符串匹配对象键的开头,完全无法命中符合路径规则的创建事件。

可行实现方案

方案1:修正EventBridge规则(推荐,无额外成本)

EventBridge事件模式原生支持wildcard通配符匹配操作符,直接修正规则即可实现精准匹配,不需要引入额外服务,配置完成后直接将规则目标设置为你的SQS队列即可。
修正后的规则参考:

{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "detail": {
    "bucket": {
      "name": ["my-s3-bucket"]
    },
    "object": {
      "key": [
        {
          "wildcard": "MyFolder/*/INPUT/abc.txt"
        }
      ]
    }
  }
}

该规则中wildcard操作符支持*匹配任意长度的任意字符(包含路径分隔符/),可以精准命中你需要的路径格式。如果需要严格限制<username>段不包含多级目录(即MyFolder和INPUT之间仅存在一级路径),可以根据实际业务需求调整通配规则。

方案2:S3事件通知+Lambda过滤转发

如果需要更高的过滤精度,或者后续要叠加自定义校验逻辑(比如校验文件大小、元数据、文件内容特征等),可以采用该方案:

  • 给S3桶配置原生Object Created事件通知,设置前缀为MyFolder/,事件触发目标设置为一个轻量Lambda函数
  • 在Lambda函数中编写简单的过滤逻辑:解析事件中的对象键,通过正则或字符串分割校验是否符合MyFolder/<username>/INPUT/abc.txt的路径规则
  • 校验通过的事件,由Lambda调用SQS发送接口将消息投递到目标队列
    该方案灵活性极高,Lambda运行成本极低,低业务量场景下基本不会产生费用。

方案3:S3全量事件投递SQS,消费端过滤

如果不想调整云上事件路由配置,且已经有成熟的SQS消费逻辑,可以采用最简化的配置:

  • 直接配置S3 Object Created事件全量投递到目标SQS队列
  • 在SQS的消费端代码中增加路径过滤逻辑,解析消息中的对象键,不符合路径规则的消息直接确认丢弃,不执行业务逻辑
    该方案配置成本最低,仅会产生极少量的无效SQS消息请求费用,适合消费端逻辑迭代灵活的场景。
方案选择建议
  • 无特殊自定义逻辑优先选择方案1,原生服务支持,无额外运维成本
  • 需要叠加复杂校验逻辑选择方案2,灵活度最高
  • 已有成熟消费端逻辑、不想调整云上配置选择方案3,改动量最小

内容的提问来源于stack exchange,提问作者AWS_Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:27:20