教學課程:將 ASP.NET Core 和 Azure SQL 資料庫 應用程式部署至 Azure App 服務

在本教學課程中,您將瞭解如何部署數據驅動 ASP.NET Core 應用程式,以 Azure App 服務 並連線到 Azure SQL 資料庫。 您也會部署 Azure Cache for Redis,以啟用應用程式中的快取程式碼。 Azure App 服務 是一種可高度擴充、自我修補、Web 裝載的服務,可在 Windows 或 Linux 上輕鬆部署應用程式。 雖然本教學課程使用 ASP.NET Core 7.0 應用程式,但其他版本的 ASP.NET Core 和 ASP.NET Framework 的程式相同。

本教學課程需要:

  • 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,可以建立一個免費帳戶
  • GitHub 帳戶。 您也可以 免費取得一個。

範例應用程式

若要探索本教學課程中使用的範例應用程式,請從存放庫https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore下載,或使用下列 Git 命令加以複製:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

1.建立 App Service、資料庫和快取

在此步驟中,您會建立 Azure 資源。 本教學課程中使用的步驟會建立一組預設安全的資源,包括 App Service、Azure SQL 資料庫 和 Azure Cache。 針對建立程序,您將指定:

  • Web 應用程式的 [名稱]。 此名稱會以 https://<app-name>.azurewebsites.net 的形式作為 Web 應用程式 DNS 名稱的一部分。
  • 要實際執行應用程式的區域
  • 應用程式的執行階段堆疊。 這是您選取要用於應用程式的 .NET 版本。
  • 應用程式的主控方案。 這是定價層,其中包含應用程式的一組功能和調整限度。
  • 應用程式的 [資源群組]。 資源群組允許您將應用程式所需的所有 Azure 資源分組 (在邏輯容器中)。

登入 Azure 入口網站,遵循下列步驟建立您的 Azure App Service 資源。

第 1 步:在 Azure 入口網站中:

  1. 在 Azure 入口網站頂端的搜尋列中輸入「Web 應用程式資料庫」。
  2. 選取 [Marketplace] 標題下標示為 [Web 應用程式 + 資料庫] 的項目。 您也可以直接瀏覽至建立精靈

顯示如何使用頂端工具列中搜尋方塊來尋找 Web 應用程式 + 資料庫建立精靈的螢幕快照。

第 2 步:在 [建立 Web 應用程式 + 資料庫] 頁面上,填寫表單,如下所示。

  1. 資源群組→選取 [新建],並使用 msdocs-core-sql-tutorial 的名稱
  2. 區域 → 您附近的任何 Azure 區域。
  3. 名稱msdocs-core-sql-XYZ,其中 XYZ 是任三個隨機字元。 此名稱在整個 Azure 中必須是唯一的。
  4. 運行時間堆疊.NET 7 (STS)
  5. 新增 Azure Cache for Redis? →是的。
  6. 主控方案基本。 當一切就緒時,您可以在之後擴大至生產定價層。
  7. 選取 [SQLAzure ] 作為資料庫引擎。 Azure SQL 資料庫 是完全受控的平臺即服務(PaaS)資料庫引擎,一律在最新穩定版本的 SQL Server 上執行。
  8. 選取 [檢閱 + 建立]。
  9. 驗證完成時,選取 [建立]

顯示如何在 Web 應用程式 + 資料庫精靈中設定新應用程式和資料庫的螢幕快照。

第3 步:部署需要數分鐘的時間才能完成。 在部署完成時,選取 [前往資源] 按鈕。 系統會將您直接帶至 App Service 應用程式,但會建立下列資源:

  • 資源群組 → 所有已建立資源的容器。
  • App Service 計畫 → 定義 App Service 的計算資源。 系統會建立基本層中的 Linux 方案。
  • App Service → 代表您的應用程式,並在 App Service 方案中執行。
  • 虛擬網路 → 與 App Service 應用程式整合,並隔離後端網路流量。
  • 私人端點 →虛擬網路中資料庫伺服器和 Redis 快取的存取端點。
  • 網路介面 →代表私人IP位址,每個私人端點各一個。
  • Azure SQL 資料庫 伺服器→只能從其私人端點後方存取。
  • Azure SQL 資料庫 → 伺服器上會為您建立資料庫和使用者。
  • Azure Cache for Redis →只能從其私人端點後方存取。
  • 私用 DNS 區域→在虛擬網路中啟用資料庫伺服器和 Redis 快取的 DNS 解析。

顯示部署程式已完成的螢幕快照。

2.驗證 連接字串

建立精靈已針對 SQL 資料庫和 Redis 快取產生 連接字串。 在此步驟中,尋找產生的 連接字串 以供稍後使用。

步驟 1: 在 App Service 頁面的左側功能表中,選取 [組態]。

顯示如何在 App Service 中開啟設定頁面的螢幕快照。

步驟 2:

  1. 捲動至頁面底部,並在 [連線 ion 字串] 區段中尋找AZURE_SQL_CONNECTIONSTRING 此字串是由建立精靈從新的 SQL 資料庫產生。 若要設定您的應用程式,您需要此名稱。
  2. 此外,請在 [應用程式設定] 區段中尋找AZURE_REDIS_CONNECTIONSTRING。 此字串是由建立精靈從新的 Redis 快取產生。 若要設定您的應用程式,您需要此名稱。
  3. 如果您想要,您可以選取 每個設定右邊的 [編輯] 按鈕,並查看或複製其值。 稍後,您將變更應用程式以使用 AZURE_SQL_CONNECTIONSTRINGAZURE_REDIS_CONNECTIONSTRING

顯示如何建立應用程式設定的螢幕快照。

3.部署範例程式碼

在此步驟中,您將使用 GitHub Actions 來設定 GitHub 部署。 這只是部署至 App Service 的許多方式之一,但也是在部署程序中持續整合的絕佳方式。 根據預設,您 GitHub 存放庫的每個 git push 都會開始建置和部署動作。

第 1 步:在新的瀏覽器視窗中:

  1. 登入您的 GitHub 帳戶。
  2. 瀏覽至 https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore
  3. 請選取分叉
  4. 選取 [建立派生]

顯示如何建立範例 GitHub 存放庫分支的螢幕快照。

步驟 2: 在 App Service 頁面的左側功能表中,選取 [部署中心]。

顯示如何在 App Service 中開啟部署中心的螢幕快照。

步驟 3: 在 [部署中心] 頁面中:

  1. 在 [來源] 中,選取 [GitHub]。 根據預設,系統會選取 GitHub Actions 作為組建提供者。
  2. 登入您的 GitHub 帳戶,並遵循提示來授權 Azure。
  3. 在 [組織] 中,選取您的帳戶。
  4. 在 [存放庫] 中,選取 msdocs-app-service-sqldb-dotnetcore
  5. 在 [分支] 中,選取 [main]
  6. 在最上層的功能表中,選取 [儲存]。 App Service 會將工作流程檔案認可至 .github/workflows 目錄中選擇的 GitHub 存放庫。

顯示如何使用 GitHub Actions 設定 CI/CD 的螢幕快照。

步驟 4: 返回分支範例的 GitHub 頁面,按 . 按鍵在瀏覽器中開啟 Visual Studio Code。

顯示如何在 GitHub 中開啟 Visual Studio Code 瀏覽器體驗的螢幕快照。

步驟 5: 在瀏覽器中的 Visual Studio Code 中:

  1. 在總管中開啟 DotNetCoreSqlDb/appsettings.json
  2. 將 連接字串 名稱MyDbConnection變更為 AZURE_SQL_CONNECTIONSTRING,其符合稍早在 App Service 中建立的 連接字串。

顯示appsettings.json中已變更 連接字串 名稱的螢幕快照。

步驟 6:

  1. 在總管中開啟 DotNetCoreSqlDb/Program.cs
  2. 在 方法中options.UseSqlServer,將 連接字串 名稱MyDbConnection變更為 AZURE_SQL_CONNECTIONSTRING。 這是範例應用程式使用 連接字串 的位置。
  3. 拿掉 方法, builder.Services.AddDistributedMemoryCache(); 並將它取代為下列程序代碼。 它會將程式代碼從使用記憶體內部快取變更為 Azure 中的 Redis 快取,而且會使用 AZURE_REDIS_CONNECTIONSTRING 先前的 。
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

顯示Program.cs中已變更 連接字串 名稱的螢幕快照。

步驟 7:

  1. 在總管中開啟 .github/workflows/main_msdocs-core-sql-XYZ 。 此檔案是由 App Service 建立精靈所建立。
  2. 在步驟底dotnet publish下,新增一個步驟,以使用 命令dotnet tool install -g dotnet-ef --version 7.0.14安裝 Entity Framework Core 工具
  3. 在新的步驟下,新增另一個步驟以在部署套件中產生資料庫 移轉套件組合dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate。 移轉套件組合是一個獨立可執行檔,您可以在生產環境中執行,而不需要 .NET SDK。 App Service Linux 容器只有 .NET 運行時間,而不是 .NET SDK。

顯示新增至 GitHub 工作流程檔案以進行資料庫移轉套件組合的螢幕快照。

步驟 8:

  1. 選取原始 檔控制 延伸模組。
  2. 在文本框中,輸入類似 Configure DB & Redis & add migration bundle的認可訊息。
  3. 選取 [認可] 和 [ 推送]。

此螢幕快照顯示認可並推送至 GitHub 的變更。

步驟 9:回到 Azure 入口網站 的 [部署中心] 頁面:

  1. 選取 [記錄] 。 已從您認可的變更啟動新的部署執行。
  2. 在部署執行的記錄專案中,選取 具有最新時間戳的 [建置/部署記錄 ] 專案。

顯示如何在部署中心開啟部署記錄的螢幕快照。

步驟 10: 您已移至 GitHub 存放庫,並查看 GitHub 動作正在執行。 工作流程檔案會定義兩個不同的階段:建置和部署。 等候 GitHub 執行到顯示 [完成] 狀態。 這需要幾分鐘的時間。

顯示 GitHub 執行進行中的螢幕快照。

4.產生資料庫結構描述

使用受虛擬網路保護的 SQL 資料庫,執行 dotnet 資料庫移轉的最簡單方式就是使用 App Service 容器的 SSH 會話。

步驟 1: 回到 App Service 頁面的左側功能表中,選取 [ SSH]。

顯示如何從 Azure 入口網站 開啟應用程式的SSH殼層的螢幕快照。

步驟 2: 在 SSH 終端機中:

  1. 執行 cd /home/site/wwwroot。 以下是所有已部署的檔案。
  2. 使用 執行 GitHub 工作流程 ./migrate所產生的移轉套件組合。 如果成功,App Service 就會成功連線到 SQL 資料庫。 只有 /home 中檔案的變更才能在應用程式重新開機之後保存。 /home 以外的變更不會保存。

顯示命令在 SSH 殼層及其輸出中執行的螢幕快照。

5.瀏覽至應用程式

第 1 步:在 [App Service] 頁面中:

  1. 從左側功能表中選取 [概觀]
  2. 選取應用程式的 URL。 您也可以直接瀏覽至 https://<app-name>.azurewebsites.net

顯示如何從 Azure 入口網站 啟動App Service的螢幕快照。

步驟 2: 將一些工作新增至清單。 恭喜您,您正在 Azure App 服務 中執行安全的數據驅動 ASP.NET Core 應用程式。

在 App Service 中執行的 .NET Core 應用程式的螢幕快照。

提示

範例應用程式會實作另行 快取 模式。 當您第二次瀏覽數據檢視,或在進行數據變更後重載同一頁時, 網頁中的處理時間 會顯示較快的時間,因為它會從快取載入數據,而不是資料庫。

6.資料流診斷記錄

Azure App 服務 擷取記錄到主控台的所有訊息,以協助您診斷應用程式的問題。 範例應用程式會輸出其每個端點中的控制台記錄訊息,以示範這項功能。

第 1 步:在 [App Service] 頁面中:

  1. 從左側功能表中,選取 [App Service 記錄]
  2. 在 [應用程式記錄] 下,選取 [檔案系統]

顯示如何在 App Service 中啟用 Azure 入口網站 原生記錄的螢幕快照。

第 2 步:從左側功能表中,選取 [記錄串流]。 您會看到應用程式的記錄,包括平台記錄和來自容器內的記錄。

顯示如何在 Azure 入口網站 中檢視記錄數據流的螢幕快照。

7.清除資源

完成後,您可以刪除資源群組,以從 Azure 訂用帳戶中刪除所有資源。

第 1 步:在 [Azure 入口網站] 頂端的搜尋列中:

  1. 輸入資源群組名稱。
  2. 選取資源群組。

顯示如何在 Azure 入口網站 中搜尋和瀏覽至資源群組的螢幕快照。

第 2 步:在 [資源群組] 頁面中,選取 [刪除資源群組]

顯示 [刪除資源群組] 按鈕在 Azure 入口網站 位置的螢幕快照。

步驟 3:

  1. 輸入您確認要刪除的資源群組名稱。
  2. 選取 [刪除]

確認對話框的螢幕快照,用於刪除 Azure 入口網站 中的資源群組。 :

常見問題集

這設定會產生多少費用?

建立資源的定價如下所示:

  • App Service 方案是在基本層中建立,並可擴大或縮小。 請參閱 App Service 定價
  • Azure SQL 資料庫 是以標準系列硬體上的一般用途無伺服器層建立,且具有最低核心。 成本很小,可以分散到其他區域。 您可以藉由減少其大小上限來將成本降到最低,也可以藉由調整服務層級、計算層、硬體設定、核心數目、資料庫大小和區域備援來相應增加成本。 請參閱 Azure SQL Database 定價
  • Azure Cache for Redis 是在基本層中建立,且快取大小下限。 此層的成本很小。 您可以將其相應增加至更高的效能層級,以取得更高的可用性、叢集和其他功能。 請參閱 Azure Cache for Redis 定價
  • 除非您設定額外的功能 (例如對等互連),否則虛擬網路不會產生費用。 請參閱 Azure 虛擬網路定價
  • 私人 DNS 區域會產生少量費用。 請參閱 Azure DNS 定價

如何? 使用其他工具連線到虛擬網路後方所保護的 Azure SQL 資料庫 伺服器?

  • 若要從命令列工具進行基本存取,您可以從應用程式的 SSH 終端機執行 sqlcmd。 應用程式的容器未隨附 sqlcmd,因此您必須 手動安裝。 請記住,已安裝的用戶端不會在應用程式重新啟動時保存。
  • 若要從 SQL Server Management Studio 用戶端或 Visual Studio 連線,您的電腦必須位於虛擬網路內。 例如,該電腦可以是連線到其中一個子網路的 Azure VM,或內部部署網路中具有與 Azure 虛擬網路站對站 VPN 連線的電腦。

本機應用程式開發如何與 GitHub Actions 搭配運作?

以 App Service 自動產生的工作流程檔案為例,每個檔案都會 git push 啟動新的組建和部署執行。 從 GitHub 存放庫的本機複製品,您會將所需的更新推送至 GitHub。 例如:

git add .
git commit -m "<some-message>"
git push origin main

在 GitHub Actions 部署期間 如何? 偵錯錯誤?

如果自動產生的 GitHub 工作流程檔案中的步驟失敗,請嘗試修改失敗的命令以產生更詳細的輸出。 例如,您可以藉由新增 -v 選項,從任何dotnet命令取得更多輸出。 認可並推送您的變更,以觸發App Service 的另一個部署。

下一步

前進到下一個教學課程,以了解如何使用自訂網域和憑證保障您的應用程式。

或者,查看其他資源: