Amazon Web Services – 配置 Amazon S3 事件通知
Amazon S3 通知功能使您能够在存储桶内发生特定事件时接收通知。要获取通知,首先,添加一个通知配置,该配置读取您希望 Amazon S3 发布的事件以及 Amazon S3 将发送通知的目的地。此配置存储在与存储桶关联的通知子资源中。
事件通知的类型:
目前,Amazon S3 可以为以下支持的事件发布通知:
- 新对象创建事件— Amazon S3 在创建对象时发送通知。它支持多个 API 来创建对象,例如 Put、Post、Copy 和 Multipart Upload。如果任何对象创建事件发生,我们也可以使用通配符 (s3:ObjectCreated:*)。
- 对象删除事件— Amazon S3 在删除对象时发送通知。它支持两个删除选项。一种是永久删除,另一种是删除已创建标记。如果任何对象删除事件发生,我们也可以使用通配符 (s3:ObjectRemoved:*)。
- 恢复对象事件— Amazon S3 允许恢复归档到 S3 Glacier 存储类的对象。您要求在对象恢复完成后通知您。它有两种类型。第一个是已启动还原,另一个是已完成还原。如果任何对象恢复事件发生,我们也可以使用通配符 (s3:ObjectRestore:*)。
- 减少冗余存储 (RRS) 对象丢失事件— 当 Amazon S3 检测到 RRS 存储类的对象丢失时,它会通过发送消息进行通知。
- 复制事件— Amazon S3 发送两个事件通知。一,当对象超过 15 分钟阈值时对象复制失败,对象在 15 分钟阈值后复制时,以及对象不再被复制指标跟踪时。另一个当该对象复制到目标区域时。如果发生任何对象复制事件,我们还可以使用通配符 (s3:Replication:*)。
下图显示了 AWS 中可用的事件类型。
支持的目的地:
- Amazon Simple Notification Service (Amazon SNS) 主题– Amazon SNS 是一种完全托管的灵活推送消息服务。使用此服务,您可以将消息推送到移动设备、电子邮件或分布式服务。 SNS 可以发布一次消息,也可以发送一次或多次。
- Amazon Simple Queue Service (Amazon SQS) 队列– Amazon SQS 是一项可扩展且完全托管的消息队列服务。 SQS 可用于传输任何数量的数据,而无需其他服务始终可用。它用于解耦服务。
- AWS Lambda – AWS Lambda 是一种无服务器计算服务,可让您轻松构建快速响应新信息的应用程序。 AWS Lambda 运行书面代码以响应图像上传、应用内活动、网站点击或连接设备的输出等事件。
支持的目的地如下图所示。
授予将事件通知消息发布到目标的权限
要让 Amazon S3 将事件通知消息发布到目标,您必须授予 Amazon S3 委托人调用相关 API 以将消息发布到 SNS 主题、SQS 队列或 Lambda函数所需的权限。
- 授予调用 AWS Lambda函数的权限– Amazon S3 调用 Lambda函数并提供事件消息作为参数以将事件消息发布到 AWS Lambda。在 Amazon S3 控制台中将 lambda 设置为接收事件通知消息的目标时,控制台会设置 Lambda函数所需的权限,以便 Amazon S3 存储桶有权调用该函数。
- 授予将消息发布到 SNS 主题或 SQS 队列的权限 –要授予 Amazon S3 存储桶权限以将消息发布到 SNS 主题或 SQS 队列,您将 AWS Identity and Access Management (IAM) 策略附加到目标 SNS 主题或 SQS队列。该策略采用 JSON 格式。 SNS 主题策略和 SQS 策略示例如下:
SNS 策略示例:
{
"Version": "2012-10-17",
"Id": "SNS Topic Policy",
"Statement": [
{
"Sid": "Geeksforgeeks SNS",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:Region:amazon-account-id:geeksforgeeksSNS",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::geeksforgeeks" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}
SQS 策略示例:
{
"Version": "2012-10-17",
"Id": "SQS Policy",
"Statement": [
{
"Sid": "Geeksforgeeks SQS",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "arn:aws:sqs:Region:amazon-account-id:geeksforgeeksSQS",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:geeksforgeeks" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}
启用事件通知:
启用通知是存储桶级别的操作。您将通知配置信息存储在与存储桶关联的事件通知子资源中。
事件通知可以通过两种方式设置:
- Amazon S3 控制台 –您可以简单地选择要接收任何类型活动消息的存储桶。直接到存储桶的属性选项卡,您可以在事件通知部分设置通知。
- 以编程方式使用 AWS 开发工具包 – Amazon S3 将通知配置作为 XML 存储在与存储桶关联的通知子资源中。