AWS App Runner 上的 .NET 工作负载

模块 2

模块 2:AWS App Runner 基础知识

 学习模块

学习目标

在本模块中,您将:

  • 了解 AWS App Runner 的基础知识,包括其优势、用例、功能和定价模型。
  • 了解在哪里可以找到文档和其他资源。
  • 在 AWS 管理控制台中熟悉 AWS App Runner,并了解如何创建、管理和删除服务。

AWS App Runner 是一项完全托管式服务,使开发人员能够轻松地大规模快速部署容器化 Web 应用程序和 API,而无需事先具备基础设施方面的经验。从源代码或容器映像开始。App Runner 自动构建和部署您的 Web 应用程序,通过加密实现流量的负载均衡,根据您的流量需求进行扩展,并使您的服务与私有 Amazon VPC 中运行的其他 AWS 服务和应用程序间的通信变得简单。借助 App Runner,您无需花时间考虑服务器或扩缩,便有更多时间专注于您的应用程序。 

 所需时间

60 分钟 

AWS App Runner 简介

AWS App Runner(下文简称“App Runner”)是一项完全托管式服务,使开发人员能够轻松地大规模快速部署容器化 Web 应用程序和 API,而无需事先具备基础设施方面的经验。如果您拥有 Web 应用程序或 Web 服务(例如网站、API 或微服务),那么它们非常适合使用 App Runner。

App Runner 是专为容器化 Web 应用程序打造的“豪华”服务。当 AWS 将 App Runner 描述为“完全托管”时,他们并不是开玩笑:如果您希望为自己处理每一个细节,App Runner 就是您的首选服务。与 AWS Lambda 一样,您唯一的责任就是提供代码。与 AWS Lambda 一样,您可以不了解(或不需要)服务运行的基础 EC2 实例和基础设施知识。

如果您不熟悉容器,则无需担心:部署流程可以自动为您的代码建立一个容器。如果您已经拥有容器,则可以继续使用现有的容器。App Runner 将为您执行其他所有工作,包括管理 TLS、负载均衡器、运行状况检查和自动扩展。App Runner 在 Amazon ECS 上使用 AWS Fargate 运行您的容器,但您永远不会直接与这些服务互动。

优势

App Runner 易于使用,自动扩展,节省时间,并提供符合规范的环境。

易于使用

只需单击几下,您就可以使用 AWS App Runner 构建和运行安全的 Web 规模应用程序。您不需要容器、基础设施、服务器配置、网络、负载平衡或部署管道的经验。

随流量变化而扩展

App Runner 可以无缝纵向扩展和缩小资源,以响应网络流量。您可以设置容器实例的最少数量,以消除冷启动并确保低延迟。

节省时间

您不需要花费时间使用 App Runner 分配、配置或管理资源和基础设施。资源和基础设施组件完全由 AWS 托管,并受益于我们的安全性和运营最佳实践。您可以完全专注于您的应用程序

确保合规的环境

您的 App Runner 应用程序可通过 Amazon VPC 连接到 AWS 服务,例如数据库、缓存和消息队列服务。不需要公有子网来帮助您保护资源。

使用案例

AWS App Runner 的使用案例包括前端和后端 Web 应用程序、微服务、Web API 以及快速部署。

前端和后端 Web 应用程序

您可以在 App Runner 中托管网站、Web 服务和 API。

微服务和 API

借助 App Runner,您可以同时运行数千个微服务。这样您可以获得松散的耦合,每个微服务都可以独立扩展。 

快速部署

App Runner 利用 AWS 最佳实践和技术大规模部署和运行容器。这可缩短新应用程序和功能的上市时间。

功能

我们来回顾 AWS App Runner 服务的特征:

VPC 连接器

App Runner 服务可以通过 VPC 连接器与在私有 Amazon Virtual Private Cloud(VPC)中运行的其他 AWS 服务通信。这可以让您添加对 Amazon VPC 控制下的其他服务的支持。

自动扩缩

App Runner 会根据您配置的限制,自动扩展或缩减容器实例以满足流量要求。

自动部署

App Runner 可以在应用程序更改时自动构建和部署您的应用程序。您可以将 App Runner 连接到您的代码仓库,或连接到容器映像注册表,例如 ECR。 

证书管理

App Runner 自动包括传输层安全性协议(TLS)。不需要配置,证书会自动续订。

成本管理

您可以通过 AWS 管理控制台、AWS CLI 或 AWS SDK 轻松暂停或恢复应用程序以控制成本。

负载均衡

App Runner 负载自动平衡流量,提供可靠性和高可用性。

日志和指标

通过提供详细的构建、部署和运行时系统日志,App Runner 可以监控和优化容器化应用程序。通过与 Amazon CloudWatch 的内建整合,还可提供完整的运算指标。

限制

App Runner 仅适用于特定区域,您可以在 AWS App Runner 端点和配额页面中查看。 如果您将与其他 AWS 服务(例如数据库或存储服务)一起使用 App Runner,则您需要使用支持所有目标服务的区域,以便可同地协作,提高效率。您还应考虑选择区域的 AWS 建议,例如遵守当地法规,以及距离您的用户基础位置的距离。

并非在所有区域提供

并非所有 AWS 区域都提供 AWS App Runner。您可以在 AWS App Runner 端点和配额页面上找到目前支持的区域。

每次服务一个容器

在 App Runner 中,服务仅与一个容器相关联,而且只有一个容器。您可以根据流量运行该容器的多个实例,但是无法像使用 ECS 或 EKS 那样从多个容器构成服务。

区域配额

默认情况下,您最多可以建立 10 个自动扩缩配置、10 个第三方资源连接、10 个可观测性配置、10 个服务,以及每个区域 10 个 VPC 连接器。所有这些配额都可以调整。您可以使用 AWS 服务配额和 AWS 支持中心请求提高服务配额。

定价模式

App Runner 根据计算和内存资源收费。此外,如果您选择使用这些功能,您可以支付自动部署和从源代码构建的费用。注意:此处所述的费率和定价示例以截至 2022 年 5 月的美元汇率为准。请务必查看定价页面以确认费率和其他定价模式的详细信息。请注意,价格可能会因地区而异。

在 App Runner 中创建应用程序时,您可以设置所需的内存数量和虚拟 CPU。虚拟 CPU(vCPU)是等于一个 CPU 核心的一个线程的 CPU 单位。您还可以指定并发性,以决定活动容器实例需要支持的同时请求数量上限。当您的应用程序空闲时,您只需为预置的容器实例内存付费,这样您的应用程序就能保持正常运转,并准备快速响应下一个请求。当出现请求时,您需要为活动容器实例在应用程序处理请求时所消耗的 vCPU 和内存付费。只有在您的应用程序运行时收取费用,您可以通过 AWS 管理控制台暂停并恢复应用程序。 

预置容器实例

部署应用程序后,每个容器实例中预置的内存都会需要您支付费用。App Runner 即使没有流量也能保持内存预置,确保它能够以低延迟响应下一个请求。

在撰写本文时,预置的容器实例在美国和欧洲地区的费用为 0.007 美元/GB-小时。

定价示例:假设您已经部署了需要 2GB 内存且目前没有流量的预置容器实例。该 2GB 预置容器实例的费用为 1 x 2GB x 0.007 美元 = 每天 0.34 美元。

活动的容器实例

当您的应用程序处理请求时,您的费用会从预置的容器实例切换为活动容器实例。活动容器实例向您收取运算资源和任何超出预置容器实例覆盖范围之外的任何内存费用。

活动容器实例收费为 0.064 美元/vCPU/小时。容器实例费用会按秒计费,当预置容器实例开始处理请求后,vCPU 资源按最少一分钟计费。

自动部署

如果您选择自动部署,源代码会变更为部署分支的构建容器映像,并触发部署。自动部署的费用为每个应用程序每月 1 美元。

构建费用

当 App Runner 从源代码构建应用程序时,您需要支付构建费用。费率为 0.005 美元/构建-分钟。

定价示例 1:应用程序测试

您每天测试应用程序 2 小时。处于活动状态时,您的应用程序每秒收到 2 个请求,持续 2 小时。您的应用程序需要每个容器实例 2GB 的内存。您每天暂停服务 22 小时。

您的每日预置容器实例费用为 2 小时 x 1 个预置容器实例 x (2 GB x 0.007 美元/GB-小时),或 0.03 美元。您每天只支付 2 小时的费用,因为您每天的其他 22 小时暂停该应用程序。

您的每日活动容器实例费用为 2 小时 x 1 个活动容器实例 x [(1 个 vCPU x 0.064 美元/vCPU-小时)] – 2 小时 x 1 个预置容器实例 x(2 GB x 0.007 美元)= 0.13 美元。您的每日总成本为 0.16 美元,或 4.80 美元/月。

定价示例 2:轻量级 API

您已将轻量级的延迟敏感 Web API 部署到 1 个具有 2GB 内存的预置容器实例。每天,您在 8 小时内收到 80 个偶尔的请求。

App Runner 每天 24 小时维护预置的容器实例(内存),收费为 2GB x 0.007 美元/GB-小时,或 0.34 美元/天。

当请求进入时,App Runner 每天可扩展到 1 个活动容器实例,每天 8 小时。活动容器实例会收取运算和内存费用,减去预置容器实例内存费用。公式如下,费用为每天 0.51 美元。

8 小时 × 1 个活动容器实例 × [(1 vCPU × 0.064 美元 vCPU-小时)+(2GB × 0.007 美元 GB-小时)] - 8 小时 x 1 个预置容器实例 x(2GB × 0.007 美元 GB-小时)= 0.51 美元

每日总费用为 0.51 美元(活动容器实例)+ 0.34 美元(预置容器实例)= 0.85 美元,或 25.50 美元/月。

定价示例 3:大量生产

您在生产中有一个 Web 应用程序。每个容器实例需要 2GB 的内存,并且每秒可处理 80 个请求。该网站在白天繁忙,请求最高达 800 个请求/秒,持续 3 小时。在 12 个非繁忙小时内,每秒有 60 个请求。App Runner 在高峰时段将应用程序扩展到 10 个活动容器实例,并在非高峰时段将应用程序缩减到 1 个活动容器实例。预置的容器实例内存每天收费 24 小时。

预置的容器实例(内存)每天收费为 2GB x 0.007 美元/GB-小时,或 0.34 美元/天。

在高峰时段,需要 10 个活动容器实例,才能在持续 3 小时内每秒提供 800 个请求。10 个活动容器实例 × 3 小时 × [(1 vCPU × 0.064 美元 vCPU-小时)+(2GB × 0.007 美元 GB-小时)] - 1 个预置容器实例 x 3 小时 x(2GB x 0.007 美元 GB-小时)= 2.30 美元。

在非高峰期(12 小时),1 个活动容器实例每秒处理 60 个请求。12 小时 × 1 个活动容器实例 × [(1 vCPU × 0.064 美元/vCPU-小时)+(2 GB × 0.007 美元/GB-小时)] - 12 小时 x 1 个预置容器实例 x(2 GB × 0.007 美元/GB-小时)= 0.77 美元。

综上,2.30 美元(高峰活动容器实例)+ 0.77 美元(非高峰活动容器实例)+ 0.45 美元(每日预置容器实例)= 3.40 美元/天,或 102 美元/月。

参考:AWS App Runner | 定价EC2 虚拟 CPU

开发人员工作流程

在本节中,您将了解开发人员如何使用 App Runner。您可以按照下面显示的流程,为您的应用程序建立 App Runner 服务。

1.添加来源

在此步骤中,您可以连接到容器映像或源代码,然后选择部署设置。当您创建 App Runner 服务时,您将其连接到来源。来源可以是容器映像或源代码存储库(如下所示)。对于源代码存储库(例如 GitHub 存储库),您需要提供连接详细信息。

即使您的应用程序未被容器化,App Runner 也支持自动构建容器映像。当您关联现有的源代码存储库并有选择地向 App Runner 提供运行时系统构建和启动命令时,App Runner 会自动将您的 Web 应用程序容器化,并提供一个正在运行的 Web 应用程序。自动容器化适用于包含支持的运行时系统和框架,并经过策划的 App Runner 平台。

参考:AWS App Runner | 常见问题

在部署设置中,您可以选择手动或自动触发应用程序的更新部署。如果您启用自动部署,则无论何时更新源代码或容器映像,App Runner 都会自动构建和部署您的应用程序。

2.配置构建和服务设置

在此步骤中,您可以配置容器的 vCPU 和内存,并选择自动扩缩和运行状况检查选项。如果您选择从源代码存储库(而不是容器注册表)部署,则也将配置构建设置。虽然 App Runner 会为您默认这些设置,但您需要了解它们并了解自定义配置的选项。

您可以选择在控制台中配置设置,或在源代码存储库中提供 YAML 配置文件。

在服务设置中,您将为服务命名,并设置容器的 CPU 和内存大小。这些设置会影响您的成本。您也可以在此设置应用程序所需的任何环境变量。

您可以配置自动扩展行为。默认值仅是容器的一个实例。当 App Runner 接收超过 80 个并发请求时,可将您的服务扩展到更多实例。您可以配置实例数量上限,这可让您控制成本。

运行状况检查设置可让您识别 App Runner 可以发送运行状况检查请求的网络路径。默认情况下,如果连续发生 5 次运行状况检查失败,则该实例被视为运行状况不良,并且 App Runner 将替换它。您可以将在 App Runner 判断服务运行状况不良之前必须失败的运行状况检查数量从 1 设置为 20。

安全性设置可让您选择实例将使用的 IAM 角色。如果您的应用程序需要与其他 AWS 服务通信,您可以在 IAM 角色中授权。这些设置也可让您选择性地提供客户管理密钥(CMK)来加密源代码。 

3. 检查并创建

在此步骤中,您可以检查并验证所有设置。单击“建立并部署”后,App Runner 会建立您的服务并部署您的应用程序。

4.接收安全 URL

最后,您将从 AWS App Runner 收到运行即可生产服务的安全 URL。HTTPS 会自动为您设置。

最后,如果您有自定义域名,您可以将应用程序与自定义域名关联。您将被指导采取行动证明您拥有该域名。

管理 App Runner 服务

您可以通过多种方式创建、部署和管理 App Runner 服务。

AWS 管理控制台

您可以从 AWS 管理控制台创建、部署、配置、监控和终止 App Runner 服务。您可以导航至 AWS App Runner 控制台以执行这些操作。

创建和部署服务后,您可以选择服务并查看以下区域中的服务详细信息:

服务概览

在“服务概览”部分中,您会看到应用程序的状态(例如“运行中”)、默认域名 URL、服务的 Amazon 资源名称(ARN)以及“来源”URL。最后一个会将您带到 Amazon Elastic Container Registry(ECR)或源代码存储库中的容器。

日志

此选项卡会显示您的部署日志和应用程序执行日志。App Runner 会收集您的应用程序输出并将其流式传输至 CloudWatch 日志。您可以包含任何您认为有用的输出,例如对 Web 服务的请求的详细信息。

活动

“活动”选项卡会显示您服务的历史记录。App Runner 使用操作列表来追踪您的 App Runner 服务中的活动。操作表示对 API 操作的异步调用,例如创建服务、更新配置和部署服务。

指标

“指标”选项卡会显示您的服务指标,包括请求、响应、延迟以及活动实例的数量。

配置

“配置”选项卡会显示您的服务配置详细信息,包括虚拟 CPU 和内存数量、自动扩展、运行状况检查和安全性。单击“编辑”以修改您的配置。如果需要,您可以控制每个实例的虚拟 CPU 和内存数量、设置环境变量、自定义自动扩展、配置运行状况检查、使用自定义 IAM 角色,或使用自定义加密密钥。

监控和日志记录

监控 App Runner 应用程序对于维持可靠性、可用性和性能至关重要。从 AWS 解决方案的所有部分收集监控数据,轻松查看故障详细信息。App Runner 从您的代码收集应用程序日志。它还与多个 AWS 服务整合,以监控和响应服务事件。

Amazon CloudWatch 警报

您可以使用 Amazon CloudWatch 警报来监视服务指标,并在符合您指定的条件时向您发送通知。您可以在一段时间内观看服务指标,并设置临界值,如果指标超过指定时间段数目的临界值,则向您发送通知。例如,当 CPU 使用率超过 60% 时,您可能会收到警报。

参考:查看报告给 CloudWatch 的 App Runner 服务指标

应用程序日志

App Runner 会收集应用程序代码的输出,并将其流式传输至 Amazon CloudWatch Logs。您可以决定要登录应用程序的内容,例如向 Web 服务请求详细信息。您可以在 App Runner 控制台中查看这些日志。如果您使用 Visual Studio,并且已安装 AWS Toolkit for Visual Studio,则可以从 IDE 查看 CloudWatch 日志。 

AWS CloudTrail 操作日志

AWS CloudTrail 会记录针对 AWS 服务的 API 调用,并将其作为事件追踪。您可以在 AWS 管理控制台中查看事件,也可以选择性地设置事件以持续写入 Amazon S3 桶。

参考:CloudWatch 日志 CloudWatch 指标CloudTrail API 操作

适用于.NET 的 AWS 部署工具

 适用于.NET 的 AWS 部署工具是用于 .NET CLI 和 AWS Toolkit for Visual Studio 的交互式工具,您无需掌握太多 AWS 知识,并且只需最少单击或命令即可部署 .NET 应用程序。该工具会引导您完成部署。您可以使用此工具,使用单一命令 dotnet aws deploy,创建 .NET Web 应用程序并将其发布至 AWS App Runner。

如果您使用 Visual Studio 作为 IDE,并且已安装 AWS Toolkit for Visual Studio,则可以在 Visual Studio 中获得相同的引导部署功能。在 Solution Explorer 中,以鼠标右键单击项目,然后选择“发布至 AWS”。向导页面将指导您完成部署

AWS Copilot

AWS Copilot 是开源命令行界面(CLI),可以通过托管的构建管道部署到 AWS App Runner 以及 Amazon ECS 和 AWS Fargate。Copilot 在幕后使用 Amazon CloudFormation。Copilot 可以与 .NET 以及 Python 和 Node.js 应用程序一起使用。 

身为 .NET 开发人员,您很可能需要使用适用于 .NET CLI 的 AWS 部署,从命令行部署到 AWS App Runner,但如果您还要部署非 .NET 应用程序,则可以选择 AWS Copilot。

以下是使用 Copilot 部署 App Runner 时的操作:

AWS CLI

AWS 命令行界面包含用于查看和管理 AWS App Runner 服务的命令。您可以创建、列出和描述服务和相关构件,例如 VPC 连接器和自定义域名。您可以查看和设置配置设置。您可以开始部署。您可以暂停或恢复应用程序。您可以删除服务。

连接到其他 AWS 服务

默认情况下,App Runner 服务只能传送消息到公共端点,例如公共网站和 Web 服务。如果您的应用程序需要与其他 AWS 服务整合而无需通过互联网(例如 Amazon RDS 数据库、Amazon DynamoDB 数据库或 Amazon ElastiCache),您可以使用 VPC 连接器。虽然您通常不需要了解 AWS 基础架构才能使用 App Runner,但您需要对 Amazon Virtual Private Cloud(VPC)、子网和安全性有着高度了解才能使用 VPC 连接器。您可以通过阅读什么是 Amazon VPC?以及 Amazon VPC 的运作方式来获得对术语的基本理解。

VPC 连接器

VPC 连接器将您的 App Runner 服务与 VPC 相关联。VPC 连接器只是连接的一半。要连接其他 AWS 服务,该其他服务也必须与 VPC 连接。具体方法是使用 VPC 端点,即不需要互联网访问的私有连接。例如,下图显示 App Runner 服务与 DynamoDB 数据库之间的连接。App Runner 的 VPC 连接器和 DynamoDB 的 VPC 端点是两个可以通信的 VPC 连接。 

您可以在创建 App Runner 服务时配置 VPC 连接器。要配置 VPC 连接器,您需要指定以下项目:

  1. 您想要连接的 VPC,例如默认的 VPC
  2. 。要选择的子网。为了获得高可用性,您应该选择至少 3 个可用区域的子网。
  3. 您的默认安全组。

在配置 VPC 连接器或 VPC 端点时,您应该咨询组织的安全专家。

VPC 端点

VPC 端点可让您通过私有连接将 VPC 连接到支持的 AWS 服务,而无需互联网网关、NAT 设备或 VPN 连接。VPC 中的实例不需要公共 IP 地址才能与服务中的资源通讯。VPC 与其他服务之间的流量不会离开 Amazon 网络。

您可以在 AWS Well-Architected Framework 指南和 AWS PrivateLink 概念中了解有关 VPC 端点的更多信息。

您可以浏览至“VPC”>“端点”,然后单击“创建端点”,在 AWS 管理控制台中创建 VPC 端点。要为 AWS 服务创建端点,请选择 AWS 服务类别,然后搜索并选择您想要连接的服务。

文档和资源

将以下资源设为书签,您可以使用这些资源作为参考和学习:

AWS App Runner 产品详细信息页面,提供服务概览、功能、定价、资源和常见问题。

AWS App Runner 文档页面包含开发人员资源的链接,包括 App Runner 开发人员指南、AWS CLI 参考资料、教程、视频和博客。

AWS App Runner 开发人员指南描述了架构、部署和可观测性。

AWS CLI apprunner 命令参考。您可以从 AWS CLI 创建服务、执行手动部署,并列出服务状态。

使用 CloudFormation 构建 Microsoft .NET Core Web API 应用程序并将其部署到 AWS App Runner 研讨会,说明了如何使用 App Runner 通过 Amazon Aurora 数据库创建 Microsoft .NET Web API 应用程序。

AWS App Runner:深入了解网络研讨会视频是技术讲座和演示。

AWS App Runner:几分钟内即可从代码转换为可扩展且安全的 Web 应用程序是 Martin Beeby 的演示博客。

关键要点

您现在应该能够说明 AWS App Runner 的优势、使用案例、功能和定价模式。

您学到了开发人员工作流程的 4 个步骤。

您了解如何在 AWS 管理控制台中管理 App Runner 实例、监控和记录选项以及各种命令行工具。

您了解了 VPC 连接器和 VPC 端点如何共同合作,将 AWS App Runner 与其他 AWS 服务连接。

对于 .NET 工作负载,使用 App Runner 的最简单方法是使用容器映像作为来源。当您使用代码存储库来源时,需要额外的工作才能在实例上安装 .NET。

结论

在本模块中,您了解了 AWS App Runner 的基础知识。在服务介绍中,您查看了 App Runner 的优点、使用案例、功能、限制和定价模式。您了解了开发人员工作流程以及可以配置的内容。您了解了如何从 AWS 管理控制台和各种工具管理 App Runner 服务。

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