

# 使用 Amazon S3 事件通知加速网络爬取
<a name="crawler-s3-event-notifications"></a>

您可以将爬网程序配置为使用 Amazon S3 事件来查找任何更改，而不是列出 Amazon S3 或 Data Catalog 目标中的对象。此功能使用 Amazon S3 事件，通过列出触发事件的子文件夹中的所有文件，而不是列出完整的 Amazon S3 或 Data Catalog 目标，来识别两次网络爬取之间的更改，从而缩短了重新爬网时间。

第一次网络爬取会列出目标中的所有 Amazon S3 对象。第一次成功爬取之后，您可以选择手动重新爬取或按设定计划重新爬取。爬网程序只会列出这些事件中的对象，而不会列出所有对象。

当目标为 Data Catalog 表时，爬网程序会利用更改（例如，表中的额外分区）更新 Data Catalog 中的现有表。

迁移到基于 Amazon S3 事件的爬网程序的优点包括：
+ 不需要列出目标中的所有对象，而是在添加或删除对象的位置列出特定文件夹，从而重新爬网更快。
+ 在添加或删除对象的位置列出特定文件夹，从而降低总体网络爬取成本。

Amazon S3 事件网络爬取基于爬网程序调度，从 SQS 队列中使用 Amazon S3 事件来运行。如果队列中没有事件，则无需支付费用。Amazon S3 事件可以配置为直接进入 SQS 队列，或者在多个用户需要相同事件的情况下，也可以配置为 SNS 和 SQS 的组合。有关更多信息，请参阅 [为 Amazon S3 事件通知设置账户](#crawler-s3-event-notifications-setup)。

在事件模式下创建和配置爬网程序之后，第一次网络爬取将在列表模式下通过执行 Amazon S3 或 Data Catalog 目标的完整列表来运行。第一次成功网络爬取后将使用 Amazon S3 事件，以下日志可确认网络爬取的运行：“网络爬取正在使用 Amazon S3 事件来运行。”

创建 Amazon S3 事件网络爬取并更新可能影响网络爬取的爬网程序属性后，网络爬取将在列表模式下运行，并添加以下日志：“网络爬取未在 S3 事件模式下运行”。

**注意**  
每次爬取使用的最大消息数为 10 万条。

## 注意事项和限制
<a name="s3event-crawler-limitations"></a>

在配置爬网程序使用 Amazon S3 事件通知来查找任何更改时，要考虑以下注意事项和限制事项。
+  **已删除分区的重要行为** 

  将 Amazon S3 事件爬网程序与 Data Catalog 表配合使用时：
  +  如果使用 `DeletePartition` API 调用删除分区，则还须删除该分区下的所有 S3 对象，并在配置 S3 事件通知时选择**所有对象删除事件**。如果未配置删除事件，爬网程序会在下次运行时重新创建已删除分区。
+ 无论是 Amazon S3 还是 Data Catalog 目标，爬网程序仅支持单个目标。
+ 不支持私有 VPC 上的 SQS。
+ 不支持 Amazon S3 采样。
+ 爬网程序目标应为 Amazon S3 目标的文件夹，或者 Data Catalog 目标的一个或多个 Amazon Glue Data Catalog 表。
+ 不支持“所有”路径通配符：s3://%
+ 对于 Data Catalog 目标，所有目录表都应指向 Amazon S3 事件模式的同一 Amazon S3 存储桶。
+ 对于 Data Catalog 目标，目录表不应指向 Delta Lake 格式的 Amazon S3 位置（包含 \_symlink 文件夹或检查目录表的 `InputFormat`）。

**Topics**
+ [注意事项和限制](#s3event-crawler-limitations)
+ [为 Amazon S3 事件通知设置账户](#crawler-s3-event-notifications-setup)
+ [针对 Amazon S3 目标设置 Amazon S3 事件通知的爬网程序](crawler-s3-event-notifications-setup-console-s3-target.md)
+ [为 Data Catalog 表设置 Amazon S3 事件通知的爬网程序](crawler-s3-event-notifications-setup-console-catalog-target.md)

## 为 Amazon S3 事件通知设置账户
<a name="crawler-s3-event-notifications-setup"></a>

完成以下设置任务。请注意，括号中的值引用了脚本中的可配置设置。

1. 您需要为自己的 Amazon S3 存储桶设置事件通知。

   有关更多信息，请参阅 [Amazon S3 事件通知](https://docs.amazonaws.cn/AmazonS3/latest/userguide/EventNotifications.html)。

1. 要使用基于 Amazon S3 事件的爬网程序，您应该在 Amazon S3 存储桶上启用事件通知，然后使用从与 S3 目标相同的前缀中筛选的事件，并存储在 SQS 中。您可以按照[演练：为存储桶配置通知](https://docs.amazonaws.cn/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html)中的步骤通过控制台设置 SQS 和事件通知。

1. 将以下 SQS 策略添加到爬网程序使用的角色。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "sqs:DeleteMessage",
           "sqs:GetQueueUrl",
           "sqs:ListDeadLetterSourceQueues",
           "sqs:ReceiveMessage",
           "sqs:GetQueueAttributes",
           "sqs:ListQueueTags",
           "sqs:SetQueueAttributes",
           "sqs:PurgeQueue"
         ],
         "Resource": "arn:aws:sqs:us-east-1:{{111122223333}}:cfn-sqs-queue"
       }
     ]
   }
   ```

------