使用无服务器方法将AWS服务链接在一起 - AWS Prescriptive Guidance

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

使用无服务器方法将AWS服务链接在一起

由 Aniket Braganza 创作 () AWS

摘要

此模式演示了一种可扩展的无服务器方法,通过链接亚马逊简单存储服务 (Amazon S3)、亚马逊简单通知服务 (Amazon)、亚马逊简单队列服务 (AmazonSNS) 和 Lambda 来处理上传的文件。SQS AWS上传的文件示例用于演示目的。您可以使用无服务器方法通过链接实现业务目标所需的AWS服务组合来完成其他任务。无服务器方法采用异步工作流,该工作流依赖于事件驱动的通知、弹性存储和函数即服务(FaaS)计算来处理请求。您可以使用无服务器方法进行扩展以满足需求,同时最大限度地降低成本。

注意

通过无服务器方法将AWS服务链接到一起,有多种选择。例如,您可以使用将 Lambda 与 Amazon S3 相结合的方法,而不是亚马逊和SNS亚马逊。SQS但是,这种模式使用 Amazon SNS 和 Amazon,SQS因为这种方法可以在事件通知期间向 Lambda 调用流程中添加多个集成点,并扩展实现范围,在无服务器编排中包括多个侦听器,同时最大限度地减少处理开销。

先决条件和限制

先决条件

产品版本

  • AWSCDK2.x

  • Python 3.9

架构

下图说明了链式AWS服务如何使用户能够将文件上传到 S3 存储桶进行处理。

使用链式AWS服务将文件上传到 S3 存储桶的工作流程。

图表显示了以下工作流:

  1. 用户将文件上传到 S3 存储桶。

  2. 上传会启动 S3 事件,该事件会向SNS主题发布消息。此消息包含 S3 事件的详细信息。

  3. 发布到该SNS主题的消息将插入到队列中,该SQS队列已订阅并接收有关该主题的通知。

  4. Lambda 函数轮询SQS队列(作为其事件源)并等待消息处理。

  5. 当 Lambda 函数收到来自SQS队列的消息时,它会处理这些消息并确认收到这些消息。

  6. 如果消息未由 Lambda 处理,则该消息将返回到SQS队列并最终传输到SQS死信队列。

技术堆栈

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

  • AWS Lambda

工具

AWS 服务

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

  • 亚马逊简单通知服务 (AmazonSNS) 可帮助您协调和管理发布者与客户之间的消息交换,包括网络服务器和电子邮件地址。

  • Amazon Simple Queue Service (AmazonSQS) 提供安全、耐用且可用的托管队列,可帮助您集成和分离分布式软件系统和组件。

  • AWSLambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

其他工具

  • AWSCloud Development Kit (AWSCDK) 是与你的AWSCDK应用程序交互的主要工具。它执行您的应用程序,查询您定义的应用程序模型,并生成和部署由生成的AWS CloudFormation 模板。AWS CDK

  • AWSCommand Line Interface (AWSCLI) 是一个开源工具,可帮助您通过命令行外壳中的命令与AWS服务进行交互。

  • Python 是一种高级解释型通用编程语言。

代码

此模式的代码可在将 S3 GitHub 链接到 Lambda 存储SNS库SQS中找到

操作说明

任务描述所需技能

克隆存储库。

克隆存储库,然后导航到 python/s3-sns-sqs-lambda-chain 文件夹。

应用程序开发人员

设置虚拟环境。

  1. 在中 AWSCDK,运行python3 -m venv .venv命令。

  2. 在 MacOS/Linux 上运行 source .venv/bin/activate 命令,或在 Windows 上运行 .venv\Scripts\activate.bat

应用程序开发人员

安装依赖项。

运行 pip install -r requirements.txt命令。

应用程序开发人员
任务描述所需技能

运行单元测试。

  1. 运行 pip install -r requirements-dev.txt命令。

  2. 重要

    (可选)运行cdk synth --no-staging > template.yml命令以生成 CloudFormation 堆栈。您可以检查堆栈,但要避免生成暂存的资源和工件。

  3. 运行 pytest 命令以运行所有单元测试。

  4. (可选)运行 pytest tests/unit/<test_filename> 命令对特定文件运行测试。

应用程序开发人员、测试工程师
任务描述所需技能

设置引导环境。

按照AWS文档中 Bootstrapping 中的说明引导环境,以便在要AWSCDK部署 CloudFormation 堆栈的每个AWS区域进行部署。

注意

此步骤要求您拥有具有编程访问权限的证书。

应用程序开发人员、 DevOps 工程师、数据工程师

部署 CloudFormation 堆栈。

运行cdk deploy命令以构建堆栈并将其部署到AWS账户。

应用程序开发人员、 DevOps 工程师、AWS DevOps
任务描述所需技能

删除 CloudFormation 堆栈并移除关联的资源。

要删除已创建的 CloudFormation 堆栈并移除所有关联的资源,请运行 de run cdk stroy 命令。

应用程序开发人员