AWS App Runner 上的 .NET 工作负载

模块 1

模块 1:AWS 上的容器和无服务器计算

 学习模块

概览

AWS App Runner 是一项完全托管的 AWS 计算服务,使开发人员能够轻松、快速地大规模部署 Web 应用程序和 API,而无需事先具备基础设施方面的经验。

学习目标

在本模块中,您将:

  • 了解容器和无服务器。
  • 审视支持容器和无服务器的 AWS 计算服务。
  • 了解如何确定 AWS App Runner 何时适合您的工作负载。

容器和无服务器是当下的两个热门主题。使用容器,您可以更轻松地管理本地或云端的底层基础设施。如今,云中所有容器有将近 80% 都在 AWS 上运行。无服务器为您管理基础设施,让您的团队可以专注处理业务优先事项。AWS 提供多种容器和无服务器服务,请先分析一些关键注意事项,然后确定适合您应用场景的服务。

 所需时间

30 分钟

容器

将您的应用程序连同其配置、运行时系统和依赖项全部打包成一个简洁的服务包,岂不是一个很好的选择? 这就是容器的要义:容器让您可以通过一种标准方法将应用程序的代码、配置和依赖项打包到单个对象中。它们共享服务器上安装的操作系统,并作为资源受到隔离的进程运行,从而确保能在任何环境下快速、可靠、一致地进行部署。 

容器与虚拟机

要了解容器,我们先来谈谈虚拟机,以便进行对比。在物理服务器占主导地位的时代,服务器是一个单一的环境。它配备了一定量的内存、存储空间和网络硬件,运行特定的操作系统,并为一个组织提供服务。然后,虚拟化问世,它使得在软件中模拟计算机成为可能。现在,您的“服务器”可以一个虚拟机,根据您的组织和应用程序所需的操作系统和资源量身定制。名为虚拟机监控器的软件层可以高效创建、运行和管理虚拟机,并将虚拟机与物理硬件关联起来。物理服务器可以为多个租户运行多个虚拟机,从而降低整体基础设施成本。如今,虚拟机已经在企业中占据主导地位,成为了云计算的基础。

容器不仅具有一些与虚拟机相同的优势,而且更便于移植、效率也更高。容器是一种打包应用程序及其依赖项、库和设置的方式。多个容器共享一个主机操作系统,并作为独立进程运行。虚拟机虚拟化硬件,通常以千兆字节来衡量,而容器虚拟化操作系统,则通常以兆字节来衡量。这使容器具备轻巧、高效且便于移植的特点。容器特别适合微服务,因为二者均秉持打造轻量级独立软件组件的理念。

容器被设计为软件部署单元,因此与虚拟机相比,容器更容易改变开发人员的工作方式。开发人员构建容器并进行部署,这是他们工作的一部分。容器和虚拟机并非非此即彼的选择。您通常可以将二者结合使用,兼得二者之长。许多支持容器的 AWS 服务都在虚拟机上运行容器。

容器共享服务器上安装的操作系统,并作为资源受到隔离的进程运行,从而确保能在任何环境下快速、可靠、一致地进行部署。无论您是在笔记本电脑上本地部署还是在生产环境中部署,除了密钥和环境设置外,体验都将保持一致。

参考:AWS 容器

容器的类型

Docker 平台

Docker 是一个软件平台,让您可以快速构建、测试和部署应用程序。Docker 将容器定义为“您设备上与主机上的所有其他进程隔离的沙盒进程。这种隔离利用了内核命名空间和控制组,这两项功能都是 Linux 很久以前就有的功能。Docker 一直在努力让这些功能更加容易获得且方便使用。”

使用 Docker 带来的好处包括更快地传输代码、标准化应用程序操作、无缝迁移代码,以及通过高效资源利用节省资金。平均而言,Docker 用户发布软件的频率比非 Docker 用户高出 7 倍。您可以标准化容器的部署、故障排除和回滚操作。从本地设备转移到生产环境非常简单、直接。您可以利用容器在每台服务器上运行更多代码,从而节省资金。

现代 .NET 应用程序(采用 .NET Core 3.1 或 .NET 5+ 编写)可以在 Linux 上运行,并且与 Docker 容器兼容。

支持 Docker 容器的 AWS 服务包括 AWS App Runner、Amazon Elastic Container Service(ECS)、Amazon Elastic Kubernetes Service(EKS)、ECS 或 EKS 上的 AWS Fargate 以及 AWS Lambda。

参考:AWS Docker

Linux 容器

Docker Linux 容器在 Linux 主机上运行。现代 .NET 应用程序(采用 .NET Core 3.1 或.NET 5+ 编写)可以在 Linux 容器上运行,但旧版 .NET Framework 应用程序则需要使用 Windows。

支持 Linux 容器的 AWS 服务包括 AWS App Runner、Amazon Elastic Container Service(ECS)、Amazon Elastic Kubernetes Service(EKS)、ECS 或 EKS 上的 AWS Fargate 以及 AWS Lambda。

Windows 容器

Windows 容器支持 Microsoft Windows 操作系统。Windows 容器不能在 Linux 容器实例上运行,反之亦然。

支持 Windows 容器的 AWS 服务包括 Amazon Elastic Container Service(ECS)、AWS Fargate 上的 Amazon ECS 以及 Amazon Kubernetes Service(EKS)。AWS App Runner 不支持 Windows 容器。

参考:Amazon EC2 Windows 容器

容器的优势

容器具有许多实际优势:

轻量级

容器是轻量级软件包。容器比虚拟机小得多,因为其中没有客户机操作系统映像,它们与其主机共用一个操作系统。因此,容器的启动速度通常比虚拟机更快。

标准化且便于移植

容器提供了一致且便于移植的软件环境。这使您可以标准化部署、问题调查和回滚操作。

无缝迁移

容器可以无缝迁移。您可以将容器化应用程序从本地计算机迁移到生产环境中,也可以将其从本地环境迁移到云端。容器还具有一致性和版本控制功能,因而可以简化 CI/CD 管道的实施。

发布速度更快

容器为轻量级、便于移植且可无缝迁移,这几种特点相结合可带来出色的敏捷性。容器可以加快开发速度,因为容器可以节省在软件依赖项、设置环境和排除环境差异方面耗费的时间。举个例子,Docker 用户发布软件的频率平均比非 Docker 用户高出 7 倍。

节省资金

利用容器,您可以在每个服务器实例上运行更多代码。这不仅能提高利用率,还能为您节省资金。

参考:AWS | 什么是 Docker?AWS | 容器

AWS 上的容器的优势

AWS 是一个热门的容器云目的地。如今,云中所有容器有将近 80% 都在 AWS 上运行。除了容器的固有优势外,在 AWS 上托管容器时,您还可以获得以下优势。 

安全

AWS 针对安全、合规和治理提供 200 多种服务和关键功能。AWS 利用强大的安全隔离技术和最新的安全更新来运行您的容器。您可以为每个容器设置精细的安全权限。

可靠

AWS 提供的全球基础设施包括 22 个区域中的 69 个可用区,让您可以在全球范围内运行容器。所有 AWS 容器服务都有服务等级协议(SLA)。

选择

AWS 提供多种容器服务选择,包括托管服务和无服务器服务。其中包括 Amazon Elastic Container Registry(ECR)、Amazon Elastic Container Service(ECS)、Amazon Elastic Kubernetes Service(EKS)、AWS Fargate、Amazon Elastic Compute Cloud(EC2),以及 AWS App Runner。

AWS 还提供 App2Container 工具(A2C),该工具可帮助容器化和迁移现有的 .NET 和 Java 应用程序。

AWS 集成

AWS 容器服务已与 AWS 深度集成。这样一来,您的容器应用程序便可以利用 AWS 服务进行自动扩展、联网,并保障安全和进行监控。而您也可以兼得容器的敏捷性与 AWS 的弹性和安全性。

参考:深入探究 AWS 容器

容器应用场景

以下是容器的一些常见应用场景。

微服务

微服务是一种软件开发方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。微服务架构使应用程序更易于扩展并可加快开发速度。这不仅推动了创新,还缩短了新功能的上市时间。容器是一种热门的微服务策略。整体式应用程序可以分解为微服务,即容器中的独立组件。

批处理

批处理和提取-转换-加载(ETL)作业非常适合在容器中运行。有了容器,这些作业可以快速启动,并按计划运行或响应事件。同时,还可以根据需要动态扩展。

机器学习

使用容器可快速扩展机器学习模型以进行训练和推理,并且可在任何平台上靠近您的数据来源来运行它们。

混合应用程序

借助容器,您可以标准化部署代码的方式,从而轻松地为在本地和云环境中运行的应用程序构建工作流。 

将应用程序迁移到云

容器有助于“直接迁移”到云端。您可以轻松将整个应用程序打包到容器中,从而无需更改任何代码,即可将其迁移到云端。您可以利用云弹性来扩展容器。

参考:AWS | 微服务

无服务器

无服务器技术让您能够在无需考虑服务器的情况下构建并运行应用程序。AWS 提供托管服务,用于托管代码、管理数据以及集成无需您管理服务器的应用程序。它们具有自动扩缩功能、内置高可用性,并且采取按使用量付费的计费模式。 

无服务器的优势

无服务器技术让您可以专注于应用程序和客户,无需费心管理基础设施。

消除运营开销

使用无服务器技术,您无需处理基础设施管理、容量预置和修补。通过消除运营开销,您的团队能够更快地发布,获得反馈并进行迭代以更快将产品推向市场。

大规模适应需求

无服务器技术可以自动从零扩展,轻松应对峰值需求。这使您能够迅速适应客户需求。

降低成本

无服务器技术可以自动从零扩展,轻松应对峰值需求。这使您可以更快速地适应客户需求。

更轻松地构建更好的应用程序

无服务器技术内置与其他 AWS 服务的集成。您可以专注构建应用程序,无需费心进行配置。

参考:AWS | 无服务器

无服务器应用场景

无服务器技术非常适合以下常见应用场景:

Web 应用程序

Web 应用程序,包括 Web API 和微服务,可使用无服务器技术轻松创建。无服务器计算服务能够自动扩展,以匹配您的 Web 流量。

数据处理

您可以使用 Amazon Simple Storage Service(S3)、Amazon DynamoDB、Amazon Relational Database Service 代理(RDS 代理)以及 Amazon Aurora Serverless 等无服务器数据技术处理几乎任意规模的数据。

批处理

无服务器技术可以按计划执行批处理任务,也可以根据事件需要来执行。

事件摄取

您可以运行无服务器功能来对传入的非结构化数据进行处理、编制索引或分析,并应用机器学习服务。

适用于容器的 AWS 计算服务

现在,您已了解容器和无服务器,下面我们来看看支持容器的 AWS 计算服务,其中一些也支持无服务器。所有这些服务都支持 Docker Linux 容器,有些还支持 Windows 容器。您可以在 AWS 容器页面上查看适用于容器的 AWS 服务和工具的完整列表。虽然无需详尽了解这些服务的每个细节,但您应该了解它们之间的区别。

容器注册表:Amazon ECR

Amazon Elastic Container Registry(ECR)支持公开或私密存储、共享和部署容器软件。您通常会将容器推送到 ECR,这里非常靠近 AWS App Runner、Amazon ECS 或 Amazon EKS 等 AWS 容器计算服务。

容器编排:Amazon ECS、Amazon EKS 和 AWS Fargate

这些服务托管容器并对其进行编排,这意味着它们可以自动对容器进行预置、部署、联网、扩展、可用性设置和生命周期管理。

Amazon Elastic Container Service(ECS)是一项完全托管的容器编排服务,支持轻松部署、管理和扩展容器化应用程序(包括微服务)。您可以在 ECS 上运行高度安全、可靠且可扩展的容器。

Amazon Elastic Kubernetes Service(EKS)是一项托管容器服务,可以在云中或本地运行和扩展 Kubernetes 应用程序。Kubernetes 是一种开源系统,用于自动化部署、扩展和管理容器化应用程序。EKS 是启动、运行和扩展 Kubernetes 的最可信方式。

AWS Fargate 是适用于容器的无服务器计算引擎。Amazon ECS 和 Amazon EKS 均以无服务器形式提供,当您将它们与 AWS Fargate 结合使用时,它们的定价模式会有所不同。

除了管理云端的容器外,Amazon ECS 和 Amazon EKS 还可以通过 Amazon ECS AnywhereAmazon EKS Anywhere 服务管理本地容器应用程序。

无服务器函数:AWS Lambda

AWS Lambda 是一项无服务器事件驱动型服务,用于执行函数。它支持容器。

服务器级控制:Amazon EC2 和 EC2 竞价型实例

这些选项不仅能最大限度地控制基础设施的细节方面,同时也是在 AWS 上运行容器时所需管理最少的方式。

Amazon Elastic Compute Cloud(Amazon EC2)是一种在云中提供安全且可调整的计算容量的服务。您可以在 EC2 上运行具有服务器级控制的容器。为此,您需要分配 EC2 实例并在其上安装 Docker。

如果您的应用程序具有容错功能,可以在 Amazon EC2 竞价型实例上运行它们,这些实例最高可提供 90% 的折扣。竞价型实例让您可以利用 AWS Cloud 中未使用的 EC2 容量。要使用竞价型实例,您的应用程序必须可以中断。您可以考虑使用竞价型实例进行数据分析、批处理作业、后台处理或执行可选任务。

简单的 Web 应用程序:AWS Lightsail

AWS Lightsail 适合您希望以固定月费运行的简单容器化应用程序。对于拥有小型网站且数据库可以在云端启动和运行的学生、小型企业和初创企业来说,这是一个不错的选择。 

完全托管:AWS App Runner

最后,我们终于讲到了本课程的主题,AWS App Runner。App Runner 是一项完全托管式服务,使开发人员能够轻松、快速地大规模部署容器化 Web 应用程序和 API,而无需事先具备基础设施方面的经验。App Runner 同样采用无服务器技术,让您可以兼得容器和无服务器的优势。App Runner 可以在 Linux 容器上运行现代 .NET 工作负载。

选择 AWS 计算服务

现在,我们已经了解适用于容器的 AWS 计算服务,下面介绍的是一些关键问题,这些问题将帮助您确定您的应用程序适合使用 AWS App Runner 还是其他服务。表 1 将注意事项与 AWS 服务相关联。

表 1:AWS 容器计算服务决策表

在容器方面,您是新手还是颇有经验的老手?

如果您是容器新手,可以考虑 AWS App Runner。这是服务水平最高的选项,无需事先具备基础设施经验。

您是否需要 Windows 容器?

如果您希望在容器中运行旧版 .NET Framework 应用程序,则只能使用 Windows 容器。支持 Windows 容器的 AWS 服务包括 Amazon ECS、使用 AWS Fargate 的 Amazon ECS,以及 Amazon EKS。如果您运行的是新版 .NET,则可以使用 Linux 容器以及任何支持容器的 AWS 计算服务。

容器编排是当前需求还是未来需求?

单容器应用程序和必须编排的容器组合之间有很大的区别。如果您的容器安排比较复杂并且需要终身管理,可以考虑使用 Amazon ECS 或 Amazon EKS。 

无服务器技术是否适合您?

如果您的应用程序符合无服务器应用场景,并且您对让 AWS 管理基础设施和无服务器支付模式感到满意,可以考虑使用以下选项:AWS Lambda、App Runner 或 AWS Fargate。

  1. 如果您的应用程序由事件驱动的函数组成,则可以使用 AWS Lambda。
  2. 如果您需要编排,则应搭配使用 AWS Fargate 与 Amazon ECS 或 Amazon EKS。
  3. 如果您喜欢完全托管式服务,请选择 AWS App Runner。

关键要点

现在,您应该对容器和无服务器及其各自的优势有了基本的了解。您了解了不同的 AWS 计算服务及其各自的优势。您还了解了问哪些问题能够为工作负载确定合适的 AWS 计算服务。

结论

在本模块中,您首先了解了容器:它们与虚拟机的区别,以及 Docker Linux 容器与Windows 容器。它们为轻量级、标准化且便于移植,支持无缝迁移,让您能够更快地发布,并为您节省资金。AWS 上的容器安全、可靠,受多种容器服务支持,并与 AWS 深度集成。

然后,您了解了无服务器技术,这类技术让您无需考虑服务器即可构建应用程序。其优势包括消除运营开销、自动扩缩、降低成本以及通过与其他 AWS 服务的内置集成更轻松地构建应用程序。应用场景包括 Web 应用程序、数据处理、批处理和事件摄取。

您了解了适用于容器的 AWS 计算服务以及如何选择计算服务。您了解了 AWS App Runner 采用无服务器技术,是一项用于托管容器的完全托管式服务。

此页内容对您是否有帮助?