教學課程:瞭解在 Azure Container Apps 上部署 Python Web 應用程式的概觀概念
本教學課程系列說明如何容器化 Python Web 應用程式,並將其部署至 azure Container Apps
有數個選項可在 Azure 上建置和部署雲端原生和容器化的 Python Web 應用程式。 本教學課程系列涵蓋 Azure Container Apps。 容器應用程式適用於執行一般用途容器,特別是適用於跨容器中部署許多微服務的應用程式。
在本教學課程系列中,您會建立一個容器。 若要將 Python Web 應用程式部署為容器至 Azure App Service,請參閱使用 MongoDB在 Azure 上
本教學課程系列中的程序會引導您完成這些工作:
- 從 Python Web 應用程式建置 Docker 映射,並將映像儲存在 azure Container Registry 中。
- 設定 Azure Container Apps 來裝載 Docker 映射。
- 設定 GitHub Actions,以透過 GitHub 存放庫變更所觸發的新 Docker 映像來更新容器。 這個步驟是選擇性的。
- 設定 Python Web 應用程式的持續整合和持續傳遞(CI/CD)至 Azure。
在本系列的第一個部分中,您將瞭解在 Azure Container Apps 上部署 Python Web 應用程式的基本概念。
服務概觀
下圖顯示您將如何使用本教學課程系列中的本機環境、GitHub 存放庫和 Azure 服務。
此圖表包含下列元件:
-
Azure Container Apps 可讓您在無伺服器平台上執行微服務和容器化應用程式。 無伺服器平臺表示您享有以最少組態執行容器的優點。 使用 Azure Container Apps,您的應用程式可以根據 HTTP 流量、事件驅動處理或 CPU 或記憶體負載等特性動態調整。
Container Apps 會從 Azure Container Registry 提取 Docker 映射。 容器映像的變更會觸發已部署容器的更新。 您也可以設定 GitHub Actions 來觸發更新。
-
Azure Container Registry 可讓您在 Azure 中使用 Docker 映射。 由於 Container Registry 靠近您在 Azure 中的部署,因此您可以控制存取權。 您可以使用Microsoft Entra 群組和許可權來控制 Docker 映像的存取權。
在本教學課程系列中,登錄來源為 Azure Container Registry。 但您也可以使用 Docker Hub 或私用登錄,只需稍作修改即可。
-
範例程式代碼會將應用程式數據儲存在PostgreSQL資料庫中。 容器應用程式會使用 用戶指派的受控識別連線到 PostgreSQL。 連線資訊會儲存在明確設定的環境變數中,或者透過 Azure 服務連接器進行配置。
-
本教學課程系列的程式範例代碼位於 GitHub 存放庫中,您需要將其分支並在本機克隆。 若要使用 GitHub Actions設定 CI/CD 工作流程,您需要 GitHub 帳戶。
即使您沒有 GitHub 帳戶,您仍然可以遵循本教學課程系列。只需在本機或 Azure Cloud Shell 中從範例代碼存放庫建構容器映像即可。
修訂和 CI/CD
若要進行程式代碼變更,並將其推送至容器,您可以使用變更建立新的 Docker 映像。 然後,您會將映像推送至 Container Registry,並建立容器應用程式的新 修訂。
若要將此程式自動化,教學課程系列中的選擇性步驟會示範如何使用 GitHub Actions 建置 CI/CD 管線。 每當新的提交被推送到您的 GitHub 儲存庫時,流水線會自動建置您的程式碼,並將其部署到 Container Apps。
驗證和安全性
在本教學課程系列中,您會直接在 Azure 中建置 Docker 容器映像,並將其部署至 Azure Container Apps。 Container Apps 會在 環境中執行,由 Azure 虛擬網路 支援。 虛擬網路是 Azure 中專用網的基本建置組塊。 Container Apps 可讓您啟用輸入,將容器應用程式公開至公用 Web。
若要設定 CI/CD,您可以將 Azure Container Apps 授權為 GitHub 帳戶的 OAuth 應用程式。 作為 OAuth 應用程式,Container Apps 會將 GitHub Actions 工作流程檔案寫入您的存放庫,其中包含 Azure 資源和作業的相關信息以更新它們。 工作流程會使用 Microsoft Entra 服務主體(或現有的)的認證來更新 Azure 資源,其中包含容器應用程式的角色型存取,以及 Azure 容器登錄的使用者名稱和密碼。 認證會安全地儲存在您的 GitHub 存放庫中。
最後,本教學課程系列中的範例 Web 應用程式會將資料儲存在 PostgreSQL 資料庫中。 範例程式代碼會透過連接字串連線到 PostgreSQL。 當應用程式在 Azure 中執行時,它會使用使用者指派的受控識別連線到 PostgreSQL 資料庫。 程序代碼會使用 DefaultAzureCredential
,在運行時間期間,使用 Microsoft Entra 存取令牌,動態更新連接字串中的密碼。 此機制可防止需要在連接字串或環境變數中硬式編碼密碼,並提供額外的安全性層。
本教學課程系列會逐步引導您建立受控識別,並授與適當的 PostgreSQL 角色和許可權,讓其可以存取和更新資料庫。 在容器應用程式的設定期間,本教學課程系列會逐步引導您在應用程式上設定受控識別,以及設定包含資料庫連線資訊的環境變數。 您也可以使用 Azure 服務連接器來完成相同的工作。
先決條件
若要完成本教學課程系列,您需要:
您可以在其中建立的 Azure 帳戶:
- Azure Container Registry 實例。
- Azure Container Apps 環境。
- 適用於 PostgreSQL 的 Azure 資料庫實例。
視您使用的工具而定,Visual Studio Code 或 Azure CLI:
- 針對 Visual Studio Code,您需要 Container Apps 擴充功能。
- 您可以透過 Azure Cloud Shell使用 Azure CLI。
Python 套件:
- psycopg2-binary 用於連接到 PostgreSQL。
- Flask 或 Django 作為 Web 架構。
範例應用程式
Python 範例應用程式是一種餐廳檢閱應用程式,可儲存 PostgreSQL 中的餐廳及檢閱數據。 在教學課程系列結束時,您會在 Azure Container Apps 中部署和執行餐廳檢閱應用程式,其看起來如下的螢幕快照。