迁移 .NET 应用程序 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

迁移 .NET 应用程序

将.NET 应用程序迁移到 AWS 使您能够创建具有弹性扩展功能的高可用性工作负载,降低操作开销,并通过专注于差异化价值来提高业务灵活性。

本节重点介绍在 AWS上托管 .NET 应用程序的不同选项。您可以选择使用虚拟机、托管解决方案(如 AWS Elastic Beanstalk)、容器化代码或将代码重构到一个基于微服务或无服务器的架构中。

评测

为 .NET 工作负载选择迁移路径取决于以下关键因素:

  • 查找使用的 .NET 版本 – Microsoft 支持两种不同的 .NET 实施:.NET Framework(1.0-4.8)和 .NET(.NET Core 1.0-3.1 和 .NET 5 及更高版本)。两者具有许多相同的组件,并且都可以运行使用不同的 .NET 编程语言(例如 C#、F# 和 VB.NET)编写的应用程序代码。选择迁移策略和托管服务取决于所使用的运行时系统,因为 .NET Framework 在 Windows 上运行,而较新的 .NET 是多平台的。对于 .NET Framework,您可以在 Windows 操作系统上托管,也可以重构代码以使用更新的 .NET。较新的 .NET 还可以托管在基于 Linux 操作系统的服务上。在对基于 .NET Framework 的工作负载进行现代化改造时,您可以使用 Porting Assistant for .NETAWS Toolkit for .NET Refactoring 扫描您的代码并生成兼容性评测报告。通过查找您的项目是否 APIs引用了不兼容的.NET Framework,您可以规划迁移项目的复杂性,并决定是否以及何时重构代码以使用更新的运行时。

  • 查看您当前的部署-检查当前迁移的工作负载是否有可以更新以将相同的工作负载部署到云中的现有 CI/CD 管道。使用现有的构建和部署管线可以自动执行构建、配置和部署工作负载所需的步骤,从而可缩短将应用程序部署到云所需的时间。

  • 查看您的路线图 – 根据项目的当前状态,您可能已经在计划重新架构或重新设计应用程序。所执行的任何现代化均应考虑产品路线图。例如,决定对现有代码进行容器化或将单体架构重构为微服务是理想的产品路线图的一部分,并且与其他开发工作保持一致。

动员

当将 .NET 工作负载迁移到 AWS时,需要考虑三种不同的迁移路径。您可以根据现有代码库的复杂性、分配的迁移时间以及为支持迁移工作而分配的团队规模,在不同的选项之间进行选择。在考虑将现代化作为迁移的一部分时,最佳做法是与产品路线图保持一致。

  • 重新托管(lift & shift)— 如果您的优先事项是更快地迁移到 AWS ,而几乎没有更改,则可以选择这种方法。您可以将基于 ASP.NET 的网站重新托管到在亚马逊实例上运行的互联网信息服务 (IIS)。 EC2 您可以将基于桌面的应用程序(例如 Windows Presentation Foundation、Web Forms 和.NET MAUI)重新托管到最终用户计算平台之一,例如亚马逊应用程序 WorkSpaces 或亚马逊。 WorkSpaces

  • 更换平台 – 更换平台最适合以下情况:您希望使用托管服务托管应用程序而不进行代码更改,但希望通过消除无差别的繁重工作(如安装、修补、升级和实例管理)来减少运营开销。此策略也适用于想要移至基于容器的工作负载的团队。您可以对现有应用程序更换平台,转为 Elastic Beanstalk,或使用 Amazon ECSAmazon EKSAWS App Runner 上托管的 Docker 容器。

  • 重构 — 如果您可以投入时间和精力进行代码和架构更改,从而减少运营开销,并通过使用 AWS 云原生服务实现更好的扩展、高可用性和灾难恢复,请选择这种方法。重构涉及到通过将现有 .NET Framework 应用程序移植到 .NET(以前称为 .NET Core)或对现有代码库进行现代化改造以在云中更好地运行来实现代码库的现代化改造。您可以使用适用于 .NET 的 AWS SDK 从 .NET 代码中调用许多 AWS 云服务。诸如 Porting Assistant for .NETAWS Microservice Extractor for .NET 等工具可用于将代码库从 .NET Framework 移植到 .NET,并将单体应用程序分解为微服务。通过将现有的 .NET 工作负载重构为在 AWS Lambda 上运行,您可以使用无服务器计算来避免预调配和管理基础设施。

迁移

.NET 工作负载迁移的步骤取决于您在评测阶段选择的迁移路径和您的应用程序类型。

对 .NET 应用程序更换主机

如果您想在不更改任何代码的情况下迁移应用程序,但希望受益于云中的自动扩展、负载均衡和弹性,请选择此迁移路径。对于基于 Windows 的网站,重新托管通常意味着在 AWS上的互联网信息服务(IIS)上运行这些网站。对于基于桌面的应用程序,必须安装相应的应用程序并允许用户从外部连接到该应用程序。

互联网信息服务开启 AWS

互联网信息服务(IIS)是一款在 Windows 操作系统上运行的 Microsoft Web 服务器,用于托管网站和 Web 服务。IIS 可以安装在任何运行 Windows 服务器的亚马逊 EC2 实例上。启用并配置 IIS 后,您可以使用与用于本地环境相同的部署机制来部署 ASP.NET 网站和服务。

如果您在 EC2 Windows 实例上托管 IIS,那么根据您的工作负载和 HADR 需求,通过使用负载平AWS 衡、Auto Scaling 组和多可用区部署来遵守 Well-Arch itected Framework,这一点很重要。我们建议使用,AWS Launch Wizard因为它可以指导你完成运行 IIS 资源的 Windows Server 工作负载的大小、配置和部署 AWS。Launch Wizard 会部署一个高可用性架构,该架构跨越两个可用区,其中包含新创建或现有 VPC 所需的计算、联网和存储组件。

在上托管桌面应用程序 AWS

许多客户端均需要访问基于 Windows 的胖客户端应用程序。您可以在三种不同的平台之间进行选择:

  • 亚马逊 EC2 — 如果您希望您的用户使用微软远程桌面连接到基于 Windows 服务器的环境,请选择此选项。使用此选项,您负责修补和维护操作系统。您还必须为用户购买额外的远程桌面服务客户端访问许可证 (RDS CALs) 和有效的软件保障 (SA)。有关更多信息,请参阅 AWS 文档 AWS中的 Microsoft 许可

  • Amazon WorkSpaces — 如果您需要为用户提供完全托管的虚拟桌面基础架构 (VDI),请选择此选项。您可以使用 WorkSpaces 为用户提供持久的 Windows 桌面体验。您还可以使用自定义映像自定义 WorkSpaces 环境并安装.NET 应用程序,或者使用AWS Systems Manager将.NET 应用程序交付到您的 WorkSpaces环境。用户可以使用浏览器或 A mazon WorkSpaces 客户端进行连接。

  • Amazon A WorkSpaces pplications — 选择此选项可提供从任何位置对应用程序和非永久桌面进行安全、可靠和可扩展的访问。您可以使用 WorkSpaces 应用程序让您的用户能够从 Web 访问您的.NET 应用程序。如果您已经拥有现有 RDS CALs 和活动 SA,则可以使用许可证移动性将这些许可证与 WorkSpaces 应用程序一起使用。

更换平台

更换平台涉及到更改您的托管环境,只需少量甚至完全无需更改代码。选择此策略可以减少运营开销并利用云功能和服务。

AWS Elastic Beanstalk

您可以使用 AWS Elastic Beanstalk 来为您的 .NET Framework 工作负载更换平台。如果您打包基于 ASP.NET 或基于 ASP.NET Core 的应用程序,则 AWS 无需了解运行这些应用程序的基础架构,即可在中快速部署和管理应用程序。这样可降低复杂性,而不会限制选择或控制权。您只需上传应用程序,Elastic Beanstalk 将自动处理有关容量预置、负载均衡、扩展和应用程序运行状况监控的细节。

要了解更多信息,请参阅以下资源:

容器化现有应用程序

您可以使用 Amazon ECS 或 Amazon EKS 来托管基于 Docker 的容器化应用程序。 AWS 管理这两项服务。这两者之间的选择取决于现有的知识和偏好。这两个选项均可以运行基于 Linux 的容器或基于 Windows 的容器。

要了解更多信息,请参阅以下资源:

对基于 .NET 的应用程序进行容器化取决于所使用的 .NET 运行时系统。请考虑以下事项:

  • 基于 .NET Framework 的应用程序在 Windows 容器上运行 – 向现有应用程序添加 Docker 支持是通过创建一个 Docker 文件来完成的,该文件概述了需要如何对应用程序进行容器化。您可以使用 AWS App2Container 将基于 .NET Framework 的现有应用程序轻松容器化并迁移到 AWS。App2Container 会扫描您的 IIS 服务器以确定所需的文件并提取目标应用程序以创建 Docker 映像。您还可以使用 App2Container 创建在 AWS Cloud中托管应用程序所需的部署构件。

  • .NET 或 .NET Core:除了在 Amazon ECS 或 Amazon EKS 上运行较新的基于 .NET 的 Web 应用程序外,您还可以使用 AWS App Runner。App Runner 是一款完全托管的无服务器解决方案,可运行您的代码或容器映像,并管理负载均衡、自动扩缩、日志记录、证书和联网。

重构/重新架构现有代码

如果您有强烈的业务需求,需要添加在应用程序的当前环境中难以实现的功能、规模或性能,请选择此选项。根据应用程序路线图,您可以选择更改代码以使用最新的框架、云原生服务,或重新架构代码以更好地在云中运行。

第一个可用的重构选项是将现有的 .NET Framework 应用程序迁移到 .NET。迁移到 .NET 可为您带来在 Linux 而不是在 Windows 上运行的便利。这样可以降低总许可成本,为您提供最新的框架,并提供最新版本的 .NET 编程语言。

适用于 .NET 的 AWS SDK

适用于 .NET 的 AWS SDK AWS 服务 通过提供一组一致且为.NET 开发人员熟悉的库来简化使用。S AWS DK 提供跨平台支持,使用 NuGet分发。开发人员可以使用 AWS SDK 通过.NET 代码轻松调用云服务,从而满足其应用程序的存储、队列、身份验证和配置要求。

实现 .NET Framework 应用程序现代化

可以使用 Porting Assistant for .NET 从 .NET Framework 迁移,它会扫描您的代码文件并创建有助于规划应用程序组合迁移路线图的报告。适用于.NET 的 Porting Assistant 还可以识别不兼容的.NET 核心 APIs 和软件包,并找到已知的替代方案,从而减少移植开销。AWS Toolkit for .NET Refactoring 是一种 Visual Studio 扩展,可减少开发人员在 AWS上将传统 .NET 应用程序重构为基于云的替代方案所需的时间和精力。它可评估应用程序源代码以推荐可能的现代化途径(例如移植到 .NET Core)、识别特定于 Windows 的 IIS 和 Active Directory 依赖项配置、在可能的情况下执行代码修改以实现 Linux 兼容性,并帮助验证 AWS 服务上重构的应用程序。将.NET Framework 应用程序迁移到.NET 可以让它们在 ARM64基于Graviton的处理器上运行,从而获得更好的性价比。有关更多信息,请参阅 Workshop Studio 文档中 Graviton on 上的.NET GitHub 和 Graviton2 以及使用基于 AWS Graviton 的服务优化成本中的容器。 AWS

从单体到微服务

许多开发团队均希望将其现有的单体应用程序重新架构到微服务中。通过迁移到基于微服务的架构,您的开发团队可以提高开发敏捷性、降低计算成本、单独扩展服务并缩短部署时间。AWS Microservice Extractor for .NET 可简化将较旧的单体应用程序重构到基于微服务的架构的过程。通过识别组件和对功能进行分组,开发团队能够以增量方式将功能从 .NET Framework 单体应用程序中提取到 .NET 服务中。

重构为无服务器应用程序

AWS Lambda 是一项无服务器、事件驱动计算服务,让您能够为几乎任何类型的应用程序或后端服务运行代码,而无需预调配或管理服务器。您可以从现有应用程序中提取逻辑,以创建基于事件的无服务器工作流,这些工作流可在需要时使用 .NET 和 Lambda 自动扩展。Lambda 的常见使用案例包括运行数秒钟或数分钟的事件驱动型工作负载,这些工作负载具有不同的扩展需求,例如文件处理、分析、网站和移动应用程序。有关更多信息,请参阅 Lambda 文档中的使用 C# 构建 Lambda 函数

其他资源