亚马逊AWS官方博客
推出 Bob’s Used Books – 一个全新的真实 .NET 示例应用程序
今天,我很高兴宣布推出一个新的开源示例应用程序,这是一个虚构的二手书电子商务商店,我们称之为 Bob’s Used Books,可供使用 AWS 的 .NET 开发人员使用。AWS 的 .NET 宣传和开发团队定期与客户交谈,在对话期间,他们经常会收到索要更深入示例的请求。客户告诉我们,虽然小代码片段可以很好地说明 API 的机制,但他们的开发团队也需要并希望利用更完整、更真实的示例,以便更好地了解如何为云构造现代应用程序。今天发布的示例应用程序是对这些请求的回应。
Bob’s Used Books 是使用 ASP.NET Core 版本 6 构建的示例电子商务应用程序,代表了对典型本地自定义应用程序的初始现代化改造。该应用程序使用现代化的跨平台 .NET,使其能够在云端的 Windows 和 Linux 系统上运行,这是现代化的第一阶段。这是许多 .NET 开发人员正在经历的典型情况,他们使用 AWS 提供的免费工具(例如,Toolkit for .NET Refactoring 和 Porting Assistant for .NET),将自己的应用程序从 .NET Framework 移植到 .NET。
示例应用程序功能
我们虚构书店的客户可以在商店中浏览和搜索二手书,并查看所选图书的详细信息,例如价格、状况、类型等:
就像真正的电子商务商店一样,客户可以将图书添加到购物车、等待后续结账或个人愿望清单。到了购买时,客户可以开始结账流程,如果他们是现有客户,这将鼓励他们登录,如果不是,在此过程中会鼓励他们注册。
在此示例应用程序中,书店的工作人员使用相同的 Web 应用程序来管理库存和客户订单。基于角色的身份验证用于确定是员工登录(在这种情况下,他们可以查看管理门户)还是普通商店客户。对于访问管理门户的员工,他们从控制面板视图开始,该视图汇总了待处理、处理中或已完成的订单以及商店的库存状态:
员工可以编辑库存以添加新图书、填写封面图片或调整库存量。在同一个控制面板上,员工还可以查看和处理待处理的订单。
这里没有显示,但我认为很酷的是一个模拟的工作流,客户可以通过商店转售他们的图书。整个流程包括客户提交申请,商店管理员评估并决定是否从客户那里购买,如果被接受,客户将该书“发布”到商店,最后管理员将图书添加到库存中并向客户退款。请记住,这都是虚构的,没有发生任何实际的金融交易!
应用程序架构
书店示例最初并不是基于 .NET Framework 的应用程序,需要移植到 .NET,但确实使用了整体式 MVC(模型-视图-控制器)应用程序设计,这是 .NET Framework 开发时代的典型特征(至今仍在使用)。还使用单个 Microsoft SQL Server 数据库来包含库存、购物车、用户数据等。
完全部署到 AWS 后,该应用程序将使用多项服务。这些服务为托管应用程序提供资源,为正在运行的应用程序提供配置,还为正在运行的代码提供有用的功能,例如图片验证:
- Amazon Cognito – 用于客户和书店员工的身份验证。该应用程序使用 Cognito 的托管用户界面提供登录和注册功能。
- Amazon Relational Database Service(RDS) – 管理单个 Microsoft SQL Server Express 实例,其中包含电子商务应用程序的库存、客户和其他典型数据。
- Amazon Simple Storage Service(Amazon S3) – S3 桶用于存储图书的封面图片。
- AWS Systems Manager Parameter Store – 包含运行时系统配置数据,包括封面图片的 S3 桶的名称和 Cognito 用户群体的详细信息。
- AWS Secrets Manager – 保存RDS 中底层 SQL Server 数据库的用户和密码详细信息。
- Amazon CloudFront – 提供一个用于访问 S3 桶中封面图片的域,这意味着该桶无需公开可用。
- Amazon Rekognition – 用于验证为图书上传的封面图片不包含令人反感的内容。
该应用程序是展示未来进一步现代化机会的起点,例如采用专用数据库而不是使用单一的关系数据库,分解整体以使用微服务(对于后者,AWS 提供 Microservice Extractor for .NET)等等。AWS 的 .NET 开发、宣传和解决方案架构师团队对有机会发布新内容感到非常兴奋,他们使用此示例来说明未来几个月的这些现代化机遇。而且,由于该示例是开源的,因此我们也有兴趣了解 .NET 开发社区对现代化的看法。
运行应用程序
我的同事 Brad Webber 是 AWS 的 Solutions Architect,他撰写了我们将要发布的有关该示例的一系列技术博客文章中的第一篇。您可以在新的 .NET on AWS Blog 频道找到这些内容。在他的第一篇文章中,您将详细了解如何在自己的计算机上运行或调试应用程序,以及如何将其完全部署到 AWS Cloud 中。
在云外运行时,该应用程序使用 SQL Server Express localdb 实例来满足其数据库需求,这意味着您目前确实需要使用 Windows 计算机来运行或调试。可从 Visual Studio、Visual Studio Code 或 JetBrains Rider(全部在 Windows 上)访问的启动配置文件用于选择应用程序的运行方式(例如,在没有或只有部分云资源的情况下):
- 本地 – 当您选择此启动配置文件时,应用程序将完全在您的计算机上运行,不使用任何云资源,也不需要 AWS 账户。这使您能够调查和试验代码,而无需为云资源付费。
- 集成 – 当您使用此配置文件时,应用程序仍会在 Windows 计算机上本地运行并继续使用 localdb 数据库实例,但现在还会使用一些 AWS 资源,例如 S3 桶、Rekognition、Cognito 等。此配置文件使您能够了解如何在应用程序代码中使用 AWS 服务,使用适用于 .NET 的 AWS SDK 和我们在 NuGet 上分发的各种扩展库(有关开发应用程序时可以使用的所有可用库的完整列表,请参阅 GitHub 上 AWS 存储库上的 .NET)。为了使您能够在使用此配置文件时设置应用程序所需的云资源,示例存储库中提供了 AWS Cloud Development Kit(AWS CDK)项目,使您可以轻松地按需设置和拆除这些资源。
将示例部署到 AWS
您还可以使用 Amazon Relational Database Service(RDS)中的 SQL Server Express 数据库实例,将整个应用程序部署到 AWS Cloud,在本例中为 Amazon Elastic Compute Cloud(Amazon EC2)中的虚拟机。部署使用与 AWS Free Tier 兼容的资源,但请注意,如果您超过 Free Tier 限制,仍可能产生费用。与在自己的计算机上运行应用程序(由于依赖 localdb 而需要 Windows)不同,您可以从任何计算机(包括运行 macOS 和 Linux 的计算机)将应用程序部署到 AWS。另外,存储库中包含一个 CDK 项目,可以帮助您入门,Brad 的博客文章更详细地介绍了这些步骤,因此我就不在这里赘述了。
在云中使用虚拟机通常是实现本地应用程序现代化的第一步,因为其设置与本地服务器相似,因此支持开箱即用的 Amazon EC2 部署。将来,我们将添加显示如何将应用程序部署到 AWS 上的容器服务的内容,例如 AWS App Runner、Amazon Elastic Container Service(Amazon ECS)和 Amazon Elastic Kubernetes Service(EKS)。
后续步骤
Bob’s Used Books 示例应用程序现已在 GitHub 上可用。如果您是使用 AWS 的 .NET 开发人员,并且正在寻找更深入、更真实的示例,我们鼓励您克隆存储库并试用应用程序。我们还很好奇您会决定使用该应用程序踏上什么现代化之旅,这将有助于我们为示例创建未来的内容。请在存储库的问题部分告诉我们。如果您想为示例做出贡献,我们非常欢迎!