将 Lambda 函数,以接收来自不同 Amazon Web Services Region 中的 S3 存储桶的事件通知 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Lambda 函数,以接收来自不同 Amazon Web Services Region 中的 S3 存储桶的事件通知

创建者:Suresh Konathala (AWS) 和 Arindom Sarkar (AWS)

环境:生产

技术:分析

Amazon Web Services:AWS Lambda;Amazon S3;Amazon SNS;Amazon SQS

总结

Amazon Simple Storage Service (Amazon S3) 事件通知会针对您的 S3 存储桶中的某些事件(例如,对象创建事件、对象移除事件或恢复对象事件)发布通知。您可使用 AWS Lambda 函数根据应用程序的要求处理这些通知。但是,Lambda 函数无法直接订阅来自不同 Amazon Web Services Region 托管的 S3 存储桶的通知。

这种模式的方法通过为每个区域使用 Amazon Simple Notification Service (Amazon SNS)主题,部署扇出场景来处理来自跨区域 S3 存储桶的 Amazon S3 通知。这些区域 SNS 主题将 Amazon S3 事件通知发送到也包含您的 Lambda 函数的中央区域中的 Amazon Simple Queue Service (Amazon SQS) 队列。Lambda 函数订阅此 SQS 队列,并根据您组织的要求处理事件通知。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account。

  • 多个区域中的现有 S3 存储桶,包括用于托管 Amazon SQS 队列和 Lambda 函数的中央区域。

  • 已安装和配置 AWS 命令行界面(AWS CLI)。有关这方面的更多信息,请参阅 AWS CLI 文档中的安装、更新和卸载 AWS CLI。 

  • 熟悉 Amazon SNS 的扇出场景。有关这方面的更多信息,请参阅 Amazon SNS 文档中的常见 Amazon SNS 场景

架构

下图显示了此模式方法的架构。 

图表显示了以下工作流:

  1. Amazon S3 向同一区域的 SNS 主题发送有关 S3 存储桶(例如,已创建对象、删除对象或恢复对象)的事件通知。

  2. SNS 主题将事件发布到中央区域的 SQS 队列。

  3. SQS 队列配置为 Lambda 函数的事件源,并缓冲 Lambda 函数的事件消息。 

  4. Lambda 函数轮询 SQS 队列中的消息,并根据您的应用程序的要求处理 Amazon S3 事件通知。

技术堆栈

  • Lambda

  • Amazon SNS

  • Amazon SQS

  • Amazon S3

工具

  • AWS CLI – AWS 命令行界面(AWS CLI)是一种开源工具,用于通过命令行 Shell 中的命令与 Amazon Web Services 交互。仅需最少的配置,即可使用 AWS CLI 开始运行命令,以便从终端程序中的命令提示符实现与基于浏览器的 Amazon Web Services Management Console 所提供的功能等同的功能。

  • AWS CloudFormation — AWS CloudFormation 可帮助您建模和设置 AWS 资源,快速一致地配置这些资源,并在资源的整个生命周期中对其进行管理。您可以使用模板来描述资源及其依赖关系,然后将它们作为堆栈一起启动和配置,而不必单独管理资源。您可以跨多个 Amazon Web Services account 和 Amazon Web Services Region 管理和预置堆栈。

  • AWS Lambda – AWS Lambda 是一项计算服务,支持无需预置或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩展,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 - 代码未运行时不产生费用。

  • Amazon SNS – Amazon Simple Notification Service (Amazon SNS) 可协调和管理发布者和客户端之间消息的传送或发送,包括 Web 服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息,并且一个主题的所有订阅用户收到的消息都相同。

  • Amazon SQS – Amazon Simple Queue Service (Amazon SQS) 提供了一个安全、持久且可用的托管队列,以允许您集成和分离分布式软件系统与组件。Amazon SQS 支持标准队列和 FIFO 队列。

操作说明

任务描述所需技能
使用 Lambda 触发器创建 SQS 队列。

登录 Amazon Web Services Management Console,按照 AWS Lambda 文档中的将 Lambda 与 Amazon SQS 结合使用教程中的说明在您的中央区域创建以下资源:

  • Lambda 执行角色

  • 用于处理 Amazon S3 事件的 Lambda 函数

  • SQS 队列

注意:确保将 SQS 队列配置为您的 Lambda 函数的事件源。

AWS DevOps,云架构师
任务描述所需技能
创建 SNS 主题以接收 Amazon S3 事件通知。

在您想要接收 Amazon S3 事件通知的区域中创建 SNS 主题。有关这方面的更多信息,请参阅 Amazon SNS 文档中的创建 SNS 主题。 

重要提示:请务必记录您的 SNS 主题的 Amazon 资源名称(ARN)。 

AWS DevOps,云架构师
为中央 SQS 队列订阅 SNS 主题。

为您的中央区域托管的 SQS 队列订阅您的 SNS 主题。有关这方面的更多信息,请参阅 Amazon SNS 文档中的订阅 SNS 主题

AWS DevOps,云架构师
更新 SNS 主题访问策略。
  1. 打开 Amazon SNS 控制台上,选择主题,然后选择您之前创建的 SNS 主题。

  2. 选择编辑,然后展开访问策略 - 可选部分。

  3. 将以下访问策略附加至您的 SNS 主题,以允许对 Amazon S3 使用 sns:publish权限,然后选择保存

{ "Version": "2012-10-17", "Statement": [ { "Sid": "0", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-west-2::s3Events-SNSTopic-us-west-2" } ] }
AWS DevOps,云架构师
为区域中的每个 S3 存储桶设置通知。

为区域中的每个 S3 存储桶设置事件通知。有关这方面的更多信息,请参阅 Amazon S3 文档中的使用 Amazon S3 控制台启用和配置事件通知

注意:在目标部分中,选择 SNS 主题,并指定您之前创建的 SNS 主题的 ARN。

AWS DevOps,云架构师
在所有必需的区域重复此操作说明。

重要提示:针对您希望从中接收 Amazon S3 事件通知的每个区域(包括您的中央区域)重复此操作说明中的任务。

AWS DevOps,云架构师

相关资源