我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
Bob 的二手书:.NET 示例应用程序 — 第 3 部分:基础架构
简介
欢迎阅读 Bob's Used Books 博客文章系列的第三篇也是最后一篇文章。
在
这篇文章引用了 Bob 的二手书 v1.0.0。
概述
亚马逊云科技 CDK 是一个
IaC 通常与 DevOps 结合使用,作为 CI/CD 管道的一部分,自动配置应用程序环境。iaC 提供以下好处:
- 通过提交 iaC 脚本进行源代码管理可以对应用程序环境进行版本控制
- 可以自动创建和删除环境,从而降低人为错误的风险
- 可以按需创建和删除环境,从而实现灵活的软件开发工作流程和更好的成本控制
合成 亚马逊云科技 CDK 项目时,它会生成一个 A
Bob 的二手书使用 亚马逊云科技 CDK 来预置许多 亚马逊云科技 资源和服务,包括:
-
用于托管应用程序及其组件的
亚马逊虚拟私有云 (Amazon VPC) -
用于
存储书籍封面图片的 亚马逊 Simple Storage Service (Amazon S3) 存储桶 -
一种用于低延迟交付应用程序资产的
Amazon CloudFront 发行版 -
A
mazon Cognito 用户池和客户身份和访问管理 (CIAM) 的管理员用户 -
适用于应用程序后端的适用
于 SQL Server 的 亚马逊关系数据库服务 (亚马逊 RDS) -
将应用程序部署到 亚马逊云科技 时用作网络服务器的
亚马逊弹性云计算 (Amazon EC2) 实例 -
许多 A
mazon 身份和访问管理 (IAM) 角色、策略和权限,使应用程序的组件能够相互通信。
如您所见,Bob 的二手书利用了众多 亚马逊云科技 服务。这对于在云中运行的应用程序非常常见。此外,现在几乎所有的应用程序除了生产环境外,还有多个非生产环境,例如测试和UAT。使用像 亚马逊云科技 CDK 这样的 IaC 框架可以保证快速、一致地配置每个环境。
考虑到所有这些,让我们来看看 Bob 的二手书是如何使用 亚马逊云科技 CDK 的。
CDK 堆栈
如概述中所述,在云中运行的应用程序通常依赖于多种服务和资源。亚马逊云科技 CDK 可以轻松地将这些服务和资源组合成 堆 栈。堆栈是一组可以作为单个单元进行管理的服务和资源。部署堆栈时,将部署该堆栈中定义的所有资源;删除堆栈时,该堆栈中的所有资源都将被删除。
对于小型应用程序,维护一个包含该应用程序所有资源的单一堆栈可能是有意义的。但是,随着应用程序发展到包含更多服务和资源,维护整体堆栈可能会变得困难。此时,将该单块堆栈拆分成多个堆栈是有意义的。
Bob 的二手书分为四个堆栈:
- CoreStack — 定义亚马逊 S3 存储桶、亚马逊 Cognito 用户池和 CloudFront 分配
- NetworkStack — 定义亚马逊 VPC 和相关资源
- DatabaseStack — 定义适用于 SQL Server 的亚马逊 RDS 数据库
- ec2ComputeStack — 定义一个充当 Web 服务器的亚马逊 EC2 实例,并将应用程序部署到该 Web 服务器
将 Bob 的二手书的资源整理成堆栈可以更好地控制资源部署。当您处于集成调试模式时(有关集成调试的详细信息,请参阅本系列
cdk 部署 bobsBooksToreCore
当你想模拟生产环境时,你需要部署所有的堆栈。你可以使用以下命令来做到这一点:
cdk 部署 bobsBookstoreEC2
但是等等,这不只是配置 Web 服务器并部署应用程序吗?那网络资源和数据库呢?Bob's Used Books 中的 亚马逊云科技 CDK 项目利用了 亚马逊云科技 CDK 框架的一项名为
跨栈引用
由 Bob's 二手书定义的四个堆栈在 Bookstore.cdk/Program.cs 的主方法中进行了实例化。
当 ec2ComputeStack 被初始化时,它会被传递一个 ec2ComputeStackProps 的实例:
var ec2Stack = new EC2ComputeStack(app, $"{Constants.AppName}EC2", new EC2ComputeStackProps
{
Env = env,
Vpc = networkStack.Vpc,
Database = databaseStack.Database,
ImageBucket = coreStack.ImageBucket,
WebAppUserPool = coreStack.WebAppUserPool
});
ec2ComputestackProps 实现了 istackProps 接口,并使用在 NetworkStack、DatabaseStack 和 CoreStack 中创建的资源填充。例如,ec2ComputeStack 将亚马逊 EC2 实例部署到 NetworkStack 创建的 VPC 中。它使用在 CoreStack 中创建的 Amazon Cognito 用户池为网络服务器生成用户池客户端应用程序,并使用 Amazon S3 存储桶和 RDS for SQL Server 数据库为网络服务器生成相应的访问权限。当你运行
cdk deploy bobsBookStoreEC2
时,亚马逊云科技 CDK 会识别 ec2ComputeStack 依赖于在 NetworkStack 中创建的 VPC、在 DatabaseStack 中创建的数据库以及在 CoreStack 中创建的存储桶和用户池,并确保先对其进行配置。
应用程序部署
除了为解决方案定义计算资源外,EC2ComputeStack 还将应用程序部署到 Web 服务器。
注意:应用程序部署通常由 CI/CD 管道而不是像 亚马逊云科技 CDK 这样的 IaC 框架来促进,但是我们希望为.NET 开发社区提供简单、独立的开发体验,并通过 CDK 部署应用程序实现了这一目标。
Bookstore.Cdk 项目有一个名为 EC2Artifacts 的文件夹,其中包含以下文件:
-
bobsbookstore.conf— 一个 Apache 配置文件,用于定义 Bob's 二手书的虚拟主机。 -
bobsbookstore.service— 一项通过 dotnet CLI 启动应用程序的 Linux 服务。 -
ssl.conf— 用作自签名证书配置一部分的配置文件。 -
configure_ec2_web_app.sh— 配置托管 Bob 二手书的 EC2 实例的 bash 脚本。
EC2ComputeStack 将这些文件以及应用程序发布时生成的应用程序输出上传到 S3 存储桶(这与 CoreStack 中定义的存储桶不同)。
配置 EC2 实例后,将创建一个
清理
如果您已经部署了 Bob 的二手书中包含的任何 CDK 堆栈,则可以通过打开命令行提示符、导航到应用程序解决方案文件夹并运行以下命令来删除创建的 亚马逊云科技 服务和资源:
cdk 摧毁 bobsBookstore*
这是确保您不会产生不必要费用的重要步骤。
结论
Bob 的二手书利用适用于.NET 的 亚马逊云科技 开发工具包来定义和预置所需的 亚马逊云科技 资源。适用于.NET 的 亚马逊云科技 CDK 是一个强大的基础设施即代码框架,它使.NET 开发人员能够使用他们熟悉且富有成效的编程语言来表示他们的 亚马逊云科技 基础设施。
这是 Bob's 二手书入门系列的最后一篇文章。本系列
但是,这并不是你最后一次听说鲍勃的二手书!相反,我们计划使用 Bob 的二手书来演示常见的.NET 现代化场景,演示与其他 亚马逊云科技 服务的集成,并包含在即将到来的培训和支持内容中。
你可以
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。