使用 DevOps 实践和 AWS Cloud9 构建具有微服务的松散耦合架构 - AWS Prescriptive Guidance

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

使用 DevOps 实践和 AWS Cloud9 构建具有微服务的松散耦合架构

创建者:Alexandre Nardi (AWS)

环境:PoC 或试点

技术: DevOps;无服务器;Web 和移动应用程序;数据库

AWS 服务:AWS Cloud9;AWS;AWS;AW CloudFormation S CodePipeline;亚马逊 DynamoDB;AWS CodeCommit

Summary

此模式演示了如何在无服务器架构中开发典型的 Web 应用程序,适用于开始在 Amazon Web Services (AWS) 上测试 DevOps 实践的开发人员和开发主管。它构建了一个示例应用程序,创建用于浏览和购买书籍的店面和后端,并提供可独立开发的微服务。该模式使用AWS Cloud9作为开发环境,使用亚马逊DynamoDB数据库作为数据存储,使用AWS和AWS等AWS服务作为持续集成 CodePipeline 和持续部署 (CI/CD) 功能。 CodeBuild

此模式将引导您完成以下开发活动: 

  • 创建标准 AWS Cloud9 开发环境

  • 使用 AWS CloudFormation 模板创建 Web 应用程序和图书微服务

  • 使用 AWS Cloud9 修改前端、提交更改与测试更改

  • 创建并测试微服务的 CI/CD 管线

  • 自动化单元测试

此模式的代码在 GitHub AWS DevOps 端到端研讨会存储库中提供。

先决条件和限制

先决条件

重要提示:在您的 Amazon Web Services account 中构建此演示应用程序会创建和消耗 AWS 资源。您负责用于创建和运行应用程序的 Amazon Web Services 和资源的成本。完成工作后,请务必删除所有资源以避免持续产生费用。有关清理说明,请参阅操作说明部分。 

限制

本演练仅用于演示和开发之目的。要在生产环境中使用它,请参阅 AWS Identity and Access Management (IAM) 文档中的安全最佳实践,并对 IAM 角色、Amazon DynamoDB 和其他服务进行必要更改。Web 应用程序源自 AWS 书店演示应用程序,有关其他注意事项,请参阅自述文件的已知限制部分。

架构

书店应用程序的架构在 AWS 书店演示应用程序的自述文件的架构部分进行了说明。 

从部署的角度来看,Bookstore Demo App 使用单个 CloudFormation 模板将所有服务和对象部署到一个堆栈中。此模式进行了一些更改,以演示特定开发人员或团队如何在特定产品(书籍)中工作,并独立于应用程序的其余部分进行更新。因此,此模式的代码将 Books 微服务的 AWS Lambda 函数和相关对象分离到 CloudFormation 第二个模板中,该模板创建了 Books 堆栈。这使得可以看到使用 CI/CD 实践更新微服务。在下图中,虚线边框标识了书籍微服务。

工具

工具

  • 用于测试的 Jest 框架 JavaScript

  • Python 3.9

代码

此模式的源代码和模板可在 GitHub AWS DevOps 端到端研讨会存储库中找到。在按操作说明部分中的步骤进行操作之前,请将存储库中的所有文件下载到您的计算机上。

注意:操作说明部分提供了本演练的高级步骤,为您提供有关该过程的一般信息。要完成每个步骤,请参阅 AWS DevOps 端到端研讨会存储库中的自述文件,了解详细说明。

AWS DevOps 端到端研讨会存储库扩展了 AWS Bookstore 演示应用程序存储库,并使用 AWS Cloud9 Bootstrapping 代码的修改版本创建 AWS Cloud9 IDE。

最佳实践

使用书店应用程序非常简单。以下是部分推荐的最佳实践:

  • 安装应用程序时,为方便起见,您可使用自己选择的项目名称或使用默认名称 (demobookstore)。

  • 在应用程序启动并运行后,如果您想继续测试一天,最好关闭 Amazon Neptune 数据库,因为数据库实例可能会产生额外费用。但请注意,数据库将在 7 天后自动启动。

  • 有关代码的详细信息,请参阅 AWS 书店演示应用程序存储库的文档。它描述了每个微服务和表。

  • 有关其他最佳实践,请参阅 “如果有时间,请查看一些挑战... AWS DevOps 端到端研讨会存储库中自述文件的一部分。我们建议您查看这些信息,深入了解其他安全功能并实践解耦服务。

操作说明

任务描述所需技能

从中下载源代码 GitHub。

此模式的源代码和模板可在 GitHub AWS DevOps 端到端研讨会存储库中找到。在按操作说明部分中的后续步骤进行操作之前,请将存储库中的所有文件下载到您的计算机上。

注意:操作说明部分提供了本演练的高级步骤,为您提供有关该过程的一般信息。要完成每个步骤,请参阅 AWS DevOps 端到端研讨会存储库中的自述文件,了解详细说明。

AWS DevOps 端到端研讨会存储库扩展了 AWS Bookstore 演示应用程序存储库,并使用 AWS Cloud9 Bootstrapping 代码的修改版本创建 AWS Cloud9 IDE。

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

为书店应用程序创建前端和 Lambda 函数。

  1. 登录CloudFormation 控制台,部署DemoBookstoreMainTemplate.yml模板以创建 DemoBookStoreStack 堆栈。这将创建书籍微服务外部的前端和 Lambda 函数。

  2. 在堆栈的 “输出” 选项卡中,记下WebApplication标签下的网站网址。

开发人员

创建书籍微服务。

CloudFormation 控制台上,部署DemoBookstoreBooksServiceTemplate.yml模板以创建 DemoBooksServiceStack 堆栈。

开发人员

测试您的应用程序。

使用 DemoBookStoreStack 堆栈中的网站 URL 访问书店应用程序。

开发人员
任务描述所需技能

创建 AWS Cloud9 IDE。

CloudFormation 控制台上,部署C9EnvironmentTemplate.yml模板以创建 AWS Cloud9 环境。

开发人员、开发人员主管

创建 CodeCommit 存储库。

  1. 登录 AWS CodeCommit 控制台,确认您有demobookstore-WebAssets存储库,其中包含前端应用程序的代码。

  2. 为书籍微服务创建名为 demobookstore-BooksService的存储库。

  3. 使用 git clone命令克隆 AWS Cloud9 中的两个存储库(demobookstore-WebAssetsdemobookstore-BooksService)。

开发人员

更改前端代码并检查管线。

  1. 使用 AWS Cloud9 在网页上进行部分代码更改。这将更新 demobookstore-WebAssets存储库。

  2. AWS CodePipeline 控制台上,验证 DemobookStore-assets- Pipeline 是否正在运行。 

  3. 通过浏览器刷新 Web 应用程序来测试它(在 Firefox 上为 Ctrl+F5)。

开发人员
任务描述所需技能

为内部版本和服务更新添加 YAML 文件。

  1. 在 AWS Cloud9,上传 buildspec.ymlDemoBookstoreBooksServiceUpdateTemplate.yml 文件。

    • buildspec.yml 有构建说明,还包括自动测试的测试说明。此时将对它们进行注释,稍后将使用它们。

    • DemoBookstoreBooksServiceUpdateTemplate.ymlDemoBookstoreBooksServiceTemplate.yml的一个更新版本,将在管线的部署阶段使用。

  2. 提交并推送文件。

开发人员

为构建管线创建 S3 存储桶。

要创建 S3 存储桶,请按照 Amazon S3 文档中的说明进行操作。

  • 存储桶名称必须全局唯一;例如,demobookstore-books-service-pipeline-bucket-<YYYYMMDDHHMM>。 

  • 清除阻止所有公有访问复选框,然后选中我确认...复选框。

开发人员

使用 IAM 创建用于 CloudFormation 部署的角色。

创建一个 demobookstore-CloudFormation-role角色并附加到 AdministratorAccess策略。在下一个操作说明中,您可以重新配置这个角色以获得最低权限。

开发人员

创建一个新管线,以自动构建和部署书籍微服务。

如自述文件中所述,创建包含提交、生成和部署阶段的BooksService管道(例如 demobookstore-- Pipeline)。

开发人员

在 AWS Cloud9 中测试您的微服务。

ListBooks函数进行更改,然后查看管道是否正常运行。

开发人员

自动执行 ListBooks Lambda 函数的单元测试。

在 AWS Cloud9 IDE,启用内部版本以运行单元测试并检查测试结果。有关说明,请参阅自述文件

开发人员
任务描述所需技能

确保您的解决方案安全。

配置 demobookstore-CloudFormation-role为具有最低权限,并同时检查其他使用的角色。

开发人员

消除 CloudFormation 模板中的依赖关系。

DemoBookstoreMainTemplate.yml 模板和 DemoBookstoreBooksServiceTemplate.yml模板之间交换信息的方法基于输出和导入。在这两个模板之间传递值会增加依赖项。要消除依赖项,请考虑使用 AWS Systems Manager Parameter Store

开发人员

创建购物车微服务。

以书籍微服务为例,从 DemoBookstoreMainTemplate.yml模板中删除与购物车相关的功能并创建购物车微服务。

开发人员
任务描述所需技能

删除 S3 存储桶。

Amazon S3 控制台上,删除与示例 Web 应用程序关联的以下存储桶:

  • 为 AWS 书店演示应用程序创建的两个存储桶。存储桶名称以您在创建前端 CloudFormation 时为 AWS 提供的堆栈名称开头;例如,。DemoBookStoreStack

  • <YYYYMMDDHHMM>一个存储桶用于生成管道;例如,demobookstore-books-service-pipeline-bucket-

开发人员

删除堆栈。

CloudFormation 控制台上,删除与示例 Web 应用程序关联的堆栈:

  • DemoBooksServiceStack

  • DemoBookStoreStack

移除可能需要 90 多分钟。如果删除失败,请再次将其删除,并根据通知删除所有手动资源(例如 VPC 或网络接口)。

开发人员

删除 IAM 角色。

IAM 控制台上,删除以下角色:

  • demobookstore-Cloudformation-role

  • demobookstore-BooksService-BuildProject-service-role

有关 step-by-step 说明,请参阅 I AM 文档。 

开发人员

相关资源

其他信息

有关详细 step-by-step 说明,请参阅 AWS DevOps 端到端研讨会 GitHub 存储库中的自述文件

关于 2023 年 5 月的更新:此模式已更新为使用较新版本的 Node 和 Python。我们更新了源代码中的多个程序包,并删除了 Glyphicon,因为它不再是免费的。我们还删除了对 AWS 书店演示应用程序存储库的所有依赖关系,因此这两个存储库现在可以独立发展。