在 Azure 中使用 PostgreSQL 部署 Python (Flask) Web 應用程式
在本教學課程中,您將部署數據驅動 Python Web 應用程式 (Flask) 來 Azure App 服務 與 適用於 PostgreSQL 的 Azure 資料庫 關係資料庫服務。 Azure App Service 在 Linux 伺服器環境中支援 Python。 如果您想要,請改為參閱 Django 教學課程 或 FastAPI 教學課程 。
在本教學課程中,您會了解如何:
- 建立預設的 App Service、PostgreSQL 和 Redis 快取架構。
- 使用受控識別和 Key Vault 參考來保護連線祕密。
- 從 GitHub 存放庫將範例 Python 應用程式部署至 App Service。
- 存取應用程式程式代碼中的App Service 連接字串和應用程式設定。
- 進行更新並重新部署應用程式程式碼。
- 執行資料庫移轉來產生資料庫架構。
- 來自 Azure 的串流診斷記錄。
- 在 Azure 入口網站中管理應用程式。
- 使用 Azure Developer CLI 佈建相同的架構並進行部署。
- 使用 GitHub Codespaces 和 GitHub Copilot 最佳化您的開發工作流程。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,可以建立一個免費帳戶。
- GitHub 帳戶。 您也可免費取得。
- 使用 Flask 開發瞭解 Python。
- (選擇性) 若要嘗試 GitHub Copilot,一個 GitHub Copilot 帳戶。 有 30 天免費試用版可用。
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,可以建立一個免費帳戶。
- 已安裝 Azure Developer CLI。 您可以遵循 Azure Cloud Shell 的步驟,因為這已安裝 Azure Developer CLI。
- 使用 Flask 開發瞭解 Python。
- (選擇性) 若要嘗試 GitHub Copilot,一個 GitHub Copilot 帳戶。 有 30 天免費試用版可用。
跳到結尾
如果您只想查看本教學課程中在 Azure 中執行的範例應用程式,只要在 Azure Cloud Shell 中執行下列命令,然後遵循提示:
mkdir msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
azd init --template msdocs-flask-postgresql-sample-app
azd up
1.執行範例
首先,您會將範例資料驅動的應用程式設定為起點。 為了方便起見,範例存放庫 (英文) 包含開發容器 (英文) 設定。 開發容器具有開發應用程式所需的全部內容,包括資料庫、快取,以及範例應用程式所需的所有環境變數。 開發容器可以在 GitHub codespace 中執行,這表示您可以在任何電腦上使用網頁瀏覽器執行範例。
注意
如果您遵循本教學課程與您自己的應用程式,請查看 README.md 中的requirements.txt檔案描述,以查看您需要哪些套件。
第 1 步:在新的瀏覽器視窗中:
- 登入您的 GitHub 帳戶。
- 瀏覽至 https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork。
- 取消選取 [僅複製主分支]。 您需要所有分支。
- 選取 [建立派生]。
步驟 2:在 GitHub 分支中:
- 為起始分支選取 [主分支]> [starter-no-infra]。 此分支只包含範例專案,沒有與 Azure 相關的檔案或設定。
- 選取 [程式碼]> [在 starter-no-infra 上建立 codespace]。
程式代碼空間需要幾分鐘的時間才能設定,並在
pip install -r requirements.txt
結尾執行存放庫。
步驟 3:在 codespace 終端機中:
- 使用
flask db upgrade
執行資料庫移轉。 - 使用
flask run
執行應用程式。 - 當您看到通知
Your application running on port 5000 is available.
時,請選取 [在瀏覽器中開啟]。 您應該會在新的瀏覽器索引標籤中看到應用程式範例。若要停止應用程式,請鍵入Ctrl
+C
。
有問題嗎? 查看疑難排解區段。
2.建立 App Service 和 PostgreSQL
在此步驟中,您會建立 Azure 資源。 本教學課程中使用的步驟會建立一組預設保護資源,其中包含 App Service 和 Azure Database for PostgreSQL。 針對建立程序,您會指定:
- Web 應用程式的 [名稱]。 其會以
https://<app-name>-<hash>.<region>.azurewebsites.net
的形式作為您應用程式 DNS 名稱的一部分來使用。 - 要實際執行應用程式的區域。 其也會作為您應用程式的 DNS 名稱的一部分來使用。
- 應用程式的執行階段堆疊。 您可以在此處選取要用於應用程式的 Python 版本。
- 應用程式的主控方案。 這是定價層,其中包含應用程式的一組功能和調整限度。
- 應用程式的 [資源群組]。 資源群組允許您將應用程式所需的所有 Azure 資源分組 (在邏輯容器中)。
登入 Azure 入口網站,遵循下列步驟建立您的 Azure App Service 資源。
步驟 1:在 Azure 入口網站中:
- 在 Azure 入口網站頂端的搜尋列中輸入「Web 應用程式資料庫」。
- 選取 [Marketplace] 標題下標示為 [Web 應用程式 + 資料庫] 的項目。 您也可以直接瀏覽至建立精靈。
步驟 2:在 [建立 Web 應用程式 + 資料庫] 頁面上,填寫表單,如下所示。
- 資源群組:選取 [新建],並使用 msdocs-flask-postgres-tutorial 的名稱。
- [區域]:您附近的任何 Azure 區域。
- 名稱: msdocs-python-postgres-XYZ。
- 運行時間堆疊: Python 3.12。
- 資料庫: PostgreSQL - 預設會選取彈性伺服器 作為資料庫引擎。 伺服器名稱和資料庫名稱預設也會設定為適當的值。
- 新增 Azure Cache for Redis?: 否。
- [主控方案]:[基本]。 一切就緒時,您即可擴大 (部分機器翻譯) 至生產定價層。
- 選取 [檢閱 + 建立]。
- 驗證完成時,選取 [建立]。
步驟 3:部署需要數分鐘的時間才能完成。 在部署完成時,選取 [前往資源] 按鈕。 系統會將您直接帶至 App Service 應用程式,但會建立下列資源:
- 資源群組:所有已建立資源的容器。
- App Service 方案:定義 App Service 的計算資源。 系統會建立基本層中的 Linux 方案。
- App Service:代表您的應用程式,並在 App Service 方案中執行。
- 虛擬網路:與 App Service 應用程式整合,並隔離後端網路流量。
- 網路介面:代表私人 IP 位址,每個私人端點各有一個位址。
- Azure Database for PostgreSQL 彈性伺服器:只能從虛擬網路內部存取。 系統會為您在伺服器上建立資料庫和使用者。
- 私用 DNS 區域:啟用虛擬網路中密鑰保存庫和資料庫伺服器的 DNS 解析。
3.安全連線秘密
建立精靈已為您產生連線變數做為應用程式設定。 不過,安全性最佳做法是將祕密完全從 App Service 中移出。 您將利用服務連接器將您的祕密移至金鑰保存庫,並將您的應用程式設定變更為 Key Vault 參考。
步驟 1:擷取現有的 連接字串
- 在 App Service 頁面的左側功能表中,選取 [ 設定 > 環境變數]。
- 選取 [AZURE_POSTGRESQL_CONNECTIONSTRING]。
- 在 [新增/編輯應用程式設定] 的 [值] 欄位中,尋找位於字串結尾的 password= 部分。
- 複製 Password= 後面的密碼字串,以供後續使用。 此應用程式設定可讓您連線到私人端點後方所保護的Postgres資料庫。 不過,秘密會直接儲存在 App Service 應用程式中,這不是最好的方式。 您要變更此設定。
步驟 2:建立金鑰保存庫以安全地管理秘密
- 在頂端搜尋列中,輸入 "key vault",然後選取 [Marketplace]> [Key Vault]。
- 在 [資源群組] 中,選取 msdocs-python-postgres-tutorial。
- 在 [金鑰保存庫名稱] 中,輸入只包含字母和數字的名稱。
- 在 [區域] 中,將它設定為與資源群組相同的位置。
步驟 3:使用私人端點保護金鑰保存庫
- 選取 [網路] 索引標籤。
- 取消選取 [啟用公用存取]。
- 選取 [建立私人端點]。
- 在 [資源群組] 中,選取 msdocs-python-postgres-tutorial。
- 在對話方塊的 [位置] 中,選取與 App Service 應用程式相同的位置。
- 在 [ 名稱] 中,輸入 msdocs-python-postgres-XYZVaultEndpoint。
- 在 [虛擬網络] 中,選取 msdocs-python-postgres-XYZVnet。
- 在 Subnet 中, msdocs-python-postgres-XYZSubnet。
- 選取 [確定]。
- 選取 [檢閱 + 建立],然後選取 [建立]。 等候金鑰保存庫部署完成。 您應該會看到「您的部署已完成」。
步驟 4:設定 PostgreSQL 連接器
- 在頂端搜尋列中,輸入 msdocs-python-postgres,然後選取名為 msdocs-python-postgres-XYZ 的 App Service 資源。
- 在 App Service 頁面的左側功能表中,選取 [設定 > 服務連接器]。 已經有連接器,這是為您建立的應用程式建立精靈。
- 選取 PostgreSQL 連接器旁的複選框,然後選取 [ 編輯]。
- 在 [用戶端類型] 中,選取 [Django]。 即使您有 Flask 應用程式,PostgreSQL 服務連接器中的 Django 用戶端類型仍會以個別的設定提供資料庫變數,而不是一個 連接字串。 個別變數可讓您更輕鬆地在應用程式程式代碼中使用,而此程式代碼會使用 SQLAlchemy 來連線到資料庫。
- 選取 [驗證] 索引標籤。
- 在 [密碼] 中,貼上您先前複製的密碼。
- 選取 [在 Key Vault 中儲存秘密]。
- 在 [金鑰保存庫連線] 底下,選取 [新建]。 [建立連線] 對話方塊會在編輯對話方塊的頂端開啟。
步驟 5:建立 金鑰保存庫 連線
- 在 [建立 金鑰保存庫 連線] 對話方塊的 [金鑰保存庫 中,選取您稍早建立的密鑰保存庫。
- 選取 [檢閱 + 建立] 。
- 驗證完成時,選取 [建立]。
步驟 6:完成 PostgreSQL 連接器設定
- 您回到 defaultConnector 的編輯對話框中。 在 [驗證] 索引標籤中,等候建立金鑰保存庫連接器。 完成時,[Key Vault 連線] 下拉式清單會自動加以選取。
- 選取 [下一步:網路]。
- 選取 [儲存]。 等到 [更新成功] 通知出現為止。
步驟 7:確認 金鑰保存庫 整合
- 從左側功能表中,再次選取 [ 設定 > 環境變數 ]。
- 在AZURE_POSTGRESQL_PASSWORD旁,選取 [顯示值]。 該值應該是
@Microsoft.KeyVault(...)
,這表示它是金鑰保存庫參考,因為現在已在金鑰保存庫中管理秘密。
總結來說,保護您涉及連線秘密的程式:
- 從 App Service 應用程式的環境變數擷取連線秘密。
- 建立金鑰保存庫。
- 使用系統指派的受控識別建立 金鑰保存庫 連線。
- 更新服務連接器以將秘密儲存在金鑰保存庫中。
有問題嗎? 查看疑難排解區段。
4.部署範例程式碼
在此步驟中,請使用 GitHub Actions 來設定 GitHub 部署。 這只是部署至 App Service 的許多方式之一,但也是在部署程序中持續整合的絕佳方式。 根據預設,每次對您的 GitHub 存放庫執行 git push
都會開始建置和部署動作。
步驟 1:在左側功能表中選取 [部署]> [部署中心]。
步驟 2:在 [部署中心] 頁面中:
- 在 [來源] 中,選取 [GitHub]。 根據預設,系統會選取 GitHub Actions 作為組建提供者。
- 登入您的 GitHub 帳戶,並遵循提示來授權 Azure。
- 在 [組織] 中,選取您的帳戶。
- 在 [存放庫] 中,選取 msdocs-flask-postgresql-sample-app。
- 在 [分支] 中,選取 [starter-no-infra]。 這是您搭配應用程式範例使用的相同分支,未包含任何 Azure 相關檔案或設定。
- 對於 [驗證類型],選取 [使用者指派的身分識別]。
- 在最上層的功能表中,選取 [儲存]。
App Service 會將工作流程檔案認可至
.github/workflows
目錄中選擇的 GitHub 存放庫。 根據預設,部署中心會為工作流程建立使用者指派的身分識別,以使用 Microsoft Entra 進行驗證 (OIDC 驗證)。 如需替代驗證選項,請參閱使用 GitHub Actions 部署至 App Service。
步驟 3:回到範例分支的 GitHub codespace 中,執行 git pull origin starter-no-infra
。
這會將新認可的工作流程檔案提取到您的 Codespace。
步驟 4 (選項 1:使用 GitHub Copilot):
- 選取 [聊天] 檢視,然後選取 +,即可啟動新的聊天工作階段。
- 問:「@workspace應用程式如何連線至資料庫?」Copilot 可能會提供一些說明,說明
SQLAlchemy
如何在 azureproject/development.py 和 azureproject/production.py 中設定連線 URI。 - 詢問:「@workspace在生產模式中,我的應用程式正在App Service Web 應用程式中執行,該應用程式會使用 Azure 服務連接器,使用 Django 用戶端類型連線到 PostgreSQL 彈性伺服器。我需要使用的環境變數名稱為何?」Copilot 可能會提供類似選項 2:下列 GitHub Copilot 步驟的程式代碼建議,甚至告訴您在 azureproject/production.py 檔案中進行變更。
- 在總管中開啟 azureproject/production.py ,並新增程式代碼建議。 GitHub Copilot 不會每次都提供相同的回應,而且這些回應不一定正確。 您可能需要詢問更多問題,以微調其回應。 如需提示,請參閱我可以在 Codespace 中使用 GitHub Copilot 執行哪些作業?。
步驟 4 (選項 2:不使用 GitHub Copilot):
- 在總管中開啟 Program.cs。
- 尋找批注的程序代碼(第 3-8 行),並取消批注。
這會使用
AZURE_POSTGRESQL_USER
、、AZURE_POSTGRESQL_PASSWORD
AZURE_POSTGRESQL_HOST
和AZURE_POSTGRESQL_NAME
建立 SQLAlchemy 的 連接字串。
步驟 5:
- 選取 [原始檔控制] 延伸模組。
- 在文字方塊中,輸入提交訊息,例如
Configure Azure database connecton
。 或者,選取並讓 GitHub Copilot 為您產生認可訊息。
- 選取 [認可],然後使用 [是] 來確認。
- 選取 [同步變更 1],然後使用 [確定] 來確認。
步驟 6:返回 Azure 入口網站的 [部署中心] 頁面:
- 選取 [記錄] 索引標籤,然後選取 [重新整理] 以查看新的部署執行。
- 在部署執行的記錄項目中,選取最新時間戳記的 [建置/部署記錄] 項目。
第 7 步:您已前往 GitHub 存放庫,並看到 GitHub 動作正在執行。 工作流程檔案會定義兩個不同的階段:建置和部署。 等候 GitHub 執行直到顯示 [成功] 狀態。 需要約 5 分鐘的時間。
有問題嗎? 請查看疑難排解指南。
5.產生資料庫結構
使用受虛擬網路保護的 PostgreSQL 資料庫,執行 Flask 資料庫移轉最簡單的方式是在 App Service 中搭配 Linux 容器的 SSH 工作階段中。
第 1 步:在 App Service 頁面上的左側功能表,
- 選取 [開發工具>SSH]。
- 選取 [執行]。
步驟 2: 在 SSH 工作階段中,執行 flask db upgrade
。 如果成功,App Service 已成功連線至資料庫。
提示
在 SSH 工作階段中,只有 /home
中檔案的變更才能在應用程式重新啟動之後保存。
/home
以外的變更不會保存。
有問題嗎? 查看疑難排解區段。
6.瀏覽至應用程式
步驟 1:在 [App Service] 頁面中:
- 從左側功能表中選取 [概觀]。
- 選取應用程式的 URL。
第 2 步: 將幾個餐廳新增至清單中。 恭喜,您正在 Azure App Service 中執行 Web 應用程式,並安全地連線至 PostgreSQL 的適用於 PostgreSQL 的 Azure 資料庫。
7.資料流診斷記錄
Azure App 服務 擷取所有控制台記錄,以協助您診斷應用程式的問題。 如下所示,樣本應用程式包含可示範這項功能的 print()
陳述式。
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
第 1 步:在 [App Service] 頁面中:
- 從左側功能表中,選取 [監視]> [App Service 記錄]。
- 在 [應用程式記錄] 下,選取 [檔案系統]。
- 在最上層的功能表中,選取 [儲存]。
步驟 2:從左側功能表中,選取 [記錄串流]。 您會看到應用程式的記錄,包括平台記錄和來自容器內的記錄。
深入了解如何在設定適用於 Python 應用程式的 Azure 監視器系列中記錄 Python 應用程式。
8.清除資源
完成後,您可以刪除資源群組,以從 Azure 訂用帳戶中刪除所有資源。
步驟 1:在 Azure 入口網站頂端的搜尋列中:
- 輸入資源群組名稱。
- 選取資源群組。
步驟 2:在資源群組頁面中,選取 [刪除資源群組]。
步驟 3:
- 輸入您確認要刪除的資源群組名稱。
- 選取 [刪除]。
2.建立 Azure 資源並部署應用程式範例
在此步驟中,您會建立 Azure 資源,並將範例應用程式部署至 Linux 上的 App Service。 本教學課程中使用的步驟會建立一組預設保護資源,其中包含 App Service 和 Azure Database for PostgreSQL。
開發容器已具備 Azure Developer CLI (AZD)。
從存放庫根路徑中執行
azd init
。azd init --template python-app-service-postgresql-infra
出現提示時,請提供下列答案:
問題 回答 目前的目錄不是空的。 您是否要在「<您的目錄>」初始化專案? Y 您要對這些檔案執行什麼動作? 維持現有的檔案不變 輸入新的環境名稱 輸入唯一名稱。 AZD 範本會使用此名稱作為 Azure 中 Web 應用程式的 DNS 名稱一部分 ( <app-name>-<hash>.azurewebsites.net
)。 允許英數字元與連字號。執行
azd auth login
命令並遵循提示來登入 Azure:azd auth login
使用
azd provision
命令建立必要的 Azure 資源。 請遵循提示選取 Azure 資源所需的訂用帳戶和位置。azd provision
azd provision
命令需要大約 15 分鐘才能完成 (時間多半用在 Redis 快取上)。 稍後,您將修改程序代碼以使用App Service,並使用 部署變更azd deploy
。 執行時,命令會提供佈建和部署程式的相關資訊,包括 Azure 中部署的連結。此 AZD 範本包含使用下列 Azure 資源產生預設安全架構的檔案 (azure.yaml 和 infra 目錄):
- 資源群組:所有已建立資源的容器。
- App Service 方案:定義 App Service 的計算資源。 系統會建立基本層中的 Linux 方案。
- App Service:代表您的應用程式,並在 App Service 方案中執行。
- 虛擬網路:與 App Service 應用程式整合,並隔離後端網路流量。
- 私人端點:虛擬網路中的金鑰保存庫和 Redis 快取的存取端點。
- 網路介面:代表私人 IP 位址,每個私人端點各有一個位址。
- Azure Database for PostgreSQL 彈性伺服器:只能從虛擬網路內部存取。 系統會為您在伺服器上建立資料庫和使用者。
- 私人 DNS 區域:啟用虛擬網路中 PostgreSQL 伺服器的 DNS 解析。
- Log Analytics 工作區:作為應用程式傳送記錄的目標容器,您也可以在其中查詢記錄。
- Azure Cache for Redis:只能從其私人端點後方存取。
- 金鑰保存庫:只能從其私人端點後方存取。 用於管理 App Service 應用程式的秘密。
命令第一次完成建立資源並部署應用程式程式碼之後,已部署的範例應用程式尚無法運作,因為您必須進行小型變更,使其連線到 Azure 中的資料庫。
有問題嗎? 查看疑難排解區段。
3.使用資料庫 連接字串
您使用的 AZD 範本已為您產生連線變數作為應用程式設定,並將其輸出至終端機以方便使用。 應用程式設定是將連線秘密保留在程式碼存放庫外部的一個方法。
在 AZD 輸出中,尋找設定
AZURE_POSTGRESQL_USER
、AZURE_POSTGRESQL_PASSWORD
、AZURE_POSTGRESQL_HOST
和AZURE_POSTGRESQL_NAME
。 為了保護祕密安全,只會顯示設定名稱。 其在 AZD 輸出中看起來像這樣:App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
為了方便起見,AZD 範本會顯示應用程式的應用程式設定頁面直接連結。 尋找該連結,並在新的瀏覽器索引標籤中開啟該連結。
有問題嗎? 查看疑難排解區段。
4.修改範例程式碼並重新部署
在 GitHub codespace 中,選取 [聊天] 檢視,然後選取 + 以啟動新的聊天工作階段。
問:「@workspace應用程式如何連線至資料庫?」Copilot 可能會提供一些說明,說明
SQLAlchemy
如何在 azureproject/development.py 和 azureproject/production.py 中設定連線 URI。詢問:「@workspace在生產模式中,我的應用程式正在App Service Web 應用程式中執行,該應用程式會使用 Azure 服務連接器,使用 Django 用戶端類型連線到 PostgreSQL 彈性伺服器。我需要使用的環境變數名稱為何?」Copilot 可能會提供類似選項 2:下列 GitHub Copilot 步驟的程式代碼建議,甚至告訴您在 azureproject/production.py 檔案中進行變更。
在總管中開啟 azureproject/production.py ,並新增程式代碼建議。
GitHub Copilot 不會每次都提供相同的回應,而且這些回應不一定正確。 您可能需要詢問更多問題,以微調其回應。 如需提示,請參閱我可以在 Codespace 中使用 GitHub Copilot 執行哪些作業?。
在終端機中,執行
azd deploy
。azd deploy
有問題嗎? 查看疑難排解區段。
5.產生資料庫結構
使用受虛擬網路保護的 PostgreSQL 資料庫,執行 Flask 資料庫移轉最簡單的方式是在 App Service 中搭配 Linux 容器的 SSH 工作階段中。
在 AZD 輸出中,尋找 SSH 工作階段的 URL,並在瀏覽器中瀏覽至目標。 輸出中看起來像這樣:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
在 SSH 工作階段中執行 。
flask db upgrade
如果成功,App Service 已成功連線至資料庫。注意
只有
/home
中檔案的變更才能在應用程式重新開機之後保存。/home
以外的變更不會保存。
有問題嗎? 查看疑難排解區段。
6.瀏覽至應用程式
在 AZD 輸出中,尋找您應用程式的 URL,並在瀏覽器中瀏覽至目標。 AZD 輸出中 URL 看起來像這樣:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
將幾個餐廳新增至清單中。
恭喜,您正在 Azure App Service 中執行 Web 應用程式,並安全地連線至 PostgreSQL 的適用於 PostgreSQL 的 Azure 資料庫。
有問題嗎? 查看疑難排解區段。
7.資料流診斷記錄
Azure App Service 會擷取主控台記錄,以協助您診斷應用程式的問題。 為了方便起見,AZD 範本已經 能夠記錄到本機文件系統 ,並將 記錄傳送至 Log Analytics 工作區。
範例應用程式包含 print()
可示範這項功能的語句,如下列代碼段所示。
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
在 AZD 輸出中,尋找串流 App Service 記錄的連結,並在瀏覽器中瀏覽至該連結。 連結在 AZD 輸出中看起來像這樣:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
深入了解如何在設定適用於 Python 應用程式的 Azure 監視器系列中記錄 Python 應用程式。
有問題嗎? 查看疑難排解區段。
8.清除資源
若要刪除目前部署環境中的所有 Azure 資源,請執行 azd down
並遵循提示。
azd down
疑難排解
以下列出您在嘗試完成本教學課程時可能會遇到的問題,以及解決這些問題的步驟。
我無法連線至 SSH 工作階段
如果您無法連線至 SSH 工作階段,表示應用程式本身無法啟動。 如需詳細資訊,請查看診斷記錄。 例如,如果您看到類似 KeyError: 'AZURE_POSTGRESQL_HOST'
的錯誤,這可能表示環境變數遺失 (您可能已移除應用程式設定)。
我在執行資料庫移轉時收到錯誤
如果您遇到與連線到資料庫相關的任何錯誤,請檢查應用程式設定 (AZURE_POSTGRESQL_USER
、 AZURE_POSTGRESQL_PASSWORD
、 AZURE_POSTGRESQL_HOST
和 AZURE_POSTGRESQL_NAME
) 是否已變更或刪除。 若未完成那份連結字串,移轉命令就無法與資料庫通訊。
常見問題集
- 這設定會產生多少費用?
- 如何使用其他工具連線至虛擬網路後方受保護的 PostgreSQL 伺服器?
- 本機應用程式開發如何與 GitHub Actions 搭配運作?
- 如何在 GitHub Actions 部署期間偵測錯誤?
- 我沒有權限可建立使用者指派的身分識別
- 我可以在 Codespace 中使用 GitHub Copilot 執行哪些作業?
這設定會產生多少費用?
建立資源的定價如下:
- App Service 方案是在基本層中建立,並可擴大或縮小。 請參閱 App Service 定價。
- PostgreSQL 彈性伺服器是在最低的高載層 Standard_B1ms 中建立,搭配最少的儲存體大小,儲存體大小可以相應增加或減少。 請參閱 Azure PostgreSQL Database 定價。
- 除非您設定額外的功能 (例如對等互連),否則虛擬網路不會產生費用。 請參閱 Azure 虛擬網路定價。
- 私人 DNS 區域會產生少量費用。 請參閱 Azure DNS 定價。
如何使用其他工具連線至虛擬網路後方受保護的 PostgreSQL 伺服器?
- 若要從命令行工具進行基本存取,您可以從應用程式的 SSH 工作階段執行
psql
。 - 若要從桌面工具連線,您的電腦必須位於虛擬網路內。 例如,該電腦可以是連線到其中一個子網路的 Azure VM,或內部部署網路中具有與 Azure 虛擬網路站對站 VPN 連線的電腦。
- 您也可以將 Azure Cloud Shell 與虛擬網路整合。
本機應用程式開發如何與 GitHub Actions 搭配運作?
使用 App Service 自動產生的工作流程檔案為例,每個 git push
都會開始執行新的組建和部署。 從 GitHub 存放庫的本機複本,並將所需的更新推送至 GitHub。 例如:
git add .
git commit -m "<some-message>"
git push origin main
如何在 GitHub Actions 部署期間偵測錯誤?
如果自動產生 GitHub 工作流程檔案的步驟失敗,請嘗試修改失敗的命令以產生更多詳細資訊輸出。 例如,您可以藉由新增 -d
選項,從 python
命令取得更多輸出。 認可並推送您的變更以觸發 App Service 的其他部署。
我沒有權限可建立使用者指派的身分識別
請參閱透過部署中心設定 GitHub Actions 部署。
我可以在 Codespace 中使用 GitHub Copilot 執行哪些作業?
您可能已經注意到建立 Codespace 時,GitHub Copilot 聊天檢視已可供您使用。 為了方便起見,我們會在容器定義中包含 GitHub Copilot 聊天延伸模組 (請參閱 .devcontainer/devcontainer.json)。 不過,您需要一個 GitHub Copilot 帳戶 (英文) (可免費試用 30 天)。
與 GitHub Copilot 交談時,有幾項提示可供您使用:
- 在單一聊天工作階段中,問題和答案相互關聯,您可以調整問題來微調取得的答案。
- 根據預設,GitHub Copilot 無法存取存放庫中的任何檔案。 若要詢問檔案相關問題,請先在編輯器中開啟檔案。
- 為了讓 GitHub Copilot 在準備其解答時存取存放庫中的所有檔案,請在問題開頭加上
@workspace
。 如需詳細資訊,請參閱Use the @workspace agent。 - 在聊天工作階段中,GitHub Copilot 可以建議變更,(使用
@workspace
) 甚至可以建議在何處進行變更,但系統不允許為您進行變更。 您可以自行新增建議的變更並加以測試。
下一步
前進到下一個教學課程,了解如何使用自訂網域和憑證保護您的應用程式。
了解 App Service 如何執行 Python 應用程式: