部署您的應用程式並與其他 Azure 服務整合
您現在已了解在 Azure 上裝載應用程式的不同選項,接下來想要探索如何在這些服務上部署適用於 MySQL 的 Azure 資料庫 - 彈性伺服器應用程式。 在此單元中,您會探索兩個最常使用的服務 Azure App Service 和 AKS、檢閱使用 Azure DevOps 和 GitHub 將 CI/CD 工作自動化的選項,並了解如何透過與 Azure AI 搜尋服務和 Azure OpenAI 整合將人工智慧融入這些應用程式。
Azure App Service + 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
若要在 Azure App Service 上部署應用程式並與適用於 MySQL 的 Azure 資料庫 - 彈性伺服器整合,請考慮下列選項:
- 從 Azure Marketplace 使用 [Web 應用程式 + 資料庫] 以建立虛擬網路 (VNet) 隔離的 Web 應用程式和 MySQL 彈性伺服器。 彈性伺服器的連線資訊會使用連接字串,自動新增至 App Service 應用程式的組態設定。
- 個別建立適用於 MySQL 的 Azure 資料庫彈性伺服器和 App Service 應用程式,然後在 App Service 應用程式中,於 [組態設定] 下的 [應用程式設定] 中,新增 MySQL 彈性伺服器的連線資訊。
設定 App Service 應用程式和 MySQL 彈性伺服器之後,您可以使用 Azure App Service 支援的各種部署方法來將應用程式程式碼部署至 Azure。 這些方法包含透過 ZIP 套件、本機 Git 存放庫、Azure Container Registry、GitHub Actions 或 Azure Pipelines 進行部署,每個選項將根據您的開發和作業工作流程提供彈性。
在下一個單元中,您會建置範例 PHP 應用程式並將其部署至 Azure App Service,完成部署程序包含的每個步驟,並使用 Azure 的強大平台功能以最佳化應用程式的效能和可擴縮性。
Azure Kubernetes Service (AKS) + MySQL - 彈性伺服器
將 AKS 與適用於 MySQL 的 Azure 資料庫 - 彈性伺服器整合可建立能用於部署容器化應用程式且功能強大的平台,這可簡化資料庫管理,同時增強應用程式可擴縮性和復原能力。 若要使用後端 MySQL 彈性伺服器在 AKS 上有效部署和管理應用程式,請考量下列資訊。
下圖說明整合 MySQL 與 AKS 應用程式的三種常見方式:
- 使用適用於 MySQL 的 Azure 資料庫 - 彈性伺服器,這可減少管理 MySQL 伺服器的作業額外負荷,進而增強開發人員生產力。
- 在 Azure VM 上使用 MySQL,這是基礎結構即服務供應項目,因此您必須負責管理和維護 MySQL 伺服器。
- 在 Kubernetes 上執行 MySQL,這可以提供自動化優點,但需要開發人員努力確保穩定性、高可用性、資料持續性和合規性。 此外,基於 Kubernetes Pod 的暫時性本質,很可能容錯移轉並重新啟動,而可能影響應用程式可用性和商務持續性。
若要在整合適用於 MySQL 的 Azure 資料庫 - 彈性伺服器的 AKS 上部署應用程式,請使用下列五個步驟程序:
使用 Azure 入口網站、Azure CLI、ARM/Bicep 範本或其他 Azure 工具,建立適用於 MySQL 的 Azure 資料庫 - 彈性伺服器。 建立 MySQL 彈性伺服器時,除了選擇正確的計算、儲存體、備份和高可用性選項外,還必須決定適當的網路選項。
重要:除非您的情況只涉及小型專案或示範,否則強烈建議建立具有私人存取權的伺服器,這有助於透過 VNet 整合來保護對伺服器的存取。
對應用程式程式碼進行下列變更以準備您的應用程式:
- 若要讓應用程式使用 MySQL 彈性伺服器,請修改對應的設定檔或應用程式屬性檔來新增程式碼,以指出主機伺服器 URL、資料庫名稱、使用者名稱和密碼,這些都從環境變數中讀取 (在 Kubernetes 資訊清單檔中定義並傳遞)。
- 建立 DockerFile 以建置應用程式 Docker 映像。
建立 Azure 容器登錄並將應用程式當作 Docker 映像推送至登錄。
建立 AKS 叢集並將 Azure 容器登錄帳戶連結至叢集。
將應用程式部署至叢集,然後測試部署。 若要將應用程式部署至 AKS 叢集,您必須先建立 Kubernetes 資訊清單檔,針對叢集定義所需的狀態,例如要執行的容器映像。
在 Kubernetes 資訊清單 YAML 檔案中,需要定義的重要項目包括:
- The container image name: replace it with your own in the format [registryname].azurecr.io/[image-name]:[tag]
- Environment variables for MySQL flexible server host URL, database name, admin username and password.
- A service resource to access the app in the cluster. For example, a service of the type "LoadBalancer" will create an external load balancer providing an externally accessible IP address to the app.
After the YAML file is ready, deploy it with either `kubectl apply` or within the Kubernetes resource view in the Azure portal.
使用 Azure DevOps、GitHub 和 Azure Service Operator 將資料庫 CI/CD 工作自動化
手動部署應用程式可能沒有效率且容易出錯,因此需要頻繁測試和調整。 為了簡化此程序,強烈建議您透過持續整合 (CI) 和持續傳遞/部署 (CD) 進行自動化。 CI/CD 可讓開發小組定期可靠發佈小型更新和功能,進而大量降低涉及的風險和工作 (相較於大型較不頻繁的更新)。
若要自動部署應用程式和適用於 MySQL 的 Azure 資料庫 - 彈性伺服器,請考慮使用下列 CI/CD 工具:
Azure Pipelines
Azure Pipelines (屬於 Azure DevOps 一部分),提供強固的 CI/CD 功能,可協助自動將程式碼部署至各種目表,包含 Azure PaaS 服務、VM 和容器登錄。 此平台也支援不同環境的部署,例如其他雲端平台或內部部署系統。
特別是針對資料庫部署,您可以使用 Azure Pipelines,藉由在管線中併入工作以執行 Azure CLI 命令,自動化適用於 MySQL 的 Azure 資料庫 - 彈性伺服器的更新。 這些工作可以直接從 SQL 檔案套用更新或執行內嵌 SQL 指令碼,確保每個成功建置後的資料庫結構描述和資料保持最新狀態。
GitHub 動作
GitHub Actions 可讓工作流程自動化以回應存放庫事件,例如推送、提取要求或問題建立。 此整合允許在 GitHub 系統內的順暢 CI/CD 管線,進而處理所有內容,涵蓋從建置和測試新提取要求工作流程到版本建立後的部署工作流程。
針對資料庫,您可以設定 GitHub Actions 以直接連線至適用於 MySQL 的 Azure 資料庫 - 彈性伺服器,在合併或推送變更時部署或更新資料庫。 這可以確保應用程式更新和資料庫結構描述變更之間的持續同步。
Azure Service Operator
Azure Service Operator 在 Kubernetes 環境中整合 Azure 資源管理,可讓您直接透過 Kubernetes 工具管理適用於 MySQL 的 Azure 資料庫 - 彈性伺服器等 Azure 資源。 此運算子可讓您將基礎結構更新合併至 Kubernetes 部署工作流程,進而可使用統一方法管理應用程式及其相關 Azure 服務。
其他工具
除了這些特定工具之外,您也可以使用其他技術來增強 CI/CD 工作流程:
- App Service 部署位置:在上線前暫存新版本可提供幫助,允許在最短停機時間下進行最終驗證並熱交換至正式執行環境。
- App Service 部署中心:使用 Azure App Services 簡化 CI/CD 設定,整合原始檔控制與組建服務。
- Jenkins:Jenkins 支援建置、部署及自動化任何專案的開放原始碼自動化伺服器,在需要自訂指令碼和大規模整合的複雜環境中特別有效。
藉由利用這些工具,您可以確保您的應用程式及其基礎資料庫基礎結構一律與程式碼的最新變更保持一致,將停機時間降到最低,並加速傳遞新功能和修正程式。
透過整合 Azure AI 搜尋服務和 Azure OpenAI 來新增智慧
增強 MySQL 應用程式智慧的最簡單方式是透過使用檢索增強生成 (RAG) 架構搭配 Azure AI 搜尋服務和 Azure OpenAI 服務建置解決方案,以包含語意搜尋和生成式 AI 的豐富功能。 RAG 是一種架構,可藉由新增 Azure AI 搜尋服務之類的資訊擷取系統,來增強 ChatGPT 等 LLM 的自然語言理解和產生功能,其可與儲存在適用於 MySQL 的 Azure 資料庫等資料來源中的資料搭配使用。
MySQL AI 解決方案的範例 RAG 模式如下所示:
- Azure AI 搜尋服務會使用定期執行的索引子,從後端資料來源提取內容,例如「適用於 MySQL 的 Azure 資料庫」資料庫。
- 資料會由 Azure OpenAI 文字內嵌模型的內建呼叫向量化。
- Azure AI 搜尋服務接著會將此向量化資料保存在向量搜尋索引中。
- 當使用者使用用戶端聊天應用程式時,查詢會傳送至 Azure OpenAI 聊天完成服務。
- Azure AI 搜尋服務現在可用來作為資料來源,以使用向量搜尋或混合式搜尋 (向量 + 語意搜尋) 來尋找最相關的回應。
- Azure OpenAI 聊天完成服務接著會使用這些搜尋結果來產生使用者查詢的自訂回應。
如果您正在執行應用程式,例如內容管理系統 (CMS)、電子商務應用程式或遊戲網站,以及裝載在適用於 MySQL 的 Azure 資料庫中的資料,您可以使用 Azure OpenAI 中提供的 LLM 建置生成式 AI 搜尋和聊天應用程式,以及 Azure AI 搜尋服務所提供的向量儲存體和索引,來增強使用者體驗。