遷移 .NET 應用程式 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

遷移 .NET 應用程式

遷移 .NET 應用程式 AWS 可讓您建立具有彈性擴展功能的高可用性工作負載、降低操作開銷,並透過專注於差異化價值來提高業務敏捷性。

本節著重於在 上託管 .NET 應用程式的不同選項 AWS。您可以選擇使用 VM,一種受管解決方案,例如 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 型工作負載時,您可以使用適用於 .NET 的移植助理AWS Toolkit for .NET Refactoring 來掃描程式碼並產生相容性評估報告。透過找出專案是否參考不相容的 .NET Framework API,即可針對遷移專案的複雜性進行規劃,並決定是否要重構程式碼和進行重構的時機,以使用更新版本的執行期。

  • 檢閱目前的部署:檢查目前遷移的工作負載是否具有可更新的現有 CI/CD 管道,以將相同的工作負載部署至雲端。使用現有的建置和部署管道,即可透過自動化建置、設定及部署工作負載所需的步驟,來縮短將應用程式部署至雲端所需的時間。

  • 檢閱藍圖:視專案目前的狀態而定,您可能已正在規劃重新架構或重新設計應用程式。任何執行的現代化皆應將產品藍圖列入考量。例如,決定容器化現有程式碼或將整合型架構重構為微服務,理想情況下皆屬產品藍圖的一部分,且與其他開發工作保持一致。

調動

遷移 .NET 工作負載時,需要考慮三種不同的遷移路徑 AWS。您可以根據現有程式碼庫的複雜性,分配給遷移的時間,以及分配用於支援遷移工作的團隊規模,在不同的選項之間進行選擇。在遷移過程中考慮現代化時,最佳實務是與產品的藍圖保持一致。

  • 重新託管 (提升和轉移) – 如果您的優先順序更快地遷移到 AWS ,且幾乎沒有變更,您可以選擇此方法。您可以將 ASP.NET 型網站主機轉換至在 Amazon EC2 執行個體中執行的 Internet Information Services (IIS)。您可以將桌面型應用程式 (例如,Windows Presentation Foundation、Web Forms 及 .NET MAUI) 主機轉換至其中一個最終使用者運算平台 (例如,Amazon AppStream 2.0Amazon WorkSpaces)。

  • 平台轉換:當您想要在不變更程式碼的情況下使用受管服務託管應用程式,但想要透過擺脫無差別繁重工作 (例如,安裝、修補、升級及執行個體管理) 來減少營運開銷時,非常適合進行平台轉換。此策略也適用於想要移動至容器型工作負載的團隊。您可以將現有應用程式轉換為 Elastic Beanstalk,或使用 Amazon ECSAmazon EKS 或 上託管的 Docker 容器AWS App Runner

  • 重構:如果您可以投入時間和精力進行程式碼和架構變更,以減少營運開銷,並使用 AWS 雲端原生服務實現更好的擴展、高可用性和災難復原,請選擇此方法。重構涉及透過將現有的 .NET Framework 應用程序移植到 .NET (先前稱為 .NET Core) 或現代化現有的程式碼庫,以更有效地在雲端中執行。您可以使用 從 .NET 程式碼中適用於 .NET 的 AWS SDK呼叫許多 AWS 雲端服務。適用於 .NET 的 Porting Assistant 等工具,AWS Microservice Extractor for .NET可用來將程式碼庫從 .NET Framework 移植到 .NET,並將您的整體應用程式分成微型服務。透過重構現有的 .NET 工作負載以在 上執行AWS Lambda,您可以使用無伺服器運算來避免佈建和管理基礎設施。

遷移

.NET 工作負載遷移的步驟取決於您在評估階段選擇的遷移路徑和應用程式類型。

將 .NET 應用程式主機轉換

如果您想要在不進行任何程式碼變更的情況下遷移應用程式,但想要受益於雲端的自動擴展、負載平衡及彈性,請選擇此遷移路徑。對於 Windows 型網站,重新託管通常意味著在 上的網際網路資訊服務 (IIS) 上執行它們 AWS。如為桌面型應用程式,您必須安裝應用程式,並讓使用者從外部連線至應用程式。

上的網際網路資訊服務 AWS

Internet Information Services (IIS) 是在 Windows 作業系統上執行的 Microsoft Web 服務器,用於託管網站和 Web 服務。IIS 可以安裝在執行 Windows Server 的任何 Amazon EC2 執行個體上。啟用並設定 IIS 之後,您可以透過使用與內部部署環境相同的部署機制來部署 ASP.NET 網站和服務。

如果您在 EC2 Windows 執行個體上託管 IIS,請務必根據您的工作負載和 HADR 需求,使用負載平衡、Auto Scaling 群組和多可用區域部署來遵循 AWS Well-Architected Framework。我們建議您使用 ,AWS Launch Wizard因為它會引導您完成執行 IIS 資源的 Windows Server 工作負載的大小、組態和部署 AWS。Launch Wizard 會部署高可用性架構,此架構可透過新建立或現有之 VPC 所需的運算、聯網及儲存元件合併兩個可用區域。

在 上託管桌面應用程式 AWS

許多用戶端皆需要存取 Windows 複雜型用戶端應用程式。您可以在三種不同的平台之間進行選擇:

  • Amazon EC2:如果您想要使用者透過使用 Microsoft 遠端桌面連線至 Windows Server 環境,請選擇此選項。若要使用此選項,您必須負責修補和維護作業系統。您還必須為使用者和作用中的軟體保證 (SA) 購買額外的遠端桌面服務用戶端存取授權 (RDS CAL)。如需詳細資訊,請參閱 AWS 文件中的 上的 Microsoft 授權 AWS

  • Amazon WorkSpaces:如果您需要為使用者提供全受管虛擬桌面基礎架構 (VDI),請選擇此選項。您可以使用 WorkSpaces 為使用者提供持續性的 Windows 桌面體驗。您也可以自訂 WorkSpaces 環境,並使用自訂映像安裝 .NET 應用程式,或使用 AWS Systems Manager 將 .NET 應用程式交付到您的 WorkSpaces 環境。使用者可以透過使用瀏覽器或 Amazon WorkSpaces 用戶端進行連線。

  • Amazon AppStream 2.0:選擇此選項,即可從任何位置提供安全、可靠且可擴展的應用程式和非持續性桌面存取。您可以使用 AppStream 2.0,讓使用者能夠從網路存取 .NET 應用程式。如果您已經擁有現有的 RDS CAL 和作用中的 SA,則可透過使用授權行動性搭配 AppStream 2.0 使用此類授權。

平台重建

平台轉換涉及在幾乎沒有程式碼變更的情況下變更託管環境。選擇此策略來降低營運開銷,並利用雲端功能和服務。

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 雲端。

  • .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 開發人員一致且熟悉的程式庫,簡化 的使用。 AWS 開發套件提供跨平台支援,並使用 NuGet 進行分發。開發人員可以使用 AWS SDK 從其 .NET 程式碼輕鬆呼叫雲端服務,以滿足其應用程式的儲存、佇列、身分驗證和組態需求。

現代化 .NET Framework 應用程式

您可透過使用適用於 .NET 的移植助理 (此工具會掃描程式碼檔案,並建立可協助規劃應用程式產品組合遷移藍圖的報告) 從 .NET Framework 進行遷移。適用於 .NET 的移植助理也可以透過識別不相容的 .NET Core APIs 和套件,並尋找已知的替代項目來降低移植開銷。AWS Toolkit for .NET 重構是一種 Visual Studio 擴充功能,可減少開發人員將舊版 .NET 應用程式重構為雲端型替代方案所需的時間和精力 AWS。它會評估應用程式原始碼,以建議可能的現代化路徑,例如移植到 .NET Core、識別 Windows 特定的 IIS 和 Active Directory 相依性組態、盡可能執行程式碼修改,以啟用 Linux 相容性,並協助驗證重構的應用程式 AWS 服務。將 .NET Framework 應用程式遷移至 .NET,可讓您在 ARM64 型 Graviton 處理器中執行此類應用程式,以享有更佳的性價比。如需詳細資訊,請參閱 Graviton on GitHub 和 Graviton2 上的 .NET,以及 Workshop Studio 文件中的使用 Graviton 型服務最佳化成本的容器Graviton2。 GitHub AWS AWS

整合型服務至微服務

許多開發團隊想要將現有的整合型應用程式重新架構為微服務。透過移至微服務型架構,您的開發團隊可以提高開發敏捷性、降低運算成本、個別擴展服務,以及縮短其部署時間。 AWS Microservice Extractor for .NET 可簡化將較舊的單體應用程式重構為微服務型架構的程序。透過識別元件和群組功能,開發團隊可以增量改進方式,將 .NET Framework 整合型應用程式的功能擷取至 .NET 服務。

重構為無伺服器應用程式

AWS Lambda 是一種無伺服器、事件驅動的運算服務,可讓您為幾乎任何類型的應用程式或後端服務執行程式碼,而無需佈建或管理伺服器。您可以從現有應用程式擷取邏輯,來建立事件型無伺服器工作流程,以在需要時透過使用 .NET 和 Lambda 自動擴展。Lambda 的常見使用案例包括事件驅動的工作負載,此類工作負載會根據不同擴展需求 (例如,檔案處理、分析、網站及行動應用程式) 執行數秒或數分鐘。如需詳細資訊,請參閱 Lambda 文件中的使用 C# 建置 Lambda 函數

其他資源