Amazon S3 事件通知 - Amazon Simple Storage Service

Amazon S3 事件通知

您可以使用 Amazon S3 事件通知功能在 S3 存储桶中发生某些事件时接收通知。要启用通知,您必须首先添加通知配置,标识希望 Amazon S3 发布的事件以及希望 Amazon S3 将通知发送到的目的地。您可以将此配置存储在与存储桶关联的通知子资源中。有关更多信息,请参阅 存储桶配置选项。Amazon S3 提供了一个 API,用于管理此子资源。

重要

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

Amazon S3 事件通知概述

目前,Amazon S3 可以发布用于以下事件的通知:

  • 新对象创建事件 — Amazon S3 支持多个创建对象的 API。您可以在仅使用特定 API 时请求通知(例如 s3:ObjectCreated:Put)。无论使用的是何种 API,您也可以使用通配符(例如 s3:ObjectCreated:*)在创建对象时请求通知。

  • 对象删除事件 — Amazon S3 支持对受版本控制和不受版本控制的对象的删除。有关信息,请参阅 在 S3 存储桶中使用版本控制

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

  • 还原对象事件 — Amazon S3 支持还原已存档到 S3 Glacier 存储类的对象。使用 s3:ObjectRestore:Completed,您可以请求在对象还原完成时得到通知。使用 s3:ObjectRestore:Post 可请求还原启动的通知。

  • 低冗余存储 (RRS) 对象丢失事件 — Amazon S3 在检测到 RRS 存储类别的对象已丢失时发送通知消息。

  • 复制事件 — Amazon S3 为启用了 S3 复制指标或 S3 复制时间控制 (S3 RTC) 的复制配置发送事件通知。您可以通过跟踪待处理字节数、待处理的操作和复制延迟来逐分钟监控复制的进度。有关复制指标的信息,请参阅 使用复制指标和 Amazon S3 事件通知监控进度

有关受支持的事件类型的列表,请参阅受支持的事件类型

Amazon S3 支持它可以在其中发布事件的以下目标:

  • Amazon Simple Notification Service (Amazon SNS)

    Amazon SNS 是一项灵活且完全托管的消息推送服务。使用此服务,您可以将消息推送到移动设备或分布式服务。通过 SNS,您只需要发布一次消息,就能将其发送无数遍。目前,仅允许标准 SNS 作为 S3 事件通知目标,而不允许 SNS FIFO。有关 SNS 的更多信息,请参阅 Amazon SNS

  • Amazon Simple Queue Service (Amazon SQS) 队列

    Amazon SQS 是一项可扩展且完全托管的消息排队服务。您可以使用 SQS 来传输任何容量的数据,而不需要其他服务始终可用。在您的通知配置中,您可以请求 Amazon S3 将事件发布到 SQS 队列。

    目前,仅允许标准 SQS 队列作为 Amazon S3 事件通知目标,而不允许 FIFO SQS 队列。有关 Amazon SQS 的更多信息,请参阅 Amazon SQS

  • AWS Lambda

    AWS Lambda 是一项计算服务,它使您可以轻松地构建快速响应新信息的应用程序。AWS Lambda 运行您的代码以响应事件,例如图像上传、应用程序内活动、网站单击或连接设备的输出。

    您可以使用 AWS Lambda 通过自定义逻辑扩展其他 AWS 服务,或创建您自己的按 AWS 规模、性能和安全性运行的后端。通过 Lambda,您可以轻松创建单独的事件驱动型应用程序,这些应用程序仅在需要时运行并可自动从每天几个请求扩展到每秒数千个请求。

    Lambda 可以运行自定义代码以响应 Amazon S3 存储桶事件。您将自定义代码上传到 Lambda,并创建所谓的 Lambda 函数。当 Amazon S3 检测到特定类型的事件(例如,对象创建的事件)时,它可以将该事件发布到 AWS Lambda 并在 Lambda 中调用您的函数。作为回应,Lambda 将运行您的函数。

警告

如果您的通知写入触发通知的同一存储桶,则可能会导致执行循环。例如,如果每当上传一个对象,存储桶就触发某个 Lambda 函数,而该函数又上传一个对象给存储桶,则该函数间接触发了自身。为避免这种情况,请使用两个存储桶,或将触发器配置为仅适用于传入对象所用的前缀。

有关将 Amazon S3 通知与 AWS Lambda 结合使用的更多信息和示例,请参阅《AWS Lambda 开发人员指南》中的结合使用 AWS Lambda 和 Amazon S3

有关 S3 事件通知的更多信息,请参阅以下部分: