將內部部署應用程式重構為 App Service Web 應用程式和 SQL 受控實例
本文示範虛構公司 Contoso 如何在移轉到 Azure 的過程中,重構在 VMWare 虛擬機器 (VM) 上執行的雙層式 Windows .NET 應用程式。 Contoso 小組會將應用程式前端 VM 移轉至 Azure App Service Web 應用程式。 本文也會說明 Contoso 如何將應用程式資料庫移轉至 Azure SQL 受控執行個體。
此範例中使用的 SmartHotel360 應用程式會以開放原始碼軟體的形式提供。 如果想將其用於自己的測試目的,您可以從 GitHub 下載。
商業動機
Contoso IT 領導小組與商務合作夥伴密切合作,以瞭解他們想要透過此移轉達成什麼目的:
- 因應業務成長。 Contoso 正在成長,而且公司的內部部署系統和基礎結構有壓力。
- 提高效率。 Contoso 必須移除不必要的程序,並且簡化開發人員和使用者的程序。 企業亟需快速且不浪費時間或金錢的 IT 服務,進而更快滿足客戶的需求。
- 提高靈活性。 Contoso IT 必須能夠更快因應企業的需求。 為了在全球化經濟中成功,公司必須能夠比市集中的變更更快回應。 反應時間不得因應或成為商務封鎖程式。
- 擴充。 隨著業務成長,Contoso IT 必須提供可以相同步調成長的系統。
- 降低成本。 Contoso 想要將授權費用降至最低。
移轉目標
為了協助判斷最佳移轉方法,Contoso 雲端小組建立了下列目標:
需求網域 | 詳細資料 |
---|---|
應用程式 | Azure 中的應用程式會像目前處於內部部署環境中一樣的重要。 應用程式應該具有目前在 VMware 上擁有的相同效能功能。 該小組不想在這個應用程式上投注資源。 現在,系統管理員只會安全地將應用程式移至雲端。 該小組想要停止支援應用程式目前執行所在的 Windows Server 2008 R2。 小組也想要從 SQL Server 2008 R2 移至新式平臺即服務, (PaaS) 資料庫,這可將管理的需求降到最低。 Contoso 想要盡可能利用其投資SQL Server授權和軟體保證。 Contoso 想要減輕 Web 層的單一失敗點。 應用程式包含 ASP.NET 應用程式和 Windows Communication Foundation (在單一 VM 上執行的 WCF) 服務。 Contoso 想要使用 App Service,將這些元件分散到兩個 Web 應用程式。 |
Azure | Contoso 想要將應用程式移至 Azure,但不想在 VM 上執行。 Contoso 想要針對 Web 和資料層使用 Azure PaaS 服務。 |
DevOps | Contoso 想要移至使用 Azure DevOps 建置和發行管線的 DevOps 模型。 |
解決方案設計
判斷目標和需求之後,Contoso 會設計和檢閱部署解決方案。 小組也會識別移轉程式,包括將用於移轉的 Azure 服務。
目前的應用程式
- SmartHotel360 內部部署應用程式會分層在兩部 VM、WEBVM 和 SQLVM 之間。
- VM 位於 VMware ESXi 6.5 主機 contosohost1.contoso.com。
- VMware 環境是由 vCenter Server 6.5 (vcenter.contoso.com) 所管理,可在 VM 上執行。
- Contoso 具有內部部署資料中心 (contoso-datacenter) ,而內部部署網域控制站 (contosodc1) 。
- 移轉完成之後,將會解除委任 Contoso 資料中心的內部部署 VM。
建議的解決方案
- 針對應用程式 Web 層,Contoso 將使用App Service。 Contoso 可以使用這個 PaaS 服務來部署只有一些組態變更的應用程式。 Contoso 會使用 Visual Studio 進行變更,他們會部署兩個 Web 應用程式,一個用於網站,另一個用於 WCF 服務。
- 為了滿足 DevOps 管線的需求,Contoso 會使用 Azure DevOps 搭配 Git 存放庫來進行原始程式碼管理。 他們會使用自動化組建和發行來建置程式碼,並將其部署至App Service。
資料庫考量
在解決方案設計過程中,Contoso 會將 Azure SQL Database 的功能與SQL 受管理執行個體的功能進行比較。 小組會根據下列考慮決定使用SQL 受管理執行個體:
- SQL 受控執行個體的目標是為最新版內部部署 SQL Server 提供幾乎 100% 的相容性。 Microsoft 建議針對在內部部署或基礎結構即服務 (IaaS) VM 執行SQL Server內部部署或基礎結構即服務且想要將其應用程式移轉至完全受控服務且設計變更最少的組織SQL 受管理執行個體。
- Contoso 計畫將大量應用程式從內部部署移轉至 IaaS VM。 這些 VM 當中有許多都是由獨立軟體廠商所提供。 Contoso 小組發現,使用SQL 受管理執行個體有助於確保這些應用程式的資料庫相容性。 它們將使用 SQL 受控執行個體,而不是可能不支援的 SQL Database。
- Contoso 可以使用完全自動化的Azure 資料移轉服務,執行隨即轉移至SQL 受管理執行個體。 Contoso 也可以重複使用此服務以供未來的資料庫移轉使用。
- SQL 受控執行個體支援 SQL Server Agent,這是 SmartHotel360 應用程式的重要元件。 Contoso 需要此相容性。 否則,他們必須重新設計應用程式所需的維護計畫。
- 透過軟體保證,Contoso 可以使用 sql 受控實例上的折扣費率交換其目前授權,方法是使用 Azure Hybrid Benefit 進行SQL Server。 這可讓 Contoso 使用 SQL 受管理執行個體節省多達 30%。
- SQL 受控實例完全包含在虛擬網路中,因此它為 Contoso 的資料提供更好的隔離和安全性。 Contoso 可享有公用雲端的優勢,同時讓環境與公用網際網路保持隔離。
- SQL 受管理執行個體支援許多安全性功能,包括Always Encrypted、動態資料遮罩、Row-Level安全性和威脅偵測。
解決方案檢閱
Contoso 小組會藉由編譯優缺點清單來評估其建議的設計:
考量 | 詳細資料 |
---|---|
優點 | SmartHotel360 應用程式程式碼無需變更,即可移轉到 Azure。 Contoso 可以使用 SQL Server 和 Windows Server 的 Azure Hybrid Benefit,利用其在軟體保證中的投資。 移轉之後,Contoso 不需要支援 Windows Server 2008 R2。 如需詳細資訊,請參閱 Microsoft 生命週期原則。 Contoso 可以使用多個執行個體來設定應用程式的 Web 層,使 Web 層不再是單一失敗點。 資料庫不會再依賴過時的 SQL Server 2008 R2。 SQL 受控執行個體可援 Contoso 的技術需求和目標。 SQL 受控實例會提供與目前部署的 100% 相容性,同時離開 SQL Server 2008 R2。 Contoso 可以重複使用資料移轉服務以供未來移轉使用。 SQL 受控執行個體具有 Contoso 不需設定的內建容錯功能。 此容錯可確保資料層不再是單一容錯移轉點。 |
缺點 | App Service每個 Web 應用程式只支援一個應用程式部署。 因此必須布建兩個 Web 應用程式,一個用於網站,另一個用於 WCF 服務。 在資料層中,如果 Contoso 想要自訂作業系統或資料庫伺服器,或是想要執行第三方應用程式以及 SQL Server,SQL 受控執行個體可能不是最佳解決方案。 在 IaaS VM 上執行 SQL Server 可提供此種彈性。 |
建議的架構
移轉程序
- Contoso 會布建Azure SQL受控實例,然後使用 資料移轉服務 將 SmartHotel360 資料庫移轉至該實例。
- Contoso 會佈建並設定 Web 應用程式,然後對其部署 SmartHotel360 應用程式。
Azure 服務
服務 | 描述 | 成本 |
---|---|---|
App Service移轉助理 | 免費的易用工具,可協助您將 .NET Web 應用程式從內部部署移轉至雲端,且程式碼變更最少或無任何變更。 | 此工具可免費下載。 |
Database Migration Service | 您可以使用 Azure 服務,從多個資料庫來源移轉至 Azure 資料平臺,且停機時間最少。 | 請參閱Azure 資料移轉服務定價和支援的區域。 |
SQL 受控執行個體 | 受控資料庫服務,表示 Azure 上完全受控SQL Server實例。 它會使用與最新版SQL Server資料庫引擎相同的程式碼,並具有最新的功能、效能改進和安全性修補程式。 | 在 Azure 上使用 SQL 受控實例會根據容量產生費用。 深入了解 SQL 受控執行個體定價。 |
Azure App Service | 一項服務,可協助您建立使用完全受控平臺的強大雲端應用程式。 | 定價會以大小、位置和使用期間為依據。 深入了解 App Service 定價。 |
Azure Pipelines | 提供持續整合和持續傳遞的服務, (CI/CD) 管線來進行應用程式開發。 管線會從 Git 存放庫開始管理應用程式程式碼、用於產生套件和其他組建成品的建置系統,以及用於部署開發、測試和生產環境的變更發行管理系統。 | 瞭解 Azure Pipelines 定價。 |
必要條件
若要實作此案例,Contoso 必須符合下列必要條件:
需求 | 詳細資料 |
---|---|
Azure 訂用帳戶 | Contoso 已在本系列稍早的文章中建立訂用帳戶。 如果您沒有 Azure 訂用帳戶,請建立免費帳戶。 如果您建立免費帳戶,您就是訂用帳戶的管理員,並可執行所有動作。 如果您使用現有的訂用帳戶,而且您不是系統管理員,系統管理員必須將擁有者或參與者許可權指派給您。 |
Azure 基礎結構 | Contoso 會依照 Azure 基礎結構進行移轉中所述來設定 Azure 基礎結構。 |
案例步驟
以下是 Contoso 執行移轉的方式:
- 步驟 1:評定及移轉 Web 應用程式。 Contoso 使用App Service移轉小幫手來執行移轉前相容性檢查,並將 Web 應用程式移轉至App Service。
- 步驟 2:設定 SQL 受控執行個體。 Contoso 需要現有的受控執行個體,以作為內部部署 SQL Server 資料庫的移轉目的地。
- 步驟 3:使用 資料移轉服務 進行移轉。 Contoso 會使用 資料移轉服務 來移轉應用程式資料庫。
- 步驟 4:設定 Azure DevOps。 Contoso 會建立新的 Azure DevOps 專案,並匯入 Git 存放庫。
- 步驟 5:設定連接字串。 Contoso 會設定連接字串,以便 Web 層的 Web 應用程式、WCF 服務的 Web 應用程式和 SQL 受控執行個體進行通訊。
- 步驟 6:在 Azure DevOps 中設定建置和發行管線。 在最後一個步驟中,Contoso 會在 Azure DevOps 中設定組建和發行管線,以建立應用程式。 小組接著將管線部署至兩個個別的 Web 應用程式。
步驟 1:評定及移轉 Web 應用程式
Contoso 系統管理員會使用App Service移轉小幫手來評估和移轉其 Web 應用程式。 他們會使用移 轉 ASP.NET 應用程式至 Azure 學習路徑,作為程式中的指南。 管理員會執行下列動作:
他們使用App Service移轉評估工具來評估其 Web 應用程式之間的任何相依性,以及判斷其內部部署 Web 應用程式與App Service支援的內容之間是否有任何不相容。
他們會下載App Service移轉助理,並登入其 Azure 帳戶。
他們會選擇訂閱、資源群組和網站的網域名稱。
步驟 2:設定 SQL 受控執行個體
若要設定Azure SQL受控實例,Contoso 需要符合下列需求的子網:
- 此子網路必須是專用的。 其必須是空白的。 其不能包含任何其他雲端服務。 子網路不能是閘道子網路。
- 建立受控實例之後,Contoso 不應該將資源新增至子網。
- 子網路不能有與其相關聯的網路安全性群組。
- 子網路必須有使用者定義的路由表。 唯一指派的路由應該是 0.0.0.0/0 下一個躍點網際網路。
- 如果為虛擬網路指定選擇性自訂 DNS,則必須將 Azure 上遞迴解析程式的虛擬 IP 位址 168.63.129.16 新增至清單。 了解如何設定 Azure SQL 受控執行個體的自訂 DNS。
- 子網路不得有相關聯的服務端點 (儲存體或 SQL)。 虛擬網路上應該停用服務端點。
- 子網必須至少有 16 個 IP 位址。 了解如何調整受控執行個體子網路的大小。
- 在 Contoso 的混合式環境中,需要有自訂 DNS 設定。 Contoso 會將 DNS 設定配置為使用公司的其中一或多部 Azure DNS 伺服器。 深入了解 DNS 自訂。
設定受控執行個體的虛擬網路
Contoso 管理員會設定虛擬網路,如下所示:
他們會在美國東部 2) (主要區域中建立虛擬網路 (VNET-SQLMI-EUS2) 。 他們會在 ContosoNetworkingRG 資源群組中建立虛擬網路。
他們會指派 10.235.0.0/24 位址空間。 他們確定範圍不會與企業中的其他網路重迭。
他們會將兩個子網路新增到網路:
SQLMI-DB-EUS2 (10.235.0.0/25) 。
SQLMI-SAW-EUS2 (10.235.0.128/29)。 此子網路用來將目錄連結到受控執行個體。
部署虛擬網路和子網路之後,他們會將網路對等互連,如下所示:
對等 VNET-SQLMI-EUS2 與 VNET-HUB-EUS2 (美國東部 2 的中樞虛擬網路) 。
對等 VNET-SQLMI-EUS2 與 VNET-PROD-EUS2 (生產網路) 。
他們可設定自訂 DNS 設定。 DNS 設定首先會指向 Contoso 的 Azure 網域控制站。 而後指向 Azure DNS。 Contoso Azure 網域控制站的位置如下所示:
它們位於美國東部 2 區域中生產網路的 PROD-DC-EUS2 子網 (VNET-PROD-EUS2) 。
CONTOSODC3 位址:10.245.42.4
CONTOSODC4 位址:10.245.42.5
Azure DNS 解析程式:168.63.129.16
需要其他協助?
- 閱讀 SQL 受控執行個體概觀。
- 了解如何建立 SQL 受控執行個體的虛擬網路。
- 了解如何設定對等互連。
- 了解如何更新 Azure Active Directory DNS 設定。
設定路由
受控執行個體會置於私人虛擬網路中。 Contoso 需要路由表,才能讓虛擬網路與 Azure 管理服務通訊。 如果虛擬網路無法與管理它的服務通訊,則會變成無法存取。
Contoso 會考量下列因素:
- 路由表包含一組規則 (路由),可指定從受控執行個體傳送的封包應如何在虛擬網路中路由傳送。
- 路由表會與受控執行個體部署所在的子網路相關聯。 每個離開子網路的封包都會依據相關聯的路由表進行處理。
- 一個子網路只能與一個路由表相關聯。
- 在 Azure 上建立路由表不需要額外費用。
若要設定路由,Contoso 系統管理員會完成下列步驟:
他們會在 ContosoNetworkingRG 資源群組中建立使用者定義的路由表:
為了符合SQL 受管理執行個體需求,部署 MIRouteTable (路由表) 之後,系統管理員會新增位址首碼為 0.0.0.0/0的路由。 他們會將 [下一個躍點類型] 值設定為 [網際網路]:
它們會將路由表與 VNET-SQLMI-EUS2 網路中 SQLMI-DB-EUS2 子網建立關聯:
需要其他協助?
了解如何設定受控執行個體的路由。
建立受控執行個體
接下來,Contoso 管理員會完成下列步驟來布建 SQL 受控實例:
因為受控執行個體會提供一個商務應用程式,所以管理員會在公司的主要區域 (美國東部 2) 中部署受控執行個體。 他們會將受控實例新增至 ContosoRG 資源群組。
他們會選取實例的定價層、計算大小和儲存體。 深入了解 SQL 受控執行個體定價。
部署受控實例之後,ContosoRG 資源群組中會出現兩個新資源:
SQL 受控執行個體。
虛擬叢集 (假使 Contoso 有多個受控執行個體)。
需要其他協助?
了解如何佈建受控執行個體。
步驟 3:使用 資料移轉服務 移轉
Contoso 系統管理員會使用 資料移轉服務 來移轉受控實例。 他們會遵循 逐步移轉教學課程中的指示。 他們可以執行線上、離線和混合式 (預覽) 移轉。
Contoso 系統管理員會完成下列步驟:
- 他們會使用連線至虛擬網路的進階 SKU 來建立資料移轉服務實例。
- 它們可確保資料移轉服務可以透過虛擬網路存取遠端SQL Server實例。 此步驟牽涉到確保允許所有連入埠從 Azure SQL Server虛擬網路層級、網路 VPN,以及裝載SQL Server的電腦。
- 他們會設定資料移轉服務:
- 建立移轉專案。
- 新增來源 (內部部署資料庫)。
- 選取目標。
- 選取要移轉的資料庫。
- 設定進階設定。
- 開始複寫。
- 解決任何錯誤。
- 執行最終完全移轉。
步驟 4:設定 Azure DevOps
Contoso 需要為應用程式建置 DevOps 基礎結構和管線。 為此,Contoso 管理員會建立新的 DevOps 專案、匯入程式碼,然後設定建置和發行管線。
在 Contoso Azure DevOps 帳戶中,他們會建立新的專案 ContosoSmartHotelRefactor,然後選取 Git 進行版本控制。
他們匯入目前保有其應用程式程式碼的 Git 存放庫。 他們從公用 GitHub 存放庫進行下載。
他們將 Visual Studio 連線到存放庫,然後使用 Team Explorer 將程式碼複製到開發人員電腦。
他們開啟應用程式的方案檔。 Web 應用程式和 WCF 服務在檔案內擁有個別的專案。
步驟 5:設定連接字串
Contoso 管理員確保 Web 應用程式和資料庫能夠彼此通訊。 若要這樣做,須在程式碼和 Web 應用程式中設定連接字串。
在 WCF 服務的 Web 應用程式中,SHWCF-EUS2 在 [設定>應用程式設定] 底下,新增名為
DefaultConnection
的新連接字串。他們會從 SmartHotel-Registration 資料庫提取連接字串,然後使用正確的認證加以更新:
在 Visual Studio 中,系統管理員會從方案檔開啟 SmartHotel.Registration.wcf 專案。 在專案中,他們會藉由新增連接字串來更新
connectionStrings
web.config檔案的 區段:他們會更新
client
SmartHotel.Registration.Web web.config 檔案的 區段,使其指向 WCF 服務的新位置。 指標是裝載服務端點之 WCF Web 應用程式的 URL。系統管理員會在 Visual Studio 中使用 Team Explorer 認可並同步程式碼變更。
步驟 6:在 Azure DevOps 中設定建置和發行管線
Contoso 管理員現在會設定 Azure DevOps 以執行建置和發行程序。
在 Azure DevOps 中,他們會選取[建置併發行>新管線]:
他們會選取Azure Repos Git和相關存放庫:
在 [選取範本]下,他們會選取其組建 ASP.NET 範本:
他們會針對組建使用 名稱 ContosoSmartHotelRefactor-ASP.NET-CI ,然後選取 [ 儲存 & 佇列],以起始第一個組建。
他們會選取組建編號,以便監看程式。 程式完成之後,系統管理員可以查看程式意見反應。 他們會選取 [成品] 以檢閱組建結果:
[ 成品總管 ] 視窗隨即開啟。 建置結果會顯示在 drop 資料夾中。
- 這兩個 .zip 檔案是包含應用程式的套件。
- 這些.zip檔案會用於發行管線中,以便部署至App Service。
他們會選取[發行>新管線]:
他們會選取App Service的部署範本:
他們會將發行管線命名為 ContosoSmartHotel360Refactor ,然後在 [ 階段名稱 ] 方塊中,將 SHWCF-EUS2 指定為 WCF Web 應用程式的名稱:
在階段下,他們會選取 1 個作業、1 個工作來設定 WCF 服務的部署:
他們會確認已選取並授權訂用帳戶,然後選取應用程式服務名稱:
在管線上,他們會選取 [ 成品]、選取 [ 新增成品]、選取 [ 建 置] 作為來源類型,然後使用 ContosoSmarthotel360Refactor 管線進行建置:
若要啟用持續部署觸發程式,系統管理員會選取成品上的閃電按鈕:
他們會將持續部署觸發程式設定為 [已啟用]:
系統管理員回到階段1 作業、1 個工作,然後選取 [部署Azure App 服務:
在 [選取檔案或資料夾] 下,他們會展開 置 放資料夾、選取建置期間建立 的SmartHotel.Registration.Wcf.zip 檔案,然後選取 [ 儲存]:
他們會選取[管線>階段],然後選取 [新增] 以新增 SHWEB-EUS2 的環境。 他們會選取另一個 Azure App Service 部署。
他們會重複程式,將 Web 應用程式 SmartHotel.Registration.Web.zip 檔案發佈至正確的 Web 應用程式,然後選取 [ 儲存]:
發行管線隨即顯示,如下所示:
他們會返回 [建置],選取 [觸發程式],然後選取 [ 啟用持續整合]。 此動作會啟用管線,以便在認可程式碼的變更時發生完整組建和發行。
他們會選取 [ 儲存 & 佇列 ] 以執行完整的管線。 會觸發新的組建,進而將應用程式的第一個版本建立至App Service。
Contoso 管理員可以依循來自 Azure DevOps 的建置和發行管線程序。 建置完成之後,發行會啟動:
當管線完成時,會部署這兩個月臺,且應用程式正在線上執行:
應用程式已成功遷移至 Azure。
移轉後清除
移轉之後,Contoso 小組會完成下列清除步驟:
- 他們會從 vCenter 清查中移除內部部署 VM。
- 他們會從本機備份作業中移除 VM。
- 他們會更新其內部文件,以顯示 SmartHotel360 應用程式的新位置。 檔顯示資料庫是在 SQL 受控實例中執行,而且前端會在兩個 Web 應用程式中執行。
- 他們會檢閱與已解除委任 VM 互動的任何資源,並更新任何相關的設定或文件,以反映新的組態。
檢閱部署
將資源遷移至 Azure 之後,Contoso 必須完整運作新的基礎結構,並為它提供安全性。
安全性
- Contoso 為新的SmartHotel-Registration資料庫提供安全性。 如需詳細資訊,請參閱Azure SQL資料庫和SQL 受管理執行個體安全性。
- 特別是,Contoso 會將 Web 應用程式更新為搭配使用 SSL 與憑證。
備份
- Contoso 小組會檢閱 SQL 受管理執行個體 中資料庫的備份需求。 如需詳細資訊,請參閱Azure SQL 資料庫中的自動備份。
- 他們也了解如何管理 SQL Database 備份和還原。 如需詳細資訊,請參閱 自動備份。
- 他們考慮實作容錯移轉群組,為該資料庫提供區域性容錯移轉。 如需詳細資訊,請參閱 自動容錯移轉群組概觀。
- 他們考慮在美國東部 2) 的主要區域 (部署 Web 應用程式,以及 (美國中部) 的次要區域,以進行復原。 該團隊可以設定流量管理員,以確保在發生區域性中斷時進行容錯移轉。
授權和成本最佳化
- 部署所有資源之後,Contoso 會指派在 基礎結構規劃期間決定的 Azure 標籤。
- 所有授權都是內建在 Contoso 取用的 PaaS 服務成本中。 此費用會從 Enterprise 合約中扣除。
- Contoso 會使用 Azure 成本管理和計費 ,以確保其在 IT 領導階層所建立的預算內運作。
結論
在本文中,Contoso 已將應用程式前端 VM 移轉至兩個 App Service Web 應用程式,以重構 Azure 中的 SmartHotel360 應用程式。 Contoso 已將應用程式資料庫移轉至Azure SQL受控實例。