概觀:在 Azure Container Apps 上部署 Python Web 應用程式
本教學課程說明如何容器化 Python Web 應用程式,並將其部署至 Azure Container Apps。 範例 Web 應用程式會容器化,且儲存在 azure Container Registry Docker 映像。 Azure Container Apps 已設定為從 Container Registry 提取 Docker 映射,並建立容器。 範例應用程式會連線到適用於PostgreSQL的 Azure 資料庫
有數個選項可在 Azure 上建置和部署雲端原生和容器化的 Python Web 應用程式。 本教學課程涵蓋 Azure Container Apps。 容器應用程式適用於執行一般用途容器,特別是適用於跨容器中部署之許多微服務的應用程式。 在本教學課程中,您會建立一個容器。 若要將 Python Web 應用程式部署為容器至 Azure App Service,請參閱在 App Service上
在本教學課程中,您將:
- 從 Python Web 應用程式建置 Docker 映射,並將映像儲存在 azure Container Registry 中。
- 設定 Azure Container Apps 來裝載 Docker 映射。
- 設定 GitHub Action,以變更 GitHub 存放庫所觸發的新 Docker 映像來更新容器。 這個最後一個步驟是選擇性的。
在本教學課程結束後,您已將 Python Web 應用程式的持續集成(CI)和持續部署(CD)工作流程設定到 Azure。
服務概觀
本教學課程支持的服務圖表會示範本教學課程中如何使用本機環境、GitHub 存放庫和 Azure 服務。
支援本教學課程並顯示在圖表中的元件如下:
-
- Azure Container Apps 可讓您在無伺服器平台上執行微服務和容器化應用程式。 無伺服器平臺表示您享有以最少組態執行容器的優點。 使用 Azure Container Apps,您的應用程式可以根據 HTTP 流量、事件驅動處理或 CPU 或記憶體負載等特性動態調整。
- Container Apps 會從 Azure Container Registry 提取 Docker 映射。 容器映像的變更會觸發已部署容器的更新。 您也可以設定 GitHub Actions 來觸發更新。
Azure Container Registry(Azure 容器註冊表)
- Azure Container Registry 可讓您在 Azure 中使用 Docker 映射。 由於 Container Registry 靠近您在 Azure 中的部署,因此您可以控制存取,讓您能夠使用 Microsoft Entra 群組和許可權來控制 Docker 映像檔的存取。
- 在本教學課程中,登錄來源是 Azure Container Registry,但您也可以使用 Docker Hub 或私人登錄進行次要修改。
-
- 範例程式代碼會將應用程式數據儲存在PostgreSQL資料庫中。
- 容器應用程式會使用使用者指派的受控識別 連線到 PostgreSQL,。 連線資訊會儲存在經過明確設定的環境變數中,或使用 Azure Service Connector。
-
- 本教學課程的範例程式代碼位於您在本機分支和複製的 GitHub 存放庫中。 若要使用 GitHub Actions設定 CI/CD 工作流程,您需要 GitHub 帳戶。
- 您仍然可以遵循本教學課程,而不需要 GitHub 帳戶、在本機工作或在 azure Cloud Shell 中工作,以從範例程式代碼存放庫建置容器映像。
修訂和 CI/CD
若要進行程式代碼變更,並將其推送至容器,請使用您的變更建立新的 Docker 映像。 然後,您會將映像推送至 Container Registry,並建立容器應用程式的新 修訂。
若要將此程式自動化,本教學課程中的選擇性步驟會示範如何使用 GitHub Actions 建置持續整合和持續傳遞 (CI/CD) 管線。 每當新的認可推送至 GitHub 存放庫時,管道會自動建置程式碼並部署到容器應用程式。
驗證和安全性
在本教學課程中,您會直接在 Azure 中建置 Docker 容器映像,並將其部署至 Azure Container Apps。 容器應用程式會在 環境中執行,由 Azure 虛擬網路 (VNet)支援。 VNet 是 Azure 中專用網的基本建置組塊。 Container Apps 可讓您啟用輸入,將容器應用程式公開至公用 Web。
若要設定持續整合和持續傳遞 (CI/CD),您可以授權 Azure Container Apps 作為 GitHub 帳戶的 OAuth 應用程式。 作為 OAuth 應用程式,Container Apps 會將 GitHub Actions 工作流程檔案寫入存放庫,其中包含 Azure 資源和作業的相關信息以更新它們。 工作流程會使用 Microsoft Entra 服務主體(或現有的)的認證來更新 Azure 資源,其中包含對 Container Apps 的角色型存取,以及對 Azure Container Registry 的使用者名稱和密碼存取。 認證會安全地儲存在您的 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 網路框架。
範例應用程式
Python 範例應用程式是一種餐廳檢閱應用程式,可儲存 PostgreSQL 中的餐廳及檢閱數據。 在本教學課程結束時,您已在 Azure Container Apps 中部署並執行餐廳檢閱應用程式,其看起來如下的螢幕快照。