在 AWS 上將 ASP.NET 網頁表單應用程式現代化 - AWS 方案指引

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

在 AWS 上將 ASP.NET 網頁表單應用程式現代化

由阿南德·拉馬林甘(AWS)和拜縣斯雷拉克斯米(AWS)創建

環境:PoC 或試點

技術:現代化;容器與微服務 DevelopmentAndTesting;Web 和行動應用程式

工作量:Microsoft

AWS 服務:Amazon CloudWatch; Amazon ECS; AWS Systems Manager

Summary

此模式描述了將傳統的整體 ASP.NET Web 表單應用程式移植到 AWS 上的 ASP.NET 核心來現代化的步驟。

將 ASP.NET 網頁表單應用程式移植到 ASP.NET 核心可協助您充分利用 Linux 的效能、節省成本和強大的生態系統。但是,這可能是一個顯著的手動努力。在此模式中,舊版應用程式會使用階段化方法逐步現代化,然後在 AWS 雲端中進行容器化。

考慮購物車的舊版整體式應用程式。讓我們假設它是建立為 ASP.NET Web 表單應用程式,而且由具有程式碼隱藏 () 檔案的 .aspx 網頁所組成。aspx.cs現代化過程包含以下步驟:

  1. 通過使用適當的分解模式將整體分解為微服務。如需詳細資訊,請參閱 AWS Prescriptive Guidance 網站上的將單位分解為微型服務指南。

  2. 將您的舊版 ASP.NET 網頁表單 (.NET 架構) 應用程式移植到 .NET 5 或更新版本中的 ASP.NET 核心。在此模式中,您可以使用移植助理 .NET 掃描您的 ASP.NET Web 表單應用程式,並識別與 ASP.NET 核心不相容性。這樣可以減少手動移植的工作量。

  3. 通過使用反應重新開發 Web 窗體 UI 層。此模式不涵蓋 UI 重建。如需指示,請參閱 React 文件中的建立新的 React 應用程式。

  4. 重新開發 Web 表單代碼隱藏文件(業務界面)作為 ASP.NET 核心 Web API。此病毒碼使用 NDepend 報告來協助識別必要的檔案和相依性。

  5. 使用 .NET 的移植助理,將舊版應用程式中的共用/一般專案 (例如商務邏輯和資料存取) 升級為 .NET 5 或更新版本。 

  6. 新增 AWS 服務以補充您的應用程式。例如,您可以使用 Amazon CloudWatch 日誌來監控、存放和存取應用程式的日誌,而 AWS Systems Manager 則可以存放應用程式設定。

  7. 容器化現代化的 ASP.NET 核心應用程式。這種模式創建一個碼頭文件,該文件以 Linux 為目標,並使用泊塢窗桌面在本地進行測試。此步驟假設您的舊版應用程式已在現場部署或 Amazon 彈性運算雲端 (Amazon EC2) Windows 執行個體上執行。如需詳細資訊,請參閱在 Amazon EC2 Linux 執行個體上執行 ASP.NET 核心網路 API 泊塢視窗容器模式。

  8. 將現代化的 ASP.NET 核心應用程式部署到 Amazon Elastic Container Service (Amazon ECS)。此模式不涵蓋部署步驟。如需指示,請參閱 Amazon ECS 研討會。

附註:此模式不涵蓋 UI 開發、資料庫現代化或容器部署步驟。

先決條件和限制

先決條件

  • 視覺工作室視覺工作室代碼,下載並安裝。

  • 使用 AWS 管理主控台和 AWS Command Line Interface (AWS CLI) (AWS CLI) 第 2 版存取 AWS 帳戶。(請參閱有關設定 AWS CLI 的指示。)

  • 適用於視覺工作室的 AWS 工具組 (請參閱設定指示)。

  • 碼頭桌面,下載並安裝。

  • . NET SDK,下載並安裝。

  • n 依賴工具,下載並安裝。若要安裝 N 依賴擴充功能,請執行 NDepend.VisualStudioExtension.Installer (請參閱指示說明)。您可以根據您的需求選擇視覺工作室 2019 或 2022 年。 

  • .NET 的移植助手,下載並安裝。

架構

現代化購物車應用程式

下圖說明舊版 ASP.NET 購物車應用程式的現代化程序。

將舊版購物車應用程式現代化

目標架構

下圖說明 AWS 上現代化購物車應用程式的架構。ASP.NET 核心網頁 API 部署到 Amazon ECS 叢集。記錄和組態服務由 Amazon CloudWatch 日誌和 AWS Systems Manager 提供。

AWS 上 ASP.NET 網頁表單應用程式的目標架構

工具

AWS 服務

  • Amazon ECS — 亞馬遜彈性容器服務 (Amazon ECS) 是一種高度可擴展、快速的容器管理服務,用於在叢集上執行、停止和管理容器。您可以在 AWS Fargate 管理的無伺服器基礎設施上執行任務和服務。或者,若要進一步控制基礎設施,您可以在您管理的 EC2 執行個體叢集上執行任務和服務。

  • Amazon CloudWatch 日誌 — Amazon CloudWatch 日誌會集中您使用的所有系統、應用程式和 AWS 服務的日誌。您可以檢視和監視記錄、搜尋特定錯誤代碼或模式、根據特定欄位對其進行篩選,或安全地將其封存以供日 future 分析。

  • AWS Systems Manager ─ AWS Systems Manager 是一項 AWS 服務,可讓您在 AWS 上檢視和控制基礎設施。您可以使用 Systems Manager 主控台檢視來自多個 AWS 服務的操作資料,並自動化 AWS 資源的操作任務。Systems Manager 會掃描您的代管執行個體,並針對偵測到的任何原則違規報告 (或採取修正措施),協助您維護安全性與合規性。

工具

  • 視覺工作室視覺工作室代碼 — 用於構建. NET 應用程序,網絡 API 和其他程序的工具。

  • 適用 AWS Toolkit for Visual Studio — 適用於 Visual Studio 的擴充功能,可協助開發、偵錯和部署使用 AWS 服務的 .NET 應用程式。

  • Docker 桌面 — 可簡化建置和部署容器化應用程式的工具。

  • nDepen d — 監視 .NET 代碼的依賴關係,質量問題和代碼更改的分析器。

  • .NET 移植助理 — 一種分析工具,可掃描 .NET 代碼以識別與 .NET Core 的不兼容性並估計遷移工作量。

史诗

任務描述所需技能

將您的 .NET 框架舊版應用程序升級到 .NET 5。

您可以使用 .NET 的移植助理程式,將舊版 ASP.NET Web 表單應用程式轉換為 .NET 5 或更新版本。請遵循 .NET 文件的移植助理中的指示。

應用程式開發人員

產生 N 依賴報告。

當您將 ASP.NET Web Form 應用程式分解為微服務來現代化時,您可能不需要舊版應用程式中的所有 .cs 檔案。您可以使用 NDepend 產生任何程式碼隱藏 (.cs) 檔案的報告,以取得所有呼叫者和呼叫者。此報告可協助您識別並僅使用微服務中所需的檔案。

安裝 nDepend 之後 (請參閱 [必要條件] 區段),請在 Visual Studio 中開啟舊版應用程式的解決方案 (.sln 檔案),然後依照下列步驟執行︰

  1. 在中建置舊版應用程式。

  2. 在 [視覺工作室] 功能表列上,選擇 [依賴],[將新的 N 依賴專案附加至目前的 VS 解決方案。 

  3. 選擇「分析 .NET 組合」。 

  4. 分析完成後,瀏覽至 [方案總管] 中的專案。以滑鼠右鍵按一下您要產生報表的任何程式碼後置檔案 (例如,listproducts.aspx.cs),然後選擇 [在相依性圖表上顯示]。 

  5. 在導覽列中,選擇 [來電者和來電者],然後選擇 [編輯程式碼查詢]。 

  6. 在 [查詢和規則編輯] 窗格中,選擇下載箭頭,然後選擇 [匯出至 Excel]。

此程序會產生程式碼後置檔案的報告,其中列出所有呼叫者和呼叫者。如需相依性圖形的詳細資訊,請參閱 nDepend 說明文件

應用程式開發人員

建立新的 .NET 5 解決方案。

要為現代化的 ASP.NET 核心 Web API 創建一個新的 .NET 5(或更高版本)結構:

  1. 開啟視覺工作室。

  2. 建立新的空白解決方案。

  3. 根據您的舊版應用程式,建立以 .NET 5 (或更新版本) 為目標的新專案。如需購物車應用程式的舊專案和新專案範例,請參閱「其他資訊」一節。

  4. 使用上一個步驟中的 nDepend 報告來識別所有必要的檔案。從先前升級的應用程式複製這些檔案,並將其新增至新的解決方案。

  5. 建置解決方案並修正所有問題。

如需有關建立專案和解決方案的詳細資訊,請參閱 Visual Studio 文件

注意當您建置解決方案並驗證功能時,除了 nDepend 識別的檔案之外,您可能會識別要新增至解決方案的其他檔案。

應用程式開發人員
任務描述所需技能

使用 ASP.NET 核心實作網頁 API。

假設您在舊版整體購物車應用程式中識別的其中一個微服務是「產品」。您建立了一個新的 ASP.NET 核心 Web API 專案的產品在先前的史詩。在此步驟中,您會識別與產品相關的所有 Web 表單 (.aspx 頁面) 並將其現代化。假設「產品」由四個 Web 表單組成,如前面「架構」一節所示:

  • 列出產品

  • 查看產品

  • 新增/編輯產品

  • 刪除產品

您應該分析每個 Web 表單,確定發送到數據庫以執行某些邏輯的所有請求,並獲得響應。您可以將每個請求實作為 Web API 端點。鑑於其 Web 表單,產品可以具有以下可能的端點:

  • /api/products

  • /api/products/{id}

  • /api/products/add

  • /api/products/update/{id}

  • /api/products/delete/{id}

如前所述,您還可以重複使用升級到 .NET 5 的所有其他項目,包括業務邏輯,數據訪問和共享/通用項目。

應用程式開發人員

設定 Amazon CloudWatch 日誌。

您可以使用 Amazon CloudWatch 日誌來監控、存放和存取應用程式的日誌。您可以使用 AWS 開發套件將資料登入 Amazon CloudWatch 日誌。您也可以使用常用的 .NET 記 CloudWatch 錄架構 (例如 NLogLog4NetASP.NET 核心記錄架構),將 .NET 應用程式與記錄整合。

如需有關此步驟的詳細資訊,請參閱 Amazon CloudWatch 日誌和 .NET 記錄架構的部落格文章。

應用程式開發人員

設定 AWS Systems Manager Parameter Store。

您可以使用 AWS Systems Manager Parameter Store 將應用程式設定 (例如連接字串) 與應用程式的程式碼分開存放。該 NuGet 軟件包亞馬遜。擴展。 SystemsManager簡化應用程式將這些設定從 AWS Systems Manager Parameter Store 載入 .NET 核心組態系統的方式。 

如需有關此步驟的詳細資訊,請參閱部落格文章 AWS Systems Manager 的 .NET 核心組態提供者

應用程式開發人員
任務描述所需技能

使用共享 cookie 進行身份驗證。

將傳統的整體式應用程式現代化是一個反覆的程序,需要整體式及其現代化版本共存。您可以使用共享 cookie 來實現兩個版本之間的無縫身份驗證。舊版 ASP.NET 應用程式會繼續驗證使用者認證,並在現代化的 ASP.NET 核心應用程式驗證 Cookie 時發出 Cookie。 

如需指示和範例程式碼,請參閱範例 GitHub 專案

應用程式開發人員
任務描述所需技能

通過使用視覺工作室創建碼頭映像。

在此步驟中,您可以使用適用於 .NET 核心網頁 API 的視覺工作室建立碼頭檔案。

  1. 開啟視覺工作室。 

  2. 在解決方案資源管理器中,從項目的上下文(右鍵單擊)菜單中,選擇添加,Docker Support

  3. 選取 Linux 作為目標作業系統

視覺工作室創建一個碼頭文件為您的項目。如需碼頭檔案範例,請參閱 Microsoft 網站上的泊塢視覺工具

應用程式開發人員

使用 Docker 桌面構建和運行容器。

現在,您可以在 Docker 桌面中構建,創建和運行容器。

  1. 開啟命令提示視窗。導航到 Docker 文件所在的解決方案文件夾。執行下列命令以建立 Docker 映像檔:

    docker build -t aspnetcorewebapiimage -f Dockerfile .
  2. 執行下列命令以檢視所有 Docker 映像檔:

    docker images
  3. 執行下列命令以建立並執行容器:

    docker run -d -p 8080:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage
  4. 開啟 Docker 桌面,然後選擇 [容器/應用程式]。您可以看到一個名為aspnetcorewebapicontainer 正在運行的新容器。

應用程式開發人員

相關資源

其他資訊

下表提供舊版購物車應用程式的範例專案範例,以及現代化 ASP.NET Core 應用程式中的對等專案。

傳統解決方案:

專案名稱

專案範本

目標框架

業務介面

類別圖書館

.NET Framework

BusinessLogic

類別圖書館

.NET Framework

WebApplication

框架網頁應用程式

.NET Framework

UnitTests

nUnit 測試項目

.NET Framework

共用-> 通用

類別圖書館

.NET Framework

共享-> 框架

類別圖書館

.NET Framework

新解決方案:

專案名稱

專案範本

目標框架

BusinessLogic

類別圖書館

.NET 5.0

<WebAPI>

核心網頁 API

.NET 5.0

<WebAPI>。 UnitTests

nUnit 3 測試專案

.NET 5.0

共用-> 通用

類別圖書館

.NET 5.0

共享-> 框架

類別圖書館

.NET 5.0