將應用程式移轉到 Azure App Service 和 SQL Database

本文示範虛構公司 Contoso 如何在移轉到 Azure 的過程中,重構在 VMware VM 上執行的兩層式 Windows .NET 應用程式。 Contoso 團隊會將應用程式前端虛擬機器 (VM) 移轉到 Azure App Service Web 應用程式,並將應用程式資料庫移轉到 Azure SQL Database。

我們在此範例中使用的 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 應用程式,以及在相同 VM 上執行的 Windows Communication Foundation (WCF) 服務所組成。 他們想要使用 Azure App Service,將這些元件分散到兩個 Web 應用程式。
Azure Contoso 想要將應用程式移至 Azure,但不想在 VM 上執行。 Contoso 想要使用 Web 和資料層的 Azure PaaS 服務。
DevOps Contoso 想要移至 DevOps 模型,以使用 Azure DevOps 來處理其建置和發行管線。

解決方案設計

Contoso 在擬定目標和需求之後,會設計和檢閱部署解決方案。 他們也會識別移轉程序,包括將用於移轉的 Azure 服務。

目前的應用程式

  • SmartHotel360 內部部署應用程式會分層至兩個 VM:WEBVMSQLVM
  • 這些 VM 位於 VMware ESXi 主機 contosohost1.contoso.com 6.5 版。
  • VMware 環境是由 VM 上執行的 vCenter Server 6.5 (vcenter.contoso.com) 進行管理。
  • Contoso 有內部部署資料中心 (contoso-datacenter) 以及內部部署網域控制站 (contosodc1)。
  • 移轉完成之後,將會解除委任 Contoso 資料中心的內部部署 VM。

建議的解決方案

  • 針對應用程式的資料庫層,Contoso 參考了功能比較:Azure SQL Database 和 Azure SQL 受控執行個體,來比較 Azure SQL Database 和 SQL Server。 基於以下幾個原因,Contoso 決定使用 Azure SQL Database:
    • Azure SQL Database 是受控關聯式資料庫服務。 其在多個服務層級上提供可預測的效能,而且幾乎免管理。 優點包括無須停機的動態延展性、內建智慧最佳化及全球延展性和可用性。
    • Contoso 可以使用輕量型 Data Migration Assistant,評定 Azure SQL Database 的內部部署資料庫移轉。
    • Contoso 可以使用 Azure 資料庫移轉服務,將內部部署資料庫移轉到 Azure SQL Database。
    • 透過軟體保證,Contoso 可以使用適用於 SQL Server 的 Azure Hybrid Benefit,以折扣費率在資料庫上交換現有授權。 此方法可以省下高達 30% 的成本。
    • SQL Database 提供多種安全性功能,例如 Always Encrypted、動態資料遮罩、資料列層級和 SQL 威脅偵測。
  • 針對應用程式 Web 層,Contoso 決定使用 Azure App Service。 透過此 PaaS 服務,僅須變更一些組態即可部署應用程式。 Contoso 將使用 Visual Studio 來進行變更,並部署兩個 Web 應用程式,一個用於網站,另一個用於 WCF 服務。
  • 為了滿足 DevOps 管線的需求,Contoso 會使用 Azure DevOps 搭配 Git 存放庫來進行原始程式碼管理。 他們將使用自動化建置和發行來建置程式碼,並將其部署到 Azure App Service。

解決方案檢閱

Contoso 會藉由產生優缺點清單,來評估建議的設計,如下表所示:

考量 詳細資料
優點 SmartHotel360 應用程式程式碼無需變更,即可移轉到 Azure。

Contoso 可以使用適用於 SQL Server 和 Windows Server 的 Azure Hybrid Benefit 來充分利用軟體保證中的投資。

移轉之後,即無須支援 Windows Server 2008 R2。 如需詳細資訊,請參閱 Microsoft 生命週期原則

Contoso 可以使用多個執行個體來設定應用程式的 Web 層,使 Web 層不再是單一失敗點。

資料庫不會再依賴過時的 SQL Server 2008 R2。

SQL Database 可支援其技術需求。 Contoso 使用 Data Migration Assistant 來評定內部部署資料庫,並發現其可相容。

Azure SQL Database 擁有內建容錯功能,無須 Contoso 進行設定。 這可確保資料層不再是單一的容錯移轉點。

如果 Contoso 使用 Azure 資料庫移轉服務來移轉資料庫,則會有可進行大規模資料庫移轉的基礎結構。
缺點 Azure App Service 針對每個 Web 應用程式僅支援一個應用程式部署。 這表示必須佈建兩個 Web 應用程式,一個用於網站,另一個用於 WCF 服務。

建議的架構

建議架構的圖表。

移轉程序

  1. Contoso 會布建Azure SQL資料庫,然後使用 Azure 資料移轉服務 將 SmartHotel360 資料庫移轉至該資料庫。

  2. Contoso 會佈建並設定 Web 應用程式,然後對其部署 SmartHotel360 應用程式。

    移轉程式的圖表。

Azure 服務

服務 描述 成本
Azure App Service Migration Assistant 只需要變更極少的程式碼或完全不需要變更程式碼,就能免費輕鬆地將 .NET Web 應用程式從內部部署順暢地移轉到雲端。 此工具可免費下載。
資料移轉小幫手 Contoso 會使用 Data Migration Assistant 來評定和偵測可能影響 Azure 中資料庫功能的相容性問題。 Data Migration Assistant 會評定 SQL 來源與目標之間的功能同位,並提出效能和可靠性改進建議。 此工具可免費下載。
Azure 資料庫移轉服務 Azure 資料庫移轉服務能夠從多個資料庫來源無縫移轉到 Azure 資料平台,將停機時間降至最低。 深入了解支援的區域資料庫移轉服務定價
Azure SQL Database 完全受控的智慧型關聯式雲端資料庫服務。 費用會以功能、輸送量和大小為依據。 深入了解
Azure App Service 協助建立強大的雲端應用程式,以使用完全受控平台。 定價會以大小、位置和使用期間為依據。 深入了解
Azure Pipelines 為應用程式開發提供持續整合和持續部署 (CI/CD) 管線。 管線一開始會有一個用於管理應用程式程式碼的 Git 存放庫、一個用來產生套件及其他組建成品的建置系統,以及一個用來在開發、測試及生產環境中部署變更的發行管理系統。

必要條件

若要執行此案例,Contoso 必須符合下列必要條件:

需求 詳細資料
Azure 訂用帳戶 Contoso 稍早已在本文章系列中建立訂用帳戶。 如果您沒有 Azure 訂用帳戶,請建立免費帳戶

如果您建立免費帳戶,您就是訂用帳戶的管理員,並可執行所有動作。

如果您使用現有訂用帳戶,而且您不是系統管理員,則需要與系統管理員合作,讓其指派擁有者或參與者權限給您。
Azure 基礎結構 Contoso 會如適用於移轉的 Azure 基礎結構中所述,設定其 Azure 基礎結構。

案例步驟

以下是 Contoso 執行移轉的方式:

  • 步驟 1:評定及移轉 Web 應用程式。 Contoso 會使用 Azure App Service Migration Assistant 工具來執行移轉前相容性檢查,並將其 Web 應用程式移轉到 Azure App Service。
  • 步驟 2:在 Azure SQL Database 中佈建資料庫。 Contoso 會佈建 Azure SQL Database 執行個體。 當應用程式網站移轉到 Azure 之後,WCF 服務的 Web 應用程式會指向這個執行個體。
  • 步驟 3:評定資料庫。 Contoso 會使用 Data Migration Assistant 評定要移轉的資料庫,然後透過 Azure 資料庫移轉服務進行移轉。
  • 步驟 4:設定 Azure DevOps。 Contoso 會建立新的 Azure DevOps 專案,並匯入 Git 存放庫。
  • 步驟 5:設定連接字串。 Contoso 會設定連接字串,以便 Web 層的 Web 應用程式、WCF 服務的 Web 應用程式和 SQL 執行個體進行通訊。
  • 步驟 6:在 Azure DevOps 中設定建置和發行管線。 在最後一個步驟中,Contoso 會在 Azure DevOps 中設定建置和發行管線來建立應用程式,然後將其部署到兩個不同的 Web 應用程式。

步驟 1:評定及移轉 Web 應用程式

Contoso 管理員會使用 Azure App Service Migration Assistant 工具來評定及移轉其 Web 應用程式。 他們會使用將 ASP.NET 應用程式移轉到 Azure 學習路徑作為過程中的指南。 管理員會執行下列動作:

  • 他們會使用 Azure App Service 移轉評定工具來評估其 Web 應用程式之間的任何相依性,並判斷其內部部署 Web 應用程式與 Azure App Service 支援的應用程式之間是否有任何不相容性。

  • 他們會下載 Azure App Service Migration Assistant 並登入其 Azure 帳戶。

  • 他們會選擇訂閱、資源群組和網站的網域名稱。

步驟 2:在 Azure SQL Database 中佈建資料庫

  1. Contoso 管理員決定建立 Azure SQL Database 執行個體。

    顯示SQL Database連結的螢幕擷取畫面。

  2. 他們指定與內部部署 VM 上執行的資料庫相符的資料庫名稱 (SmartHotel.Registration)。 他們將資料庫放在 ContosoRG 資源群組中。 這是用於 Azure 中生產資源的資源群組。

    顯示SQL Database實例詳細資料的螢幕擷取畫面。

  3. 他們在主要區域中設定新的 SQL Server 執行個體 sql-smarthotel-eus2

    新SQL Server實例的螢幕擷取畫面。

  4. 他們會設定符合其伺服器和資料庫需求的定價層。 並選擇使用 Azure Hybrid Benefit 來節省成本,因為他們已經有 SQL Server 授權。

  5. 針對大小,他們使用以虛擬核心為基礎的購買方式,並為預期的需求設定限制。

    虛擬核心調整大小需求的螢幕擷取畫面。

  6. 他們建立資料庫執行個體。

    建立SQL Database實例的螢幕擷取畫面。

  7. 他們開啟資料庫,並記下在使用 Data Migration Assistant 進行移轉時所需的詳細資料。

    資料庫實例文字檔的螢幕擷取畫面。

需要其他協助?

步驟 3:評定資料庫

Contoso 管理員會使用 Data Migration Assistant 來評定資料庫,然後參考逐步移轉教學課程,使用 Azure 資料庫移轉服務來進行移轉。 他們可以執行線上、離線和混合式 (預覽) 移轉。

簡單來說,管理員會執行下列動作:

  • 他們會使用 Data Migration Assistant,探索並解決任何資料庫移轉問題。
  • 他們會使用連線到虛擬網路的進階 SKU,建立 Azure 資料庫移轉服務執行個體。
  • 他們會確定執行個體可以透過虛擬網路存取遠端 SQL Server。 這需要確定所有連入連接埠都可從 Azure 連入虛擬網路層的 SQL Server、網路 VPN,以及裝載 SQL Server 的電腦。
  • 他們會設定執行個體:
    • 建立移轉專案。
    • 新增來源 (內部部署資料庫)。
    • 選取目標。
    • 選取要移轉的資料庫。
    • 設定進階設定。
    • 開始複寫。
    • 解決任何錯誤。
    • 執行最終完全移轉。

步驟 4:設定 Azure DevOps

Contoso 需要為應用程式建置 DevOps 基礎結構和管線。 為此,Contoso 管理員會建立新的 DevOps 專案、匯入程式碼,然後設定建置和發行管線。

  1. 在 Contoso Azure DevOps 帳戶中,他們建立一個新專案 ContosoSmartHotelRefactor,然後選取 [Git] 進行版本控制。

    在 Azure DevOps 中建立新專案的螢幕擷取畫面。

  2. 他們匯入目前保有其應用程式程式碼的 Git 存放庫。 他們從公用 GitHub 存放庫進行下載。

    [匯入 Git 存放庫] 窗格的螢幕擷取畫面。

  3. 他們將 Visual Studio 連線到存放庫,然後使用 Team Explorer 將程式碼複製到開發人員電腦。

    [連接到專案] 窗格的螢幕擷取畫面。

  4. 他們開啟應用程式的方案檔。 Web 應用程式和 WCF 服務在檔案中擁有個別的專案。

    方案總管的螢幕擷取畫面,其中列出 Web 應用程式和 WCF 服務專案。

步驟 5:設定連接字串

Contoso 管理員確保 Web 應用程式和資料庫能夠彼此通訊。 若要這樣做,須在程式碼和 Web 應用程式中設定連接字串。

  1. 在 WCF 服務 Web 應用程式 SHWCF-EUS2 的 [設定]>[應用程式設定] 下,他們新增名為 DefaultConnection 的新連接字串。

  2. 他們從 SmartHotel-Registration 資料庫提取連接字串,然後使用正確的認證加以更新。

    連接字串設定窗格的螢幕擷取畫面。

  3. 在 Visual Studio 中,管理員從方案檔開啟 SmartHotel.Registration.wcf 專案。 在專案中,他們使用連接字串來更新 web.config 檔案的 connectionStrings 區段。

    SmartHotel.Registration.wcf 專案中web.config檔案 connectionStrings 區段的螢幕擷取畫面。

  4. 他們針對 SmartHotel.Registration.Webweb.config 檔案的 client 區段變更為指向 WCF 服務的新位置。 這是裝載服務端點的 WCF Web 應用程式 URL。

    SmartHotel.Registration.wcf 專案中web.config檔案用戶端區段的螢幕擷取畫面。

  5. 現在有了程式碼變更,管理員就可以使用 Visual Studio 中的 Team Explorer 來認可和同步這些變更。

步驟 6:在 Azure DevOps 中設定建置和發行管線

Contoso 管理員現在會設定 Azure DevOps 以執行建置和發行程序。

  1. 在 Azure DevOps 中,他們選取 [建置及發行][新增管線]

    Azure DevOps 中 [新增管線] 連結的螢幕擷取畫面。

  2. 他們選取 [Azure Repos Git],然後在 [存放庫] 下拉式清單中選取相關的存放庫。

    [Azure Repos Git] 按鈕和所選存放庫的螢幕擷取畫面。

  3. 在 [選取範本] 下,他們為其組建選取 ASP.NET 範本。

    [選取範本] 窗格的螢幕擷取畫面,用於選取 ASP.NET 範本。

  4. 他們針對組建使用名稱 ContosoSmartHotelRefactor-ASP.NET-CI,然後選取 [儲存並排入佇列]& 以啟動第一個組建。

    組建的 [儲存 & 佇列] 按鈕螢幕擷取畫面。

  5. 他們選取組建編號以查看程序。 完成之後,管理員可以看到程序回饋,選取 [成品] 即可檢閱建置結果。

    建置頁面和 [成品] 連結的螢幕擷取畫面,用於檢閱組建結果。

    [Artifacts 總管] 窗格隨即開啟,而且 drop 資料夾會顯示建置結果。

    • 這兩個 .zip 檔案是包含應用程式的套件。
    • 這些 .zip 檔案會在部署到 Azure App Service 的發行管線中使用。

    [成品總管] 窗格的螢幕擷取畫面。

  6. 他們選取 [發行]>[+ 新增管線]。

    新增管線

  7. 他們選取 Azure App Service 的部署範本。

    Azure App 服務部署範本的螢幕擷取畫面。

  8. 他們將發行管線命名為 ContosoSmartHotel360Refactor,然後在 [階段名稱] 方塊中指定 SHWCF-EUS2 作為 WCF Web 應用程式的名稱。

    WCF Web 應用程式的階段名稱螢幕擷取畫面。

  9. 在階段底下,他們選取 [1 個作業,1 個工作] 以設定 WCF 服務的部署。

    1 個工作、1 個工作選項的螢幕擷取畫面。

  10. 他們確認已選取並授權訂閱,然後選取 [App Service 名稱]。

    選取應用程式服務名稱的螢幕擷取畫面。

  11. 在管線 >[成品] 上,他們選取 [+ 新增成品],然後選擇使用 ContosoSmarthotel360Refactor 管線進行建置。

    [新增成品] 窗格上 [建置] 按鈕的螢幕擷取畫面。

  12. 若要啟用持續部署觸發程序,管理員可以選取成品上的閃電圖示。

    成品上閃電圖示的螢幕擷取畫面。

  13. 他們將持續部署觸發程序設定為 [啟用]。

    顯示持續部署觸發程式設定為 [已啟用] 的螢幕擷取畫面。

  14. 管理員回到階段 [1 個作業,1 個工作],然後選取 [部署 Azure App Service]。

    選取 [部署Azure App 服務] 選項的螢幕擷取畫面。

  15. 在 [選取檔案或資料夾] 中,他們展開 drop 資料夾,選取在建置期間建立的 SmartHotel.Registration.Wcf.zip 檔案,然後選取 [儲存]。

    選取 WCF 檔案之 [選取檔案或資料夾] 窗格的螢幕擷取畫面。

  16. 他們選取 [管線]>[階段],然後選取 [+ 新增],為 SHWEB-EUS2 新增環境。 他們會選取另一個 Azure App Service 部署。

    用於新增環境的 1 個作業、1 個工作連結的螢幕擷取畫面。

  17. 他們重複此程序,將 SmartHotel.Registration.Web.zip 檔案發佈至正確的 Web 應用程式,然後選取 [儲存]。

    選取 Web 檔案之 [選取檔案或資料夾] 窗格的螢幕擷取畫面。

    發行管線隨即顯示,如下所示:

    發行管線摘要的螢幕擷取畫面。

  18. 他們回到 [建置],選取 [觸發程序],然後選取 [啟用持續整合] 核取方塊。 此動作會啟用管線,以便在變更認可至程式碼時,進行完整建置和發行。

    醒目提示 [啟用持續整合] 核取方塊的螢幕擷取畫面。

  19. 他們選取 [儲存並排入佇列]&,以執行完整管線。 此時會觸發新的組建,進而建立 Azure App Service 的第一個應用程式版本。

    [儲存 & 佇列] 按鈕的螢幕擷取畫面。

  20. Contoso 管理員可以依循來自 Azure DevOps 的建置和發行管線程序。 建置完成之後,就會開始發行。

    建置和發行進度的螢幕擷取畫面。

  21. 管線完成之後,兩個站台即完成部署,且應用程式已啟動並在線上執行。

    顯示應用程式已啟動並正在執行的螢幕擷取畫面。

    應用程式已成功移轉到 Azure。

移轉之後進行清除

移轉之後,Contoso 會完成下列清除步驟:

  • 他們會從 vCenter 清查中移除內部部署 VM。
  • 他們會從本機備份作業中移除 VM。
  • 他們會更新其內部文件,以顯示 SmartHotel360 應用程式的新位置。 此文件會顯示資料庫在 Azure SQL Database 中處於執行中狀態,而前端在兩個 Web 應用程式中處於執行中狀態。
  • 他們會檢閱與已解除委任 VM 互動的任何資源,並更新任何相關的設定或文件,以反映新的組態。

檢閱部署

由於資源現在已移轉到 Azure,Contoso 必須完全操作並協助保護其新的基礎結構。

安全性

  • Contoso 有助於確保其新的 SmartHotel-Registration 資料庫安全。 深入了解
  • 特別是,Contoso 會將 Web 應用程式更新為搭配使用 SSL 與憑證。

備份

  • Contoso 團隊會檢閱 Azure SQL Database 的備份需求。 深入了解
  • 他們也了解如何管理 SQL Database 備份和還原。 深入了解自動備份
  • 他們考慮實作容錯移轉群組,為該資料庫提供區域性容錯移轉。 深入了解
  • 為了進行復原,他們考慮在主要區域 (East US 2) 和次要區域 (Central US) 中部署 Web 應用程式。 該團隊可以設定流量管理員,以確保在發生區域性中斷時進行容錯移轉。

授權和成本最佳化

  • 部署好所有資源之後,Contoso 會根據基礎結構規劃來指派 Azure 標籤。
  • 所有授權費用都會併入 Contoso 使用的 PaaS 服務中。 此費用會從 Enterprise 合約中扣除。
  • Contoso 將使用 Azure 成本管理 + 計費,確保維持在 IT 領導階層所建立的預算內。

結論

在本文中,Contoso 已透過將應用程式前端 VM 移轉到兩個 Azure App Service Web 應用程式,來重構 SmartHotel360 應用程式。 應用程式資料庫已移轉到 Azure SQL Database。