

# 使用 Amazon SQS、Amazon SNS 和 Lambda
<a name="how-to-enable-disable-notification-intro"></a>

启用通知是存储桶级操作。您可以在与该存储桶关联的*通知*子资源中存储通知配置信息。创建或更改存储桶通知配置后，通常必须等待 5 分钟才能使更改生效。首次启用通知时会发生 `s3:TestEvent`。您可以使用以下任意方法来管理通知配置：
+ **使用 Amazon S3 控制台** – 控制台 UI 允许您在存储桶上设置通知配置，而无需编写任何代码。有关更多信息，请参阅 [使用 Amazon S3 控制台启用和配置事件通知](enable-event-notifications.md)。
+ **以编程方式使用 Amazon SDK** – 在内部，控制台和 SDK 都调用 Amazon S3 REST API 来管理与存储桶关联的*通知*子资源。有关使用 Amazon SDK 的通知配置示例，请参阅 [演练：为存储桶配置通知（SNS 主题或 SQS 队列）](ways-to-add-notification-config-to-bucket.md)。
**注意**  
您也可以直接从代码中调用 Amazon S3 REST API。但是，这可能会比较繁琐，因为您必须编写代码对请求进行身份验证。

无论您使用哪种方法，Amazon S3 都将通知配置作为 XML 存储在与存储桶关联的*通知*子资源中。有关存储桶子资源的信息，请参阅 [通用存储桶配置选项](UsingBucket.md#bucket-config-options-intro)。

**注意**  
如果您由于已删除的目标而收到多个失败事件通知，则在尝试删除这些通知时，您可能会收到**无法验证以下目标配置**。您可以在 S3 控制台中通过同时删除所有失败的通知来解决此问题。

**Topics**
+ [授予将事件通知消息发布到目标的权限](grant-destinations-permissions-to-s3.md)
+ [使用 Amazon S3 控制台启用和配置事件通知](enable-event-notifications.md)
+ [以编程方式配置事件通知](#event-notification-configuration)
+ [演练：为存储桶配置通知（SNS 主题或 SQS 队列）](ways-to-add-notification-config-to-bucket.md)
+ [使用对象键名筛选配置事件通知](notification-how-to-filtering.md)
+ [事件消息结构](notification-content-structure.md)

## 以编程方式配置事件通知
<a name="event-notification-configuration"></a>

默认情况下，不为任何类型的事件启用通知。因此，*通知*子资源最初存储空配置。

```
<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
</NotificationConfiguration>
```

要为特定类型的事件启用通知，请将 XML 替换为适当的配置，该配置可标识您希望 Amazon S3 发布的事件类型和您希望将事件发布到的目标。对于每个目标，添加相应的 XML 配置。

**将事件消息发布到 SQS 队列**  
要将 SQS 队列设置为一个或多个事件类型的通知目标，请添加 `QueueConfiguration`。

```
<NotificationConfiguration>
  <QueueConfiguration>
    <Id>{{optional-id-string}}</Id>
    <Queue>{{sqs-queue-arn}}</Queue>
    <Event>{{event-type}}</Event>
    <Event>{{event-type}}</Event>
     ...
  </QueueConfiguration>
   ...
</NotificationConfiguration>
```

**将事件消息发布到 SNS 主题**  
要将 SNS 主题设置为特定事件类型的通知目标，请添加 `TopicConfiguration`。

```
<NotificationConfiguration>
  <TopicConfiguration>
     <Id>{{optional-id-string}}</Id>
     <Topic>{{sns-topic-arn}}</Topic>
     <Event>{{event-type}}</Event>
     <Event>{{event-type}}</Event>
      ...
  </TopicConfiguration>
   ...
</NotificationConfiguration>
```

**调用 Amazon Lambda 函数并提供事件消息作为参数**  
要将 Lambda 函数设置为特定事件类型的通知目标，请添加`CloudFunctionConfiguration`。

```
<NotificationConfiguration>
  <CloudFunctionConfiguration>   
     <Id>{{optional-id-string}}</Id>   
     <CloudFunction>{{cloud-function-arn}}</CloudFunction>        
     <Event>{{event-type}}</Event>      
     <Event>{{event-type}}</Event>      
      ...  
  </CloudFunctionConfiguration>
   ...
</NotificationConfiguration>
```

**删除存储桶上配置的所有通知**  
要删除存储桶上配置的所有通知，请在*通知*子资源中保存一个空 `<NotificationConfiguration/>` 元素。

当 Amazon S3 检测到特定类型的事件时，它会发布包含事件信息的消息。有关更多信息，请参阅 [事件消息结构](notification-content-structure.md)。

有关配置事件通知的详细信息，请参阅以下主题：
+ [演练：为存储桶配置通知（SNS 主题或 SQS 队列）](ways-to-add-notification-config-to-bucket.md).
+ [使用对象键名筛选配置事件通知](notification-how-to-filtering.md)