首页 > 解决方案 > AWS 事件驱动方法 - Cloud Watch 与 S3 事件通知

问题描述

我正在构建一个事件驱动的系统,它会在新文件到达 S3 时立即启动。我正在评估实现这一目标的不同方法,并且可以选择使用 Cloud Watch Rule + API Trail。这就是 Cloud Watch Event 模式:

    {
  "source": [
    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "s3.amazonaws.com"
    ],
    "eventName": [
      "PutObject"
    ],
    "requestParameters": {
      "bucketName": [
        "mysupertest88"
      ]
    }
  }
}

像这样,它会触发每个文件进入存储桶的规则,但尝试通过键和通配符过滤不起作用:

"requestParameters": {
      "bucketName": [
        "mysupertest88"
      ],
      "key": ["myprefix/mysecondprefix/*"]
    }

仅当我指定一个没有通配符的匹配键时它才有效,我认为因为符号“*”是 S3 对象中的有效字符。 另一种方法是直接在 Trail 级别过滤: API 跟踪

但我不认为这是一个不错的选择,因为 API Trail 通常不受开发人员的控制。 另一种选择是使用内容过滤:(不错的新功能,但您必须通过 EventBridge 创建规则)

    {
  "source": [
    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "s3.amazonaws.com"
    ],
    "eventName": [
      "PutObject"
    ],
    "requestParameters": {
      "bucketName": [
        "mysupertest88"
      ],
      "key": [
        {
          "prefix": "a/c"
        }
      ]
    }
  }
}

最后的 S3 事件通知是完成此任务的旧方法吗?你对此有何经验?有没有没有经验不容易掌握的利弊?

标签: amazon-web-servicesamazon-s3amazon-cloudwatchevent-driven

解决方案


由于您的目标是“在新文件到达 S3 后立即”开始操作,因此 CT 可能无法满足您的要求。这是因为交付 API 事件可能需要 15 分钟。来自 AWS常见问题解答

通常,CloudTrail在 API 调用后15 分钟内交付事件。

相比之下,S3 事件应该更快。来自 AWS文档

Amazon S3 事件通知设计为至少传送一次。通常,事件通知会在几秒钟内送达,但有时可能需要一分钟或更长时间


推荐阅读