使用无服务器方法将 Amazon Web Services 串在一起 - AWS Prescriptive Guidance

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

使用无服务器方法将 Amazon Web Services 串在一起

由 Aniket Braganza (AWS) 编写

环境:生产

技术:无服务器;;; CloudNative;现代化 DevelopmentAndTesting DevOps;基础架构

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

Summary

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

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

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 以编程方式访问 Amazon Web Services account。有关更多信息,请参阅:

  • AWS CDK,已安装

  • AWS CLI,已安装配置

  • Python 3.9

产品版本

  • AWS CDK 2.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

工具

Amazon Web Services

其他工具

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

  • AWS 命令行界面(AWS CLI)是一种开源工具,它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。

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

代码

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

操作说明

任务描述所需技能

克隆存储库。

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

应用程序开发人员

设置虚拟环境。

  1. 在 AWS CDK 中,运行 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 中的说明在将要部署 CloudFormation 堆栈的每个 AWS 区域中引导环境,以便部署 AWS CDK。

注意:此步骤要求您拥有具有编程访问权限的凭证。

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

部署 CloudFormation 堆栈。

运行 cdk deploy 命令构建堆栈并将其部署到 Amazon Web Services account。

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

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

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

应用程序开发人员