使用对象键名筛选配置事件通知 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用对象键名筛选配置事件通知

配置 Amazon S3 事件通知时,您必须指定哪些受支持的 Amazon S3 事件类型会导致 Amazon S3 发送通知。如果 S3 存储桶中发生了您未指定的事件类型,Amazon S3 不会发送通知。

您可以将通知配置为按对象的键名的前缀和后缀进行筛选。例如,您可以设置一个配置,以便仅在带有“.jpg”扩展名的图像文件添加到存储桶时收到通知。或者,您也可以设置一个配置,该配置仅在将带有前缀“images/”的对象添加到存储桶时将通知发送到 Amazon SNS 主题,同时将同一存储桶中带有前缀“logs/”的对象的通知发送到 AWS Lambda 函数。

您可以在 Amazon S3 控制台中以及通过 AWS 开发工具包使用 Amazon S3 API 或直接使用 REST API,设置使用对象键名称筛选的通知配置。有关使用控制台 UI 在存储桶上设置通知配置的信息,请参阅使用 Amazon S3 控制台启用和配置事件通知

Amazon S3 在与存储桶关联的通知子资源中以 XML 形式存储通知配置,如启用事件通知中所述。您使用 Filter XML 结构定义要按对象键名的前缀和后缀进行筛选的通知的规则。有关 Filter XML 结构的详细信息,请参阅《Amazon Simple Storage Service API 参考》中的 PUT Bucket 通知

如果 Amazon S3 事件通知配置为使用对象键名称筛选,则仅针对具有特定键名称前缀或后缀的对象发布通知。通配符 ("*") 不能在筛选条件中用作前缀或后缀来表示任何字符。如果您在前缀或后缀值中使用任何特殊字符,您必须以 URL 编码(百分比编码)格式输入它们。有关更多信息,请参阅对象键命名准则

使用 Filter 的通知配置无法定义采用重叠前缀、重叠后缀或前缀和后缀重叠的筛选规则。以下部分提供了使用对象键名称筛选的有效通知配置的示例。它们还包含由于前缀/后缀重叠而无效的通知配置的示例。

采用对象键名筛选的有效通知配置的示例

以下通知配置包含用于标识 Amazon S3 的 Amazon SQS 队列以发布 s3:ObjectCreated:Put 类型的事件的队列配置。每当具有前缀 images/ 和后缀 jpg 的对象被放置 (PUT) 到存储桶时,就会发布这些事件。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

以下通知配置有多个非重叠前缀。该配置作出以下定义:images/ 文件夹中针对 PUT 请求的通知进入队列 A,logs/ 文件夹中针对 PUT 请求的通知进入队列 B。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> <QueueConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>logs/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

以下通知配置有多个非重叠后缀。该配置作出以下定义:所有新添加到存储桶的 .jpg 图像都由 Lambda 云函数 A 处理,所有新添加的 .png 图像都由云函数 B 处理。后缀 .png.jpg 不会重叠,即使它们的最后一个字母相同。如果某个给定的字符串能够以这两个后缀结尾,则将它们视为重叠。一个字符串无法同时以 .png.jpg 结尾,因此示例配置中的后缀不是重叠后缀。

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

使用 Filter 的通知配置不能使用重叠前缀为相同的事件类型定义筛选规则,除非重叠前缀与不重叠的后缀一起使用。以下示例配置显示了如何将使用通用前缀和非重叠后缀创建的对象传递到其他目标。

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

采用无效前缀/后缀重叠的通知配置的示例

大多数情况下,使用 Filter 的通知配置无法使用重叠前缀、重叠后缀或前缀和后缀的重叠组合为相同的事件类型定义筛选规则。只要后缀不重叠,您就可以采用重叠前缀。有关示例,请参阅使用对象键名筛选配置事件通知

您可以将重叠对象键名筛选用于不同的事件类型。例如,您可以创建一个通知配置,该配置将前缀 image/ 用于 ObjectCreated:Put 事件类型并将前缀 image/ 用于 ObjectRemoved:* 事件类型。

在使用 Amazon S3 控制台或 API 时,如果您尝试保存具有对相同的活动类型无效的重叠名称筛选的通知配置,则会出现错误。此部分显示了因重叠名称筛选而无效的通知配置的示例。

任何现有通知配置规则都被假定为具有与任何其他前缀和后缀分别匹配的默认前缀和后缀。以下通知配置因具有重叠前缀而无效,其中的根前缀与任何其他前缀重叠。(如果在此示例中使用后缀而不是前缀,则会发生同样的情况。根后缀与任何其他后缀重叠。)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic> <Event>s3:ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

由于具有重叠后缀,以下通知配置无效。如果某个给定的字符串能够以这两个后缀结尾,则将它们视为重叠。字符串可能以 jpgpg 结尾,因此后缀是重叠的。(前缀也是如此。如果给定字符串能够以两个前缀开头,则认为这两个前缀是重叠的。)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration

由于具有重叠前缀和后缀,以下通知配置无效。

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>