在本教學課程中,您會使用適用於PostgreSQL的 Azure 資料庫關係資料庫服務,將數據驅動 Quarkus Web 應用程式部署到 Azure App 服務。 Azure App 服務 支援 Windows 或 Linux 伺服器環境中的 Java Standard Edition (Java SE)。
在本教學課程中,您將瞭解如何:
- 為 Azure App 服務 和適用於 PostgreSQL 的 Azure 資料庫彈性伺服器建立安全預設架構。
- 使用受控識別和 金鑰保存庫 參考來保護連線秘密。
- 從 GitHub 存放庫將範例 Quarkus 應用程式部署至 App Service。
- 存取應用程式程式代碼中的App Service 應用程式設定。
- 進行更新並重新部署應用程式程式碼。
- 執行資料庫移轉來產生資料庫架構。
- 將診斷記錄從 Azure 串流出來。
- 在 Azure 入口網站中管理應用程式。
- 使用 Azure Developer CLI 佈建相同的架構並進行部署。
- 使用 GitHub Codespaces 和 GitHub Copilot 最佳化您的開發工作流程。
先決條件
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,可以建立一個免費帳戶。
- GitHub 帳戶。 您也可免費取得。
- 擁有 Java 與 Quarkus 開發的知識。
- (選擇性) 若要嘗試 GitHub Copilot,一個 GitHub Copilot 帳戶。 有 30 天免費試用版可用。
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,可以建立一個免費帳戶。
- GitHub 帳戶。 您也可免費取得。
- 已安裝 Azure Developer CLI。 您可以遵循 Azure Cloud Shell 的步驟,因為這已安裝 Azure Developer CLI。
- 擁有 Java 與 Quarkus 開發的知識。
- (選擇性) 若要嘗試 GitHub Copilot,一個 GitHub Copilot 帳戶。 有 30 天免費試用版可用。
跳到結尾
如果您只想查看本教學課程中在 Azure 中執行的範例應用程式,只要在 Azure Cloud Shell 中執行下列命令,然後遵循提示:
mkdir msdocs-quarkus-postgresql-sample-app
cd msdocs-quarkus-postgresql-sample-app
azd init --template msdocs-quarkus-postgresql-sample-app
azd up
1.執行範例
首先,您會將範例資料驅動的應用程式設定為起點。 為了方便起見,範例存放庫 (使用 Panache 和 RESTEasy 的休眠 ORM) 包含開發容器設定。 開發容器具有開發應用程式所需的全部內容,包括資料庫、快取,以及範例應用程式所需的所有環境變數。 開發容器可以在 GitHub codespace 中執行,這表示您可以在任何電腦上使用網頁瀏覽器執行範例。
第 1 步:在新的瀏覽器視窗中:
- 使用您的 GitHub 帳戶登入。
- 瀏覽至 https://github.com/Azure-Samples/msdocs-quarkus-postgresql-sample-app/fork。
- 取消選取 [僅複製主分支]。 您想要所有分支。
- 選取 [建立派生]。
步驟 2:在 GitHub 分支中:
- 為起始分支選取 [主分支]> [starter-no-infra]。 此分支只包含範例專案,沒有與 Azure 相關的檔案或設定。
- 選取 程式碼>在 starter-no-infra 上創建程式空間。 設定 Codespace 需要幾分鐘的時間。
步驟 3:在 codespace 終端機中:
- 執行
mvn quarkus:dev。 - 忽略通知
Your application running on port 5005 is available. - 當您看到通知
Your application running on port 8080 is available.時,請選取 [在瀏覽器中開啟]。 您應該會在新的瀏覽器索引標籤中看到應用程式範例。若要停止 Quarkus 程式開發伺服器,請輸入Ctrl+C。
如需 Quarkus 應用程式範例建立方式的詳細資訊,請參閱 Quarkus 文件簡化休眠 ORM 與 Panache 和在 Quarkus 中設定資料來源。
有問題嗎? 查看疑難排解區段。
2. 建立 App Service 和 PostgreSQL
在此步驟中,您會建立 Azure 資源。 本教學課程中使用的步驟會建立一組預設保護資源,其中包含 App Service 和 適用於 PostgreSQL 的 Azure 資料庫。 在建立過程中,您會指定:
- Web 應用程式的 [名稱]。 其會以
https://<app-name>-<hash>.<region>.azurewebsites.net的形式作為您應用程式 DNS 名稱的一部分來使用。 - 要實際執行應用程式的區域。 其也會作為您應用程式的 DNS 名稱的一部分來使用。
- 應用程式的執行階段堆疊。 您可以在此處選取要用於應用程式的 Java 版本。
- 應用程式的主控方案。 這是定價層,其中包含應用程式的一組功能和調整限度。
- 應用程式的 [資源群組]。 資源群組允許您將應用程式所需的所有 Azure 資源分組 (在邏輯容器中)。
登入 Azure 入口網站,遵循下列步驟建立您的 Azure App 服務 資源。
步驟 1: 在 Azure 入口網站中:
- 在頂端搜尋列中,輸入 App Service。
- 請在 [服務] 標題下選取標示為 App Service 的項目。
- 選取 [建立>Web 應用程式]。 您也可以直接瀏覽至建立精靈。
步驟 2:設定新的應用程式 填寫表單,如下所示。
- 名稱: msdocs-quarkus-postgres。 已為您建立名為 msdocs-quarkus-postgres_group 的資源群組。
- 執行階段堆疊:JAVA 21。
- Java 網頁伺服器堆疊:Java SE (內嵌網頁伺服器)。
- 作系統: Linux。
- [區域]:您附近的任何 Azure 區域。
- Linux 方案: 新建 並使用 msdocs-quarkus-postgres 名稱。
- 定價方案:基本 B1。 準備好時,您可以 升級 至不同的定價層。
步驟 3:新增資料庫
- 選取 資料庫 索引標籤。
- 選取 [建立資料庫]。
- 在 [引擎] 中,選取 [PostgreSQL - 彈性伺服器]。 伺服器名稱和資料庫名稱預設會設定為適當的值。
步驟 4:設定 GitHub 部署
- 選取 [部署] 索引標籤。
- 選取 [持續部署]。
- 如果這是您第一次在 App Service 中設定 GitHub 部署,請選取 [ 授權 ] 並使用您的 GitHub 帳戶進行驗證。
- 在 [組織] 中,選取您的 GitHub 別名。
- 在 [存放庫] 中,選取 msdocs-quarkus-postgresql-sample-app。
- 在 [分支] 中,選取 [starter-no-infra]。
- 選取 [檢閱 + 建立]。
- 驗證完成時,選取 [建立]。 根據預設,建立精靈 會建立使用者指派的身分識別 ,讓工作流程使用 Microsoft Entra (OIDC 驗證) 進行驗證。 如需替代驗證選項,請參閱使用 GitHub Actions 部署至 App Service。
步驟 3:部署需要數分鐘的時間才能完成。 在部署完成時,選取 [前往資源] 按鈕。 系統會將您直接帶至 App Service 應用程式,但會建立下列資源:
- 資源群組:所有已建立資源的容器。
- App Service 方案:定義 App Service 的計算資源。 系統會建立基本層中的 Linux 方案。
- App Service:代表您的應用程式,並在 App Service 方案中執行。
- 虛擬網路:與 App Service 應用程式整合,並隔離後端網路流量。
- 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器:只能從虛擬網路內部存取。 系統會為您在伺服器上建立資料庫和使用者。
- 私用 DNS 區域:啟用虛擬網路中密鑰保存庫和資料庫伺服器的 DNS 解析。
3.安全連線秘密
建立精靈已為您產生連線變數做為應用程式設定。 不過,安全性最佳做法是將祕密完全從 App Service 中移出。 您將在服務連接器的協助下,將您的秘密移至密鑰保管庫,並將您的應用程式設定更改為 密鑰保管庫參考。
步驟 1:擷取現有的連接字串
- 在 App Service 頁面的左側功能表中,選取 [ 設定 > 環境變數]。
- 選取 [連接字串]。
- 選取 [AZURE_POSTGRESQL_CONNECTIONSTRING]。
- 在 [新增/編輯應用程式] 設定的 [ 值 ] 字段中,尋找字串結尾的使用者 標識元= 和 Password= 元件。
- 複製 使用者標識碼= 和 Password= 之後的使用者名稱和密碼字串,以供稍後使用。 此應用程式設定可讓您連線到私人端點後方所保護的Postgres資料庫。 不過,秘密會直接儲存在 App Service 應用程式中,這不是最好的方式。 您要變更此設定。
步驟 2:建立保護 金鑰保存庫 的子網 虛擬網路已經有兩個現有的子網,但其中一個已委派給 App Service,另一個已委派給適用於 PostgreSQL 的 Azure 資料庫。 您可以建立另一個密鑰保存庫,以使用私人端點安全地存取 金鑰保存庫(如需詳細資訊,請參閱 Azure Key Vault 的網路安全性)。
- 在 App Service 頁面的左側功能表中,選取 [ 概觀] 索引標籤。
- 選取應用程式的資源群組。
- 選取資源群組中的虛擬網路。
- 在虛擬網路的左側功能表中,選取 [ 設定 > 子網]。
- 選取+ 子網路。
- 在 [名稱] 中,輸入 subnet-keyvault。 接受預設值。
- 選取 ,然後新增。
步驟 3:建立金鑰保存庫以安全地管理秘密
- 在頂端搜尋列中,輸入「密鑰保存庫」,然後選取 [Marketplace>金鑰保存庫]。
- 在 [資源群組] 中,選取 [msdocs-quarkus-postgres_group]。
- 在 [金鑰保存庫名稱] 中,輸入只包含字母和數字的名稱。
- 在 [區域] 中,將它設定為與資源群組相同的位置。
步驟 4:使用私人端點保護金鑰保存庫
- 選擇 網路 標籤。
- 取消勾選 啟用公用存取。
- 選取 [建立私人端點]。
- 在 [資源群組] 中,選取 [msdocs-quarkus-postgres_group]。
- 在對話方塊的 [位置] 中,選取與 App Service 應用程式相同的位置。
- 在 [名稱] 中,輸入 msdocs-quarkus-postgresVaultEndpoint。
- 在 [虛擬網络] 中,選取 [vnet-xxxxxxx]。
- 在 [子網] 中, 子網密鑰保存庫。
- 請選擇 [確定]。
- 選取 [檢閱 + 建立],然後選取 [建立]。 等候金鑰保存庫部署完成。 您應該會看到「您的部署已完成」。
步驟 5:建立 PostgreSQL 連接器
- 在頂端搜尋列中,輸入 msdocs-quarkus-postgres,然後選取名為 msdocs-quarkus-postgres 的 App Service 資源。
- 在 App Service 頁面的左側功能表中,選取 [ 設定 > 服務連接器 > 建立]。
- 在 [服務類型] 中,選取 [適用於 PostgreSQL 的 DB 彈性伺服器]。
- 在 PostgreSQL 彈性伺服器中,應該已經選取 msdocs-quarkus-postgres-server 。
- 在 PostgreSQL 資料庫中,選取 msdocs-quarkus-postgres-database。
- 在 [用戶端類型] 中,選取 [Java]。
步驟 6:將秘密儲存在金鑰保存庫中
- 選擇「驗證」索引標籤。
- 選取 [ 連接字串]。
- 在 [ 用戶名稱 ] 和 [ 密碼] 中,貼上您稍早複製的密碼。
- 選取 [在 金鑰保存庫 中儲存秘密]。
- 在 [金鑰保存庫連線] 底下,選取 [新建]。 [建立連線] 對話方塊會在編輯對話方塊的頂端開啟。
步驟 7:建立 金鑰保存庫 連線
- 在 建立連線 對話方塊中,於 金鑰保管庫 選擇您稍早建立的金鑰保管庫。
- 在 [用戶端類型] 中,選取 [Java ] 以取得一致性。 您的應用程式程式代碼實際上不會直接使用金鑰保存庫。
- 按一下 檢閱 + 建立。
- 驗證完成時,請選取 建立。
步驟 8:完成 PostgreSQL 連接器設定
- 您回到 PostgreSQL 連接器的編輯對話框中。 在 [驗證] 索引標籤中,等候建立金鑰保存庫連接器。 完成時,[金鑰保存庫 連線] 下拉式清單會自動加以選取。
- 按一下 檢閱 + 建立。
- 驗證完成時,請選取 建立。 等到 [建立成功 ] 通知出現為止。
步驟 9:驗證 金鑰保存庫 整合
- 從左側功能表中,再次選取 [ 設定 > 環境變數 ]。
- 在 AZURE_POSTGRESQL_CONNECTIONSTRING 旁,選取 [顯示值]。 此值應該是
@Microsoft.KeyVault(...),這表示它是 密鑰保存庫參考 ,因為密碼現在已在密鑰保存庫中管理。
步驟 10:從 App Service 刪除資料庫認證
- 選取 連線字串 索引標籤。
- 在 AZURE_POSTGRESQL_CONNECTIONSTRING右側,選取 [ 刪除]。 請記住,建立精靈會在開頭為您建立此連接字串。
總結來說,確保您的連接密鑰的過程包括:
- 從 App Service 應用程式的環境變數擷取連線秘密。
- 使用私人端點建立金鑰保存庫。
- 使用系統指派的受控識別建立 金鑰保存庫 連線。
- 建立服務連接器,以將連線秘密儲存在金鑰保存庫中。
- 從 App Service 應用程式刪除舊的連線秘密。
有問題嗎? 查看疑難排解區段。
4.部署範例程式碼
在建立精靈中,您已使用 GitHub Actions 從範例 GitHub 存放庫設定連續部署。 這只是部署至 App Service 的許多方式之一,但也是在部署程序中持續整合的絕佳方式。 根據預設,每次對您的 GitHub 存放庫執行 git push 都會開始建置和部署動作。
請注意:
- Quarkus 預設會接聽埠 8080。 在生產環境中,它必須設定為接聽 App Service 中環境變數所
PORT指定的埠。 - 您部署的 Java 套件必須是 Uber-Jar。
- 為了簡化本教學課程,您將在部署程序期間停用測試。 GitHub Actions 執行器無法存取 Azure 中的 PostgreSQL 資料庫,因此任何需要資料庫存取的整合測試都會失敗,例如 Quarkus 應用程式範例的情況。
步驟 1: 回到範例分支的 GitHub 程式代碼空間中,執行 git pull origin starter-no-infra。
這會將新認可的 GitHub 工作流程檔案提取到 codespace。
步驟 2 (選項 1:使用 GitHub Copilot):
- 選取 [聊天] 檢視,然後選取 +,即可啟動新的聊天工作階段。
- 問:「@workspace應用程式如何連線至資料庫?」Copilot 可能會提供您在 src/main/resources/application.properties 中如何設定 Quarkus 數據源設定的一些說明。
- 例如:「@workspace我在 Azure App 服務 中使用 Java 用戶端類型建立 PostgreSQL 服務連接器,而應用程式設定名稱AZURE_POSTGRESQL_CONNECTIONSTRING。我想要在生產環境中執行應用程式時使用此連接字串。Copilot 可能會提供類似 選項 2 中的程式代碼建議:沒有下面的 GitHub Copilot 步驟,甚至告訴您在 src/main/resources/application.properties 檔案中進行變更。
- 在文件總管中,開啟 src/main/resources/application.properties 並新增代碼建議。
- 說:「@workspace,如何設定這個專案以便建立 Uber Jar?」Copilot 可能會提供與下面選項 2:不使用 GitHub Copilot步驟類似的程式碼建議,並告訴您在src/main/resources/application.properties檔案中進行變更。
- 在文件總管中,開啟 src/main/resources/application.properties 並新增代碼建議。
- 說「@workspace 我要如何使用 App Service 連接埠?」Copilot 提供類似以下 [選項 2:沒有 GitHub Copilot] 步驟中的程式碼建議,甚至告訴您在 src/main/resources/application.properties 檔案中進行變更。
- 在文件總管中,開啟 src/main/resources/application.properties 並新增代碼建議。 GitHub Copilot 不會每次都提供相同的回應,而且這些回應不一定正確。 您可能需要詢問更多問題,以微調其回應。 如需秘訣,請參閱 如何在我的程式代碼空間中使用 GitHub Copilot?。
步驟 2 (選項 2:不含 GitHub Copilot):
- 在總管中開啟 src/main/resources/application.properties。 Quarkus 會使用此檔案來載入 Java 屬性。
- 取消註解行 10-12。 這些設定會使用您使用 PostgreSQL 連接器建立的應用程式設定、建立 Uber Jar,並將埠設定為 App Service 所使用的埠。
步驟 3 (選項 1:使用 GitHub Copilot):
- 詢問「@workspace針對 GitHub Actions 部署,我想略過測試以避免資料庫相關錯誤」。Copilot 可能會提供類似 選項 2 中的程式代碼建議:沒有下面的 GitHub Copilot 步驟,甚至告訴您在 .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml 檔案中進行變更。
- 在檔案總管中開啟 .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml,並增加程式碼建議。 如需秘訣,請參閱 如何在我的程式代碼空間中使用 GitHub Copilot?。
步驟 3 (選項 2:沒有 GitHub Copilot):
- 在總管中開啟 .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml。 這是建置精靈為您建立的 GitHub Actions 工作流程。
- 尋找
Build with Maven步驟,並將run命令修改為mvn clean install -DskipTests。-DskipTests告知 Maven 略過測試,讓部署不會在資料庫錯誤時失敗。 GitHub Actions 容器無法連線到 PostgreSQL 伺服器。
步驟4:
- 選取 [原始檔控制] 延伸模組。
- 在文字方塊中,輸入提交訊息,例如
Configure DB and deployment。 或者,選取
並讓 GitHub Copilot 為您產生認可訊息。 - 選取 [認可],然後使用 [是] 來確認。
- 選取 [同步變更 1],然後使用 [確定] 來確認。
步驟 5:
- 從左側功能表中,選取 [部署>中心>記錄]。
- 在部署執行的記錄項目中,選取時間戳記最新的 [建置/部署記錄] 項目。
步驟 6: 系統會帶您前往 GitHub 存放庫,並查看 GitHub 動作正在執行。 工作流程檔案會定義兩個不同的階段:建置和部署。 等候 GitHub 執行顯示成功狀態。 需要約 5 分鐘的時間。
有問題嗎? 查看疑難排解區段。
5.瀏覽至應用程式
步驟 1:在 [App Service] 頁面中:
- 從左側功能表中選取 [概觀]。
- 選取應用程式的 URL。
步驟 2:將一些水果新增至清單。 恭喜,您正在 Azure App 服務 中執行 Web 應用程式,並安全地連線至 PostgreSQL 的適用於 PostgreSQL 的 Azure 資料庫。
6.資料流診斷記錄
Azure App 服務 會擷取輸出到主控台的所有訊息,以協助您診斷應用程式的問題。 如下所示,應用程式範例包含可示範這項功能的標準 JBoss 記錄陳述式。
private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());
@GET
public List<FruitEntity> get() {
LOGGER.info("In FruitEntityResource.get()");
return FruitEntity.listAll(Sort.by("name"));
}
步驟 1:在 [App Service] 頁面中:
- 從左側功能表中,選取 [監視]> [App Service 記錄]。
- 在 [應用程式記錄] 下,選取 [檔案系統]。
- 在最上層的功能表中,選取 [儲存]。
步驟 2:從左側功能表中,選取 [記錄串流]。 您會看到應用程式的記錄,包括平台記錄和來自容器內的記錄。
在啟用適用於 .NET、Node.js、Python 和 Java 應用程式的 Azure 監視器 OpenTelemetry 系列中深入了解 Java 應用程式中的記錄。
7.清除資源
完成後,您可以刪除資源群組,以從 Azure 訂用帳戶中刪除所有資源。
步驟 1:在 Azure 入口網站頂端的搜尋列中:
- 輸入資源群組名稱。
- 選取資源群組。
步驟 2:在資源群組頁面中,選取 [刪除資源群組]。
步驟 3:
- 輸入您確認要刪除的資源群組名稱。
- 選取 [刪除] 。
- 再次使用 [刪除] 來確認。
2.建立 Azure 資源並部署應用程式範例
在此步驟中,您會建立 Azure 資源,並將範例應用程式部署至 Linux 上的 App Service。 本教學課程中使用的步驟會建立一組預設保護資源,其中包含 App Service 和 適用於 PostgreSQL 的 Azure 資料庫。
開發容器已具備 Azure Developer CLI (AZD)。
從 GitHub Codespace 的存放庫根目錄中,執行
azd init。azd init --template javase-app-service-postgresql-infra出現提示時,請提供下列答案:
問題 Answer 目前的目錄不是空的。 您是否要在「<您的目錄>」初始化專案? Y 您要對這些檔案執行什麼動作? 維持現有的檔案不變 輸入新的環境名稱 輸入唯一名稱。 AZD 範本會使用此名稱作為 Azure 中 Web 應用程式的 DNS 名稱一部分 ( <app-name>-<hash>.azurewebsites.net)。 允許英數字元與連字號。執行
azd auth login命令並遵循提示來登入 Azure:azd auth login使用
azd provision命令建立必要的 Azure 資源。 請遵循提示選取 Azure 資源所需的訂用帳戶和位置。azd provisionazd 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 位址,每個私人端點各有一個位址。
- 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器:只能從虛擬網路內部存取。 系統會為您在伺服器上建立資料庫和使用者。
- 私人 DNS 區域:啟用虛擬網路中 PostgreSQL 伺服器的 DNS 解析。
- Log Analytics 工作區:作為應用程式傳送記錄的目標容器,您也可以在其中查詢記錄。
- Azure Managed Redis:僅能從其私有端點背後存取。
- 金鑰保存庫:只能從其私人端點後方存取。 用於管理 App Service 應用程式的秘密。
布建完成後,請在 AZD 輸出中尋找設定
AZURE_POSTGRESQL_CONNECTIONSTRING。 為了保護祕密安全,只會顯示設定名稱。 其在 AZD 輸出中看起來像這樣:App Service app has the following connection settings: - AZURE_POSTGRESQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE您使用的 AZD 範本已為您產生連線變數作為應用程式設定,並將其輸出至終端機以方便使用。 應用程式設定是將連線秘密保留在程式碼存放庫外部的一個方法。 您也可以找到所建立 App Service 應用程式之應用程式設定頁面的直接連結。
有問題嗎? 查看疑難排解區段。
3.修改範例程式代碼並重新部署
您必須在應用程式程式代碼中進行一些變更,才能讓它與 App Service 搭配運作:
- Quarkus 預設會接聽埠 8080。 在生產環境中,它必須設定為接聽 App Service 中環境變數所
PORT指定的埠。 - 您部署的 Java 套件必須是 Uber-Jar。
- 為了簡化本教學課程,您將在部署程序期間停用測試。 GitHub Actions 執行器無法存取 Azure 中的 PostgreSQL 資料庫,因此任何需要資料庫存取的整合測試都會失敗,例如 Quarkus 應用程式範例的情況。
在 GitHub codespace 中,選取 聊天 檢視,然後選取 + 以啟動新的聊天會話。
問:「@workspace應用程式如何連線至資料庫?」Copilot 可能會提供您在 src/main/resources/application.properties 中如何設定 quarkus 數據源設定的一些說明。
例如:「@workspace我已使用 Java 用戶端類型在 Azure App 服務 中建立 PostgreSQL 服務連接器,且應用程式設定名稱AZURE_POSTGRESQL_CONNECTIONSTRING。我想要在生產環境中執行應用程式時使用此連接字串。Copilot 可能會提供類似 選項 2 中的程式代碼建議:沒有下面的 GitHub Copilot 步驟,甚至告訴您在 src/main/resources/application.properties 檔案中進行變更。
在 src/main/resources/application.properties 中新增程式碼建議。
說:「@workspace,如何設定這個專案以便建立 Uber Jar?」Copilot 可能會提供與下面選項 2:不使用 GitHub Copilot步驟類似的程式碼建議,並告訴您在src/main/resources/application.properties檔案中進行變更。
在 src/main/resources/application.properties 中新增程式碼建議。
說「@workspace 我要如何使用 App Service 連接埠?」Copilot 提供類似以下 [選項 2:沒有 GitHub Copilot] 步驟中的程式碼建議,甚至告訴您在 src/main/resources/application.properties 檔案中進行變更。
在 src/main/resources/application.properties 中新增程式碼建議。
GitHub Copilot 不會每次都提供相同的回應,而且這些回應不一定正確。 您可能需要詢問更多問題,以微調其回應。 如需秘訣,請參閱 如何在我的程式代碼空間中使用 GitHub Copilot?。
在終端機中,執行
azd deploy。azd deploy
有問題嗎? 查看疑難排解區段。
5.瀏覽至應用程式
在 AZD 輸出中,尋找您應用程式的 URL,並在瀏覽器中瀏覽至目標。 AZD 輸出中 URL 看起來像這樣:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
將一些水果新增至清單。
恭喜,您正在 Azure App 服務 中執行 Web 應用程式,並安全地連線至 PostgreSQL 的適用於 PostgreSQL 的 Azure 資料庫。
有問題嗎? 查看疑難排解區段。
6.資料流診斷記錄
Azure App 服務 會擷取主控台記錄,以協助您診斷應用程式的問題。 為了方便起見,AZD 範本已經 啟用了本地文件系統的記錄功能,並將 日誌傳送至 Log Analytics 工作區。
如下所示,應用程式範例包含可示範這項功能的標準 JBoss 記錄陳述式。
private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());
@GET
public List<FruitEntity> get() {
LOGGER.info("In FruitEntityResource.get()");
return FruitEntity.listAll(Sort.by("name"));
}
在 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
在啟用適用於 .NET、Node.js、Python 和 Java 應用程式的 Azure 監視器 OpenTelemetry 系列中深入了解 Java 應用程式中的記錄。
有問題嗎? 查看疑難排解區段。
7.清除資源
若要刪除目前部署環境中的所有 Azure 資源,請執行 azd down 並遵循提示。
azd down
疑難排解
GitHub Actions 執行在建置階段失敗
選取失敗的建置階段,以查看哪個步驟失敗。 如果是 使用 Maven 構建 階段,展開步驟以確認使用了 -DskipTests 選項。 如果沒有,請返回 4。部署範例程序代碼 ,並根據指示修改 GitHub 工作流程檔案。
應用程式無法啟動,並在記錄數據流中顯示下列錯誤:「模型類別是針對預設持續性單位 <預設值> 所定義,但找不到已設定的數據源 <預設值> :將不會建立預設 EntityManagerFactory。」
此 Quarkus 錯誤很可能是因為應用程式無法連線到 Azure 資料庫。 請確定應用程式設定 AZURE_POSTGRESQL_CONNECTIONSTRING 尚未變更,且 application.properties 已正確使用應用程式設定。
應用程式無法啟動,日誌流顯示「等候容器熱身請求的回應」
您的應用程式可能未設定為接聽 App Service PORT 環境變數指定的埠,因此無法回應任何要求。 如果 App Service 未從您的應用程式取得回應,則會假設應用程式無法啟動。 返回 4。部署範例程序代碼 ,並確認 application.properties 已正確設定。
應用程式運作正常,但我看到錯誤記錄檔「ERROR [org.acm.hib.orm.pan.ent.FruitEntityResource] (vert.x-eventloop-thread-0) 無法處理要求:jakarta.ws.rs.NotFoundException: HTTP 404 Not Found“。
這是 Vert.x 錯誤 (請參閱 Quarkus 回應式架構),指出用戶端要求未知的路徑。 當用戶端在Hibernate資料庫移轉發生之前要求REST API時,第一次啟動應用程式時就會發生此情況。
在 App Service 中,每個應用程式啟動時也會發生此錯誤,因為 App Service 會透過將要求傳送 GET 至 /robots933456.txt來驗證應用程式是否啟動。
常見問題集
- 這設定會產生多少費用?
- 如何使用其他工具連線至虛擬網路後方受保護的 PostgreSQL 伺服器?
- 本機應用程式開發如何與 GitHub Actions 搭配運作?
- 如果我想要在 GitHub 工作流程期間使用 PostgreSQL 執行測試,該怎麼辦?
- 我沒有權限可建立使用者指派的身分識別
- 我可以在 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 工作流程期間使用 PostgreSQL 執行測試,該怎麼辦?
預設 Quarkus 應用程式範例包含具有資料庫連線能力的測試。 若要避免連線錯誤,您新增了 -skipTests 屬性。 如有需要,您可以針對 PostgreSQL 服務容器執行測試。 例如,在 GitHub 分支 (.github/workflows/main_cephalin-quarkus.yml) 中自動產生的工作流程檔案中,進行下列變更:
將 PostgreSQL 容器的 YAML 程式碼新增至
build作業,如下列程式碼片段所示。... jobs: build: runs-on: ubuntu-latest # BEGIN CODE ADDITION container: ubuntu services: # Hostname for the PostgreSQL container postgresdb: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres POSTGRES_DB: postgres # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 # END CODE ADDITION steps: - uses: actions/checkout@v4 ...container: ubuntu會指示 GitHub 在容器中執行build作業。 如此一來,當工作流程執行時,您開發環境jdbc:postgresql://postgresdb:5432/postgres中的連接字串就可以如往常運作。 如需 GitHub Actions 中 PostgreSQL 連線能力的詳細資訊,請參閱建立 PostgreSQL 服務容器。在
Build with Maven步驟中,移除-DskipTests。 例如:- name: Build with Maven run: mvn clean install -Dquarkus.package.type=uber-jar
我沒有權限可建立使用者指派的身分識別
請參閱 部署中心中的 GitHub Actions 部署設定。
我可以在 Codespace 中使用 GitHub Copilot 執行哪些作業?
您可能已經注意到建立 Codespace 時,GitHub Copilot 聊天檢視已可供您使用。 不過,您需要一個 GitHub Copilot 帳戶 (英文) (可免費試用 30 天)。
與 GitHub Copilot 交談時,有幾項提示可供您使用:
- 在單一聊天中,問題和答案會相互累積,您可以調整問題來微調您得到的答案。
- 根據預設,GitHub Copilot 無法存取存放庫中的任何檔案。 若要詢問檔案相關問題,請先在編輯器中開啟檔案。
- 為了讓 GitHub Copilot 在準備其解答時存取存放庫中的所有檔案,請在問題開頭加上
@workspace。 如需詳細資訊,請參閱Use the @workspace agent。 - 在聊天過程中,GitHub Copilot 可以建議變更,(使用
@workspace)甚至可以建議在何處進行變更,但不允許自動為您進行變更。 您可以自行新增建議的變更並加以測試。
後續步驟
在開發人員指南中深入了解如何在 App Service 上執行 Java 應用程式。
了解如何使用自訂網域和憑證保障您的應用程式。