事件通知类型和目标
Amazon S3 支持多种可以发布通知的事件通知类型和目标。配置事件通知时,您可以指定事件类型和目标。只能为每个事件通知指定一个目标。Amazon S3 事件通知为每条通知消息发送一个事件条目。
受支持的事件目标
Amazon S3 可以将事件通知消息发送到以下目标。
-
Amazon Simple Notification Service(Amazon SNS)主题
-
Amazon Simple Queue Service(Amazon SQS)队列
-
Amazon Lambda
-
Amazon EventBridge
但是,只能为每个事件通知指定一种目标类型。
注意
您必须授予 Amazon S3 将消息发布到 Amazon SNS 主题或 Amazon SQS 队列的权限。您还必须授予 Amazon S3 代表您调用 Amazon Lambda 函数的权限。有关如何授予这些权限的说明,请参阅 授予将事件通知消息发布到目标的权限。
Amazon SNS 主题
Amazon SNS 是一项灵活且完全托管的消息推送服务。使用此服务,您可以将消息推送到移动设备或分布式服务。通过 SNS,,您只需要发布一次消息,就能将其发送无数遍。目前,仅允许标准 SNS 作为 S3 事件通知目标,而不允许 SNS FIFO。
Amazon SNS 用于协调和管理向订阅端点或客户交付或发送消息的过程。您可以使用 Amazon SNS 控制台创建 Amazon SNS 主题以便向其发送通知。
该主题必须与您的 Amazon S3 存储桶位于同一 Amazon Web Services 区域。有关如何创建 Amazon SNS 主题的信息,请参阅 Amazon Simple Notification Service 开发人员指南中的 Amazon SNS 入门和 Amazon SNS 常见问题
您先需要以下内容,然后才能将创建的 Amazon SNS 主题用作事件通知目标:
-
Amazon SNS 主题的 Amazon Resource Name (ARN)
-
有效的 Amazon SNS 主题订阅。当消息发布到您的 Amazon SNS 主题时,主题订阅者将得到通知。
Amazon SQS 队列
Amazon SQS 提供了可靠且可扩展的托管队列,用于存储计算机之间传输的消息。您可以使用 Amazon SQS 来传输任何容量的数据,而不需要其他服务始终可用。您可以使用 Amazon SQS 控制台创建 Amazon SQS 队列以便向其发送通知。
Amazon SQS 队列必须与您的 Amazon S3 存储桶位于同一 Amazon Web Services 区域。有关如何创建 Amazon SQS 队列的说明,请参阅 Amazon Simple Queue Service 开发人员指南中的什么是 Amazon Simple Queue Service 和 Amazon SQS 入门。
您先需要以下内容,然后才能使用 Amazon SQS 队列作为事件通知目标:
-
Amazon SQS 队列的 Amazon Resource Name (ARN)
注意
不支持将 Amazon Simple Queue Service FIFO(先进先出)队列作为 Amazon S3 事件通知目标。要向 Amazon SQS FIFO 队列发送 Amazon S3 事件的通知,您可以使用 Amazon EventBridge。有关更多信息,请参阅 启用 Amazon EventBridge。
Lambda 函数
您可以使用 Amazon Lambda 通过自定义逻辑扩展其他 Amazon 服务,或创建您自己的按 Amazon 规模、性能和安全性运行的后端。借助 Lambda,您可以创建仅在需要时运行的离散、事件驱动的应用程序。您还可以使用它自动将这些应用程序从每天的几个请求扩展到每秒数千个请求。
Lambda 可以运行自定义代码以响应 Amazon S3 存储桶事件。您将自定义代码上传到 Lambda,并创建所谓的 Lambda 函数。当 Amazon S3 检测到特定类型的事件时,它可以将该事件发布到 Amazon Lambda 并在 Lambda 中调用您的函数。作为回应,Lambda 将运行您的函数。例如,它可能检测到的一种事件类型是对象创建的事件。
您可以使用 Amazon Lambda 控制台创建使用 Amazon 基础设施代表您运行代码的 Lambda 函数。Lambda 函数必须与您的 S3 存储桶位于同一区域。您还必须具有 Lambda 函数的名称或 ARN 才能将 Lambda 函数设置为事件通知目标。
警告
如果您的通知写入触发通知的同一存储桶,则可能会导致执行循环。例如,如果每当上传一个对象,存储桶就触发某个 Lambda 函数,而该函数又上传一个对象给存储桶,则该函数间接触发了自身。为避免这种情况,请使用两个存储桶,或将触发器配置为仅适用于传入对象所用的前缀。
有关将 Amazon S3 通知与 Amazon Lambda 结合使用的更多信息和示例,请参阅 Amazon Lambda 开发人员指南中的结合使用 Amazon Lambda 和 Amazon S3。
Amazon EventBridge
Amazon EventBridge 是一个无服务器事件总线,它接收来自 Amazon 服务的事件。您可以设置规则来匹配事件并将它们传输到目标,例如 Amazon 服务或 HTTP 端点。有关更多信息,请参阅 Amazon EventBridge 用户指南中的什么是 EventBridge。
与其他目的地不同,您可以启用或禁用为存储桶传送到 EventBridge 的事件。如果启用传输,所有事件都发送到 EventBridge。此外,您可以使用 EventBridge 规则将事件路由到其他目标。
SQS、SNS 和 Lambda 支持的事件类型
Amazon S3 可以发布以下类型的事件。您在通知配置中指定这些事件类型。
事件类型 | 描述 |
---|---|
|
启用通知后,Amazon S3 将发布测试通知。这是为了确保主题存在,并且存储桶拥有者有权发布指定主题。 如果启用通知失败,则不会收到测试通知。 |
|
诸如
|
|
通过使用 您可以使用 这些事件通知不会针对从生命周期配置中的自动删除或失败的操作向您发出提示。 |
|
通过使用
|
s3:ReducedRedundancyLostObject |
当 Amazon S3 检测到 RRS 存储类的对象丢失时,您会收到此通知事件。 |
|
通过使用
|
|
通过使用
|
s3:LifecycleTransition |
当一个对象通过 S3 Lifecycle 配置转移到另一个 Amazon S3 存储类时,您会收到这个通知事件。 |
s3:IntelligentTiering |
当 S3 Intelligent-Tiering 存储类中的对象迁移到归档访问层或深层归档访问层时,会收到此通知事件。 |
|
通过使用
|
s3:ObjectAcl:Put |
当 ACL 放在对象上或更改现有 ACL 时,您会收到此通知事件。当请求导致对象的 ACL 没有更改时,不会生成事件。 |
Amazon EventBridge 支持的事件类型
有关 Amazon S3 将发送到 Amazon EventBridge 的事件类型的列表,请参阅使用 EventBridge。
事件排序和重复事件
Amazon S3 事件通知设计为至少发送一次通知,但不能保证它们以与事件发生相同的顺序到达。在极少数情况下,Amazon S3 的重试机制可能会导致同一对象事件出现重复的 S3 事件通知。有关处理重复或无序事件的更多信息,请参阅 Amazon 存储博客 上的 Manage event ordering and duplicate events with Amazon S3 Event Notifications