本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
迁移 .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 .NET
或 AWS 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 ECS 、Amazon EKS 或 AWS App Runner 上托管的 Docker 容器。 -
重构 — 如果您可以投入时间和精力进行代码和架构更改,从而减少运营开销,并通过使用 AWS 云原生服务实现更好的扩展、高可用性和灾难恢复,请选择这种方法。重构涉及到通过将现有 .NET Framework 应用程序移植到 .NET(以前称为 .NET Core)或对现有代码库进行现代化改造以在云中更好地运行来实现代码库的现代化改造。您可以使用适用于 .NET 的 AWS SDK
从 .NET 代码中调用许多 AWS 云服务。诸如 Porting Assistant for .NET 和 AWS 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
在上托管桌面应用程序 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
要了解更多信息,请参阅以下资源:
-
Creating and deploying .NET applications on Elastic Beanstalk(Elastic Beanstalk 文档)
-
Working with .NET Core on Linux(Elastic Beanstalk 文档)
-
Multi-App Support 支持带有自定义域的.NET 和 AWS Elastic Beanstalk
(AWS 开发者工具博客)
容器化现有应用程序
您可以使用 Amazon ECS 或 Amazon EKS 来托管基于 Docker 的容器化应用程序。 AWS 管理这两项服务。这两者之间的选择取决于现有的知识和偏好。这两个选项均可以运行基于 Linux 的容器或基于 Windows 的容器。
要了解更多信息,请参阅以下资源:
-
亚马逊 EC2 Windows 容器(亚马逊 ECS 文档)
-
为 Amazon EKS 集群启用 Windows 支持(Amazon EKS 文档)
-
Running Windows Containers with Amazon ECS on AWS Fargate
(AWS Blog)
对基于 .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
实现 .NET Framework 应用程序现代化
可以使用 Porting Assistant for .NET
从单体到微服务
许多开发团队均希望将其现有的单体应用程序重新架构到微服务中。通过迁移到基于微服务的架构,您的开发团队可以提高开发敏捷性、降低计算成本、单独扩展服务并缩短部署时间。AWS Microservice Extractor for .NET
重构为无服务器应用程序
AWS Lambda
其他资源
-
AWS Toolkit for Azure DevOps
(AWS 文档) -
通过将 Jenkins 与 AWS CodeBuild 和集成 AWS CodeDeploy(AWS DevOps 博客)来设置 CI/CD 管道
-
关于.NET AWS 部署工具
(AWS GitHub) -
.NET 开启 AWS
(AWS 文档) -
aws/dotn
et () GitHub