Bob 的二手书:.NET 示例应用程序 — 第 1 部分:入门

作者:布拉德·韦伯 | 202

简介

最好的示例应用程序易于理解,但具有足够的复杂性来演示实际用法。我们新的开源.NET 示例应用程序 Bob's Used Books 为.NET 社区提供了一个利用多个 亚马逊云科技 框架和服务的简单但真实的.NET 应用程序。

Bob's 二手书是一个简单的电子商务应用程序,用于销售虚构的二手书。该应用程序由管理门户和客户门户组成。应用程序管理员使用管理门户来管理订单和库存等内容。客户使用客户门户网站搜索和购买图书。客户还可以通过该应用程序出售自己的图书。Bob 的二手书利用了多项 亚马逊云科技 服务,包括:

  • 亚马逊 Cognito
  • 亚马逊 S3
  • 亚马逊系统管理器参数存储
  • 亚马逊密钥管理器
  • 适用于 SQL 服务器的亚马逊 RD
  • 亚马逊 CloudFront

Bob 的二手书还为未来的博客、研讨会和有关.NET 工作负载现代化的指导提供了起点。每个.NET 现代化演示都将介绍该特定现代化之旅的内容、原因和方式。

这是深入探讨鲍勃二手书实施情况的一系列博客文章中的第一篇。在这篇文章中,我将介绍如何尽快启动并运行 Bob 的二手书,并探索可用的不同调试和部署模式。在下一篇文章中,我将讨论应用程序架构,并重点介绍构建应用程序时的一些决策和惯例。

Bob 的二手书入门

在这个博客系列中将分享很多有趣和有用的信息,但是如果你只想尽快启动并运行,那么你需要做的是:

  1. 在 Windows 计算机上,从 https://github.com/aws-samples/bobs-used-bookstore-sample 下载源代码或克隆 GitHub 存储库。
  2. 在支持 .NET 6.0(即 Visual Studio 2022 或 JetBrains Rider )的 IDE 中打开解决方案(bobsBookstore.sln )。
  3. 确保安装了 SQL Server Express LocalDB (默认情况下它是使用 Visual Studio 安装的)。
  4. Bookstore.Web 项目设置为启动项目。
  5. 选择 本地 启动配置文件,然后按 F5

就是这样!应用程序将启动,你可以在本地开发计算机上调试应用程序。使用本地启动配置文件时,应用程序完全在您的本地计算机上运行,不会调用 亚马逊云科技 或使用 亚马逊云科技 资源。

The Bookstore.Web project is set as the startup project and Local Debugging is selected.

图 1 — 选择 “本地调试” 并将 Bookstore.Web 设置为启动项目

调试和运行 Bob 的二手书

当我们着手制作 Bob's 二手书时,我们的目标之一是提供卓越的开发者体验。它应该易于理解,应该易于调试,并且应该易于部署。 考虑到这一点,有三种方法可以调试和运行 Bob 的二手书店: 本地调试 和 集成 调试 ,即在 Bookstor e.web/Properties/launchSettings.json 中定义的启动配置文件,以及在 Bookstore. Cdk 项目中实现的完全部署。 每种服务在应用程序使用的 亚马逊云科技 服务和资源数量上都不同。

本地调试

本地调试配置文件是开始使用 Bob 的二手书的最快、最简单的方法(如上文 Bob 的二手书 入门 中所述 )。本地调试不需要 亚马逊云科技 账户,也不使用 亚马逊云科技 服务或资源。亚马逊云科技 服务与模拟或本地实现互换。例如,Bob's 二手书通常会使用亚马逊 S3 来存储图书图片,但在本地调试期间,它却交换了亚马逊 S3 服务实现(Bookstore.data/Fileservices/s3Fileservice),而是使用本地文件服务实现(bookstore.data/Fileservices/localFileService)。

我们预计,本地调试将是开发人员与 Bob 的二手书进行交互的初始方式。它使开发人员能够快速轻松地启动应用程序,查看其运行情况,并检查通常用于与 亚马逊云科技 特定服务交互的代码,而无需预置这些云资源。但是,在某些时候,大多数开发人员会希望逐步完成与 亚马逊云科技 交互的代码。这就是集成调试的用武之地。

集成调试

当您准备好对照真实的 亚马逊云科技 服务调试 Bob 的二手书时,您可以使用集成调试启动配置文件。您可以将集成调试视为本地调试和全面部署到 亚马逊云科技 之间的中间地带。通过集成调试,您可以将 Bob's Used Books 在全面部署中使用的一些 亚马逊云科技 资源预置到云端,但该应用程序仍在您的开发计算机上本地运行。您可以采用与本地调试完全相同的方式调试应用程序,但是现在您可以看到应用程序与 亚马逊云科技 服务直接交互。

在使用集成调试之前,您需要预置少量 亚马逊云科技 资源。 Bookstore.Cdk 项目使用 亚马逊云科技 云开发套件 (CDK) 来预置这些资源。CDK 项目还可以将应用程序完全部署到 亚马逊云科技,我稍后将对此进行讨论。

亚马逊云科技 CDK 使我们能够用 C# 定义 亚马逊云科技 服务和资源,然后在准备就绪时预置这些 亚马逊云科技 资源。这通常被称为基础设施即代码 (IaC)。

要使用 CDK 预置 亚马逊云科技 资源,您需要执行以下操作:

  • 安装最新的长期支持 (LTS) 版本的 Node.js
  • 如果您还没有 亚马逊云科技 账户,请创建 一个
  • 按照《亚马逊云科技 CDK 入门指南》中的 “ 使用 亚马逊云科技 进行 身份验证 ” 部分配置 CDK 身份验证
  • 打开命令行外壳并运行以下命令来安装 亚马逊云科技 CDK:npm install-g aws-cdk

首次使用 亚马逊云科技 CDK 在您的 亚马逊云科技 账户中预置服务时,您需要 启动 该账户 。打开命令行外壳并导航到应用程序解决方案文件夹(这是包含 BobsBookstore.sln 的文件夹)。运行以下命令:

cdk bootstrap

亚马逊云科技 CDK 完成账户的引导后,您就可以预置支持集成调试所需的 亚马逊云科技 资源了。运行以下命令:

cdk deploy BobsBookstoreCore --require-approval "never"

—require-approvalog “从不” 参数告诉 亚马逊云科技 CDK 自动批准对您的 亚马逊云科技 账户进行的所有修改,而不是提示您批准,即使是影响权限和访问权限的修改也是如此。就本示例应用程序而言,这种便利性是可以接受的,但您应仔细考虑它是否适用于其他 亚马逊云科技 CDK 部署。

上面的 CDK 命令假设您的 亚马逊云科技 凭证配置文件被命名为默认。如果您没有使用该名称的凭证配置文件,或者希望使用其他凭证配置文件,请添加 —profile 参数,然后添加证书配置文件的名称。例如, cdk 部署 bobsBook storeCore--profile my-profile。 请注意,应将所选配置文件配置为设置目标区域。有关更多详细信息,请参阅 配置和凭证文件设置 。包含区域配置的凭证配置文件示例如下所示。

[my-profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region=us-west-2

这告诉 亚马逊云科技 CDK 部署 bobsBookstore Core CloudFormation St ack,该 堆栈描述了需要预配置的 亚马逊云科技 资源。完成配置大约需要 5 分钟。

现在,您所需要做的就是选择集成启动配置文件,然后开始使用真实的 亚马逊云科技 资源进行调试!

Integrated Debugging is selected.

图 2 — 选择集成调试

Bob 的二手书使用 亚马逊 Cognito 进行身份管理。首次登录带有集成调试功能的 Bob's 二手书时,需要更新管理员密码。在应用程序中, 从应用程序工具栏中选择 登录

Bob's Used Books customer portal homepage

图 3 — Bob 的二手书客户门户主页

使用 管理员 输入用户 名并使用 P @ssword1 输入密码登录。

The Amazon Cognito Hosted UI sign in form.

图 4 — 亚马逊 Cognito 托管的登录用户界面

然后,系统将提示您创建新密码并提供一些其他详细信息。

The Amazon Cognito Host UI Change Password form.

图 5 — 亚马逊 Cognito 更改密码托管用户界面

仅此而已!您已登录应用程序并进入客户门户主页。管理员用户属于 管理员 群组,这意味着您可以通过页面右上角的管理员门户和客户门 户 链接在 管理 门户 和 客户门户 之间导航。

Bob's Used Books customer portal authenticated homepage.

图 6 — Bob 的二手书经过身份验证的客户门户主页

该应用程序支持自注册。当用户注册 Bob's 二手书时,他们被授予访问客户门户的权限,但不能访问管理员门户。无法通过自注册添加管理员,他们必须直接添加到应用程序的 Cognito 用户池中。

全面部署

调试在本地运行的应用程序是一项重要功能,但在某些时候您需要将该应用程序部署到生产环境中。将 Bob's 二手书部署到 亚马逊云科技 的过程与部署用于集成调试的 亚马逊云科技 服务非常相似,但是部署的不是bobsBookstoreCore CloudFormation Stack,而是部署 bobsBookstoreEC2 CloudFormation Stack。这将在云中创建全套资源以支持已部署的应用程序。

你需要做的第一件事是构建和发布应用程序。打开命令行提示符并导航到存储库文件夹的根目录(这是包含 BobsBookstore.sln 的文件夹)。运行以下命令:

dotnet publish -p:PublishProfile=FolderProfile -c Release

Publish Bob's Used Books from the CLI.

图 7 — 发布应用程序

应用程序构建并发布后,即可将其部署到 亚马逊云科技。如果您尚未在开发计算机上设置 亚马逊云科技 CDK,请执行上述 “ 集成调试 ” 部分中的步骤,安装先决条件、配置 CDK 身份验证并引导您的 亚马逊云科技 账户。完成后,打开命令行提示符并导航到应用程序解决方案文件夹(这是包含 BobsBookstore.sln 的文件夹)。运行以下命令:

cdk deploy BobsBookstoreEC2 --require-approval "never"

—require-approvalog “从不” 参数告诉 亚马逊云科技 CDK 自动批准对您的 亚马逊云科技 账户进行的所有修改,而不是提示您批准,即使是影响权限和访问权限的修改也是如此。就本示例应用程序而言,这种便利性是可以接受的,但您应仔细考虑它是否适用于其他 亚马逊云科技 CDK 部署。

上面的 CDK 命令假设您的 亚马逊云科技 凭证配置文件被命名为默认。如果您没有使用该名称的凭证配置文件,或者希望使用其他凭证配置文件,请添加 —profile 参数,然后添加证书配置文件的名称。例如, cdk 部署 bobsBook storeCore--profile my-profile。 请注意,应将所选配置文件配置为设置目标区域。有关更多详细信息,请参阅 配置和凭证文件设置

除了由 bobsBookstoreCore CloudFormation Stack 配置的服务外,bobsBookStoreEC2 还创建了一个新的虚拟私有云 (VPC),并在虚拟私有云内部配置了 RDS for SQL Server 数据库和托管该应用程序的 Amazon EC2 实例。 一旦资源可用,它就会部署应用程序。配置这些额外资源大约需要 25 分钟。

部署完成后,应用程序 URL 将显示在名为 bobsb ookstoreec2.ec2URL 的输出中。将该 URL 复制并粘贴到浏览器中。

Deploy Bob's Used Books with the AWS CDK via the CLI.

图 8 — 已部署应用程序的 URL

在全新部署后,Web 服务器可能需要几秒钟才能开始为请求提供服务。一旦你看到类似于下方屏幕截图的浏览器警告,它就会按预期运行。

为了尽可能简化部署,应用程序使用自签名证书来启用通过 SSL 的流量。当你第一次在浏览器中打开 Bob's 二手书时,你会看到一条关于潜在安全风险的安全警告。这是因为浏览器无法识别自签名证书。对 Bob's Used Books 来说,忽略这个警告是安全的,但如果你在其他地方看到这些警告,请务必格外小心!

A browser warning is displayed the first time Bob's Used Books is launched.

图 9 — 浏览器警告

如果你在本地调试或集成调试中使用了 Bob 的二手书,然后进行了全面部署,你可能会注意到你的账簿和订单已经消失了。这是因为在 “本地调试和集成调试” 中,Bob 的《二手书》使用 SQL Server LocalDB 实例作为数据库后端,但完整部署会预置和使用 RDS for SQL Server 数据库。如果你对我们为什么采用这种方法感兴趣,请务必查看本博客系列的下一篇文章。

清理

如果您使用了集成调试或完整部署,则可以通过打开命令行提示符、导航到应用程序解决方案文件夹并运行以下命令来删除创建的 亚马逊云科技 服务和资源:

cdk destroy BobsBookstore*

这是确保您不会产生不必要费用的重要步骤。

结论

Bob's Used Books 是一款新的开源.NET 应用程序,旨在反映在 亚马逊云科技 上运行的简单但真实的电子商务应用程序。在这篇博客文章中,我描述了如何启动和运行应用程序,以及在本地和在 亚马逊云科技 中运行应用程序的不同方式。

你可以通过下载源代码或从 https://github.com/aws-samples/bobs-used-bookstore-sample 克隆 GitHub 存储库来开始使用 Bob's 二手书。

这是该系列的第一篇博客文章。在下一篇文章中,我将深入探讨应用程序架构、应用程序使用的 亚马逊云科技 服务以及构建 Bob's Used Books 时采用的设计决策。


作者简介

Brad Webber

布拉德·韦伯·

布拉德是亚马逊网络服务(亚马逊云科技)的解决方案架构师。他在 Visual Basic 6 还存在的时候就开始编写代码。如今,他花了大部分时间帮助组织实现.NET 工作负载的现代化并将其迁移到云端。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。