事件通知类型和目标 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

事件通知类型和目标

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 ServiceAmazon 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 可以发布以下类型的事件。您在通知配置中指定这些事件类型。

事件类型 描述

s3:TestEvent

启用通知后,Amazon S3 将发布测试通知。这是为了确保主题存在,并且存储桶拥有者有权发布指定主题。

如果启用通知失败,则不会收到测试通知。

s3:ObjectCreated:*

s3:ObjectCreated:Put

s3:ObjectCreated:Post

s3:ObjectCreated:Copy

s3:ObjectCreated:CompleteMultipartUpload

诸如 PUTPOSTCOPY 之类的 Amazon S3 API 操作可以创建对象。通过这些事件类型,您可以在使用特定 API 操作创建对象时启用通知。或者,您可以使用 s3:ObjectCreated:* 事件类型来请求通知,而不考虑用于创建对象的 API。

s3:ObjectCreated:CompleteMultipartUpload 包含使用 UploadPartCopy 进行复制操作所创建的对象。

s3:ObjectRemoved:*

s3:ObjectRemoved:Delete

s3:ObjectRemoved:DeleteMarkerCreated

通过使用 ObjectRemoved 事件类型,您可以在从存储桶中移除一个对象或一批对象时启用通知。

您可以使用 s3:ObjectRemoved:Delete 事件类型请求在删除对象或永久删除受版本控制的对象时收到通知。或者,也可以使用 s3:ObjectRemoved:DeleteMarkerCreated 请求在为受版本控制的对象创建删除标记时收到通知。有关如何删除版本控制对象的说明,请参阅 从启用了版本控制的存储桶中删除对象版本。您还可以使用通配符 s3:ObjectRemoved:* 来请求在每次删除对象时收到通知。

这些事件通知不会针对从生命周期配置中的自动删除或失败的操作向您发出提示。

s3:ObjectRestore:*

s3:ObjectRestore:Post

s3:ObjectRestore:Completed

s3:ObjectRestore:Delete

通过使用 ObjectRestore 事件类型,可在从 S3 Glacier Flexible Retrieval 存储类、S3 Glacier Deep Archive 存储类、S3 Intelligent-Tiering 归档访问层和 S3 Intelligent-Tiering 深度归档访问层还原对象时收到事件启动和完成的通知。您还可以接收对象的恢复副本何时过期的通知。

s3:ObjectRestore:Post 事件类型通知您对象还原启动。s3:ObjectRestore:Completed 事件类型会通知您还原完成。s3:ObjectRestore:Delete 事件类型会在恢复的对象的临时副本过期时通知您。

s3:ReducedRedundancyLostObject 当 Amazon S3 检测到 RRS 存储类的对象丢失时,您会收到此通知事件。

s3:Replication:*

s3:Replication:OperationFailedReplication

s3:Replication:OperationMissedThreshold

s3:Replication:OperationReplicatedAfterThreshold

s3:Replication:OperationNotTracked

通过使用 Replication 事件类型,可以对具有 S3 复制指标或启用 S3 Replication Time Control(S3 RTC)的复制配置接收通知。您可以通过跟踪待处理字节数、待处理的操作和复制延迟来逐分钟监控复制事件的进度。有关复制指标的信息,请参阅 使用指标、事件通知和状态监控复制

  • 当符合复制条件的对象复制失败时,s3:Replication:OperationFailedReplication 事件类型将通知您。

  • 当符合复制(使用 S3 RTC)条件的对象超过 15 分钟的复制阈值时,s3:Replication:OperationMissedThreshold 事件类型将通知您。

  • 当符合复制(使用 S3 RTC)条件的对象在 15 分钟阈值后复制时,s3:Replication:OperationReplicatedAfterThreshold 事件类型将通知您。

  • 当符合实时复制(同区域复制 [SRR] 或跨区域复制 [CRR])条件的对象不再受复制指标跟踪时,s3:Replication:OperationNotTracked 事件类型会通知您。

s3:LifecycleExpiration:*

s3:LifecycleExpiration:Delete

s3:LifecycleExpiration:DeleteMarkerCreated

通过使用 LifecycleExpiration 事件类型,当 Amazon S3 基于 S3 生命周期配置删除对象时,您可以收到通知。

s3:LifecycleExpiration:Delete 事件类型在删除未转换存储桶中的对象时通知您。当 S3 生命周期配置永久删除对象版本时,它也会通知您。版本控制的存储桶中对象的当前版本删除后,当 S3 生命周期创建删除标记时,s3:LifecycleExpiration:DeleteMarkerCreated 事件类型会通知您。

s3:LifecycleTransition 当一个对象通过 S3 Lifecycle 配置转移到另一个 Amazon S3 存储类时,您会收到这个通知事件。
s3:IntelligentTiering 当 S3 Intelligent-Tiering 存储类中的对象迁移到归档访问层或深层归档访问层时,会收到此通知事件。

s3:ObjectTagging:*

s3:ObjectTagging:Put

s3:ObjectTagging:Delete

通过使用 ObjectTagging 事件类型,您可以在从对象中添加或删除对象标签时启用通知。

s3:ObjectTagging:Put 事件类型会在对象上放置标签或现有标签更新时通知您。当从对象中移除标签时,s3:ObjectTagging:Delete 事件类型会通知您。

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