共用方式為


教學課程:使用 Linux 上的 Azure App Service 和 Azure Cosmos DB 建置 Java Spring Boot Web 應用程式

在本教學課程中,您會了解如何在 Azure App Service 中建置、設定及部署安全的 Spring Boot 應用程式,以連線到 Azure 中的 MongoDB 資料庫 (實際上是具有 MongoDB API 的 Cosmos DB 資料庫)。 完成後,Linux 上的 Azure App Service 上會執行 JAVA SE 應用程式。

將資料儲存在 Cosmos DB 中的 Spring Boot 應用程式的螢幕擷取畫面。

在本教學課程中,您會了解如何:

  • 使用 MongoDB API 建立 Azure App Service 和 Azure Cosmos DB 的預設保護架構。
  • 使用受控識別和 Key Vault 參考來保護連線祕密。
  • 從 GitHub 存放庫將 Spring Boot 範例應用程式部署至 App Service。
  • 存取應用程式程式碼中的 App Service 應用程式設定。
  • 進行更新並重新部署應用程式程式碼。
  • 串流來自 App Service 的診斷記錄。
  • 在 Azure 入口網站中管理應用程式。
  • 使用 Azure Developer CLI 佈建相同的架構並進行部署。
  • 使用 GitHub Codespaces 和 GitHub Copilot 最佳化您的開發工作流程。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,可以建立一個免費帳戶
  • GitHub 帳戶。 您也可免費取得
  • 使用 Spring Framework 開發的 JAVA 知識。
  • (選擇性) 若要嘗試 GitHub Copilot,一個 GitHub Copilot 帳戶。 有 30 天免費試用版可用。

跳到結尾

您可以在本教學課程中快速部署範例應用程式,並查看其在 Azure 中執行。 只要在 Azure Cloud Shell 中執行下列命令,然後遵循提示:

mkdir msdocs-spring-boot-mongodb-sample-app
cd msdocs-spring-boot-mongodb-sample-app
azd init --template msdocs-spring-boot-mongodb-sample-app
azd up

1.執行範例

首先,您會將範例資料驅動的應用程式設定為起點。 為了方便起見,範例存放庫 (英文) 包含開發容器 (英文) 設定。 開發容器具有開發應用程式所需的全部內容,包括 MongoDB 資料庫、快取,以及範例應用程式所需的所有環境變數。 開發容器可以在 GitHub codespace 中執行,這表示您可以在任何電腦上使用網頁瀏覽器執行範例。

第 1 步:在新的瀏覽器視窗中:

  1. 登入您的 GitHub 帳戶。
  2. 瀏覽至 https://github.com/Azure-Samples/msdocs-spring-boot-mongodb-sample-app/fork
  3. 取消選取 [僅複製主分支]。 您需要所有分支。
  4. 選取 [建立派生]

螢幕擷取畫面:顯示如何建立範例 GitHub 存放庫的分支。

步驟 2:在 GitHub 分支中:

  1. 為起始分支選取 [主分支]> [starter-no-infra]。 此分支只包含範例專案,沒有與 Azure 相關的檔案或設定。
  2. 選取 [程式碼] > [在 starter-no-infra 上建立 codespace]。 設定 Codespace 需要幾分鐘的時間。

螢幕擷取畫面:顯示如何在 GitHub 中建立 Codespace。

步驟 3:在 codespace 終端機中:

  1. 執行 mvn package spring-boot:run
  2. 當您看到通知 Your application running on port 8080 is available. 時,請選取 [在瀏覽器中開啟]。 您應該會在新的瀏覽器索引標籤中看到應用程式範例。若要停止 Jetty 伺服器,請輸入 Ctrl+C

螢幕擷取畫面:顯示如何在 GitHub Codespace 內執行應用程式範例。

提示

您可以向 GitHub Copilot (英文) 詢問有關此存放庫的資訊。 例如:

  • @workspace 此專案有何用途?
  • @workspace 應用程式如何連線到資料庫?
  • @workspace .devcontainer 資料夾的功能為何?

有問題嗎? 查看疑難排解區段

2.建立 App Service 和 Cosmos DB

首先,您會建立 Azure 資源。 本教學課程中使用的步驟會建立一組預設保護資源,其中包括 App Service 和 Azure Cosmos DB。 針對建立程序,您會指定:

  • Web 應用程式的 [名稱]。 其會以 https://<app-name>-<hash>.<region>.azurewebsites.net 的形式作為您應用程式 DNS 名稱的一部分來使用。
  • 要實際執行應用程式的區域。 其也會作為您應用程式的 DNS 名稱的一部分來使用。
  • 應用程式的執行階段堆疊。 您可以在此處選取要用於應用程式的 Java 版本。
  • 應用程式的主控方案。 這是定價層,其中包含應用程式的一組功能和調整限度。
  • 應用程式的 [資源群組]。 資源群組允許您將應用程式所需的所有 Azure 資源分組 (在邏輯容器中)。

登入 Azure 入口網站,遵循下列步驟建立您的 Azure App Service 資源。

步驟 1:在 Azure 入口網站中:

  1. 在 Azure 入口網站頂端的搜尋列中輸入「Web 應用程式資料庫」。
  2. 選取 [Marketplace] 標題下標示為 [Web 應用程式 + 資料庫] 的項目。 您也可以直接瀏覽至建立精靈

螢幕擷取畫面:顯示如何使用頂端工具列中的搜尋方塊以尋找 [Web 應用程式 + 資料庫] 建立精靈。

步驟 2:在 [建立 Web 應用程式 + 資料庫] 頁面上,填寫表單,如下所示。

  1. 資源群組:選取 [新建] 並使用 msdocs-spring-cosmosdb-tutorial 的名稱。
  2. [區域]:您附近的任何 Azure 區域。
  3. 名稱msdocs-spring-cosmosdb-XYZ,其中 XYZ 是任意三個隨機字元。 此名稱在整個 Azure 中必須是唯一的。
  4. 執行階段堆疊JAVA 21
  5. Java 網頁伺服器堆疊Java SE (內嵌網頁伺服器)
  6. 引擎適用於 MongoDB 的 Cosmos DB API。 Cosmos DB 是 Azure 上完全受控的 NoSQL、關聯式及向量資料庫即服務。
  7. [主控方案]:[基本]。 一切就緒時,您即可擴大 (部分機器翻譯) 至生產定價層。
  8. 選取 [檢閱 + 建立]。
  9. 驗證完成時,選取 [建立]

螢幕擷取畫面:顯示如何在 [Web 應用程式 + 資料庫] 精靈中設定新的應用程式和資料庫。

步驟 3:部署需要數分鐘的時間才能完成。 在部署完成時,選取 [前往資源] 按鈕。 系統會將您直接帶至 App Service 應用程式,但會建立下列資源:

  • 資源群組:所有已建立資源的容器。
  • App Service 方案:定義 App Service 的計算資源。 系統會建立基本層中的 Linux 方案。
  • App Service:代表您的應用程式,並在 App Service 方案中執行。
  • 虛擬網路:與 App Service 應用程式整合,並隔離後端網路流量。
  • Azure Cosmos DB:只能從其私人端點後方存取。 系統會為您在資料庫帳戶上建立資料庫。
  • 私人端點:虛擬網路中資料庫伺服器和 Redis 快取的存取端點。
  • 私人 DNS 區域:啟用虛擬網路中資料庫伺服器和 Redis 快取的 DNS 解析。

螢幕擷取畫面:顯示部署流程已完成。

有問題嗎? 查看疑難排解區段

3.安全連線秘密

建立精靈已為您產生連線字串作為應用程式設定。 不過,安全性最佳做法是將祕密完全從 App Service 中移出。 在服務連接器的協助下,您可以將祕密移至金鑰保存庫,並將您的應用程式設定變更為 Key Vault 參考 (部分機器翻譯)。

步驟 1:在 [App Service] 頁面中:

  1. 在左側功能表中,選取 [設定 > 環境變數]
  2. AZURE_COSMOS_CONNECTIONSTRING 旁,選取 [顯示值]。 此連接字串可讓您連線到私人端點後方受保護的 Cosmos DB 資料庫。 不過,秘密會直接儲存在 App Service 應用程式中,這不是最好的方式。 您要變更此設定。

顯示如何查看應用程式設定值的螢幕擷取畫面。

步驟 2:建立金鑰保存庫,以安全地管理秘密。

  1. 在頂端搜尋列中,輸入 "key vault",然後選取 [Marketplace] > [Key Vault]
  2. 在 [資源群組] 中,選取 msdocs-spring-cosmosdb-tutorial
  3. 在 [金鑰保存庫名稱] 中,輸入只包含字母和數字的名稱。
  4. 在 [區域] 中,將它設定為作為資源群組的範例位置。

顯示如何建立金鑰保存庫的螢幕擷取畫面。

步驟 3:

  1. 選取 [網路] 索引標籤。
  2. 取消選取 [啟用公用存取]
  3. 選取 [建立私人端點]
  4. 在 [資源群組] 中,選取 msdocs-spring-cosmosdb-tutorial
  5. 在 [金鑰保存庫名稱] 中,輸入只包含字母和數字的名稱。
  6. 在 [區域] 中,將它設定為作為資源群組的範例位置。
  7. 在對話方塊的 [位置] 中,選取與 App Service 應用程式相同的位置。
  8. 在 [資源群組] 中,選取 msdocs-spring-cosmosdb-tutorial
  9. 在 [名稱] 中,輸入 msdocs-spring-cosmosdb-XYZVaultEndpoint
  10. 在 [虛擬網路] 中,選取 msdocs-spring-cosmosdb-XYZVnet
  11. 在 [子網路] 中,msdocs-spring-cosmosdb-XYZSubnet
  12. 選取 [確定]。
  13. 選取 [檢閱 + 建立],然後選取 [建立]。 等候金鑰保存庫部署完成。 您應該會看到「您的部署已完成」。

顯示如何使用私人端點保護金鑰保存庫的螢幕擷取畫面。

步驟 4:

  1. 在頂端搜尋列中,輸入 msdocs-spring-cosmosdb,然後輸入名為 msdocs-spring-cosmosdb-XYZ 的 App Service 資源。
  2. 在 App Service 頁面的左側功能表中,選取 [設定 > 服務連接器]。 已經有連接器,這是為您建立的應用程式建立精靈。
  3. 選取連接器旁的核取方塊,然後選取 [編輯]
  4. 在 [基本] 索引標籤中,將 [用戶端類型] 設定為 SpringBoot。 此選項會為您建立 Spring Boot 特定的環境變數。
  5. 選取 [驗證] 索引標籤。
  6. 選取 [在 Key Vault 中儲存秘密]
  7. 在 [金鑰保存庫連線] 底下,選取 [新建]。 [建立連線] 對話方塊會在編輯對話方塊的頂端開啟。

顯示如何使用金鑰保存庫連線編輯服務連接器的螢幕擷取畫面。

步驟 5:在 Key Vault 連線的 [建立連線] 對話方塊中:

  1. Key Vault 中:選取您稍早建立的金鑰保存庫。
  2. 選取 [檢閱 + 建立] 。 您應該會看到 [系統指派的受控識別] 設定為 [已選取]
  3. 驗證完成時,選取 [建立]

顯示如何設定金鑰保存庫服務連接器的螢幕擷取畫面。

步驟 6:您會回到 defaultConnector 的編輯對話方塊中。

  1. 在 [驗證] 索引標籤中,等候建立金鑰保存庫連接器。 完成時,[Key Vault 連線] 下拉式清單會自動加以選取。
  2. 選取 [下一步:網路]
  3. 選取 [設定防火牆規則以啟用對目標服務的存取權]。 如果您看到訊息「目標服務上沒有私人端點」,請略過該訊息。 應用程式建立精靈已使用私人端點保護 Cosmos DB 資料庫。
  4. 選取 [儲存]。 等到 [更新成功] 通知出現為止。

顯示在 defaultConnector 中選取的金鑰保存庫連線的螢幕擷取畫面。

步驟 7:確認您的變更:

  1. 從左側功能表中,再次選取 [環境變數]
  2. 請確保應用程式設定 spring.data.mongodb.uri 存在。 預設連接器已為您產生它,並且 Spring Boot 應用程式已使用該變數。
  3. 在應用程式設定旁,選取 [顯示值]。 該值應該是 @Microsoft.KeyVault(...),這表示它是金鑰保存庫參考,因為現在已在金鑰保存庫中管理秘密。

顯示如何在 Azure 中查看 Spring Boot 環境變數值的螢幕擷取畫面。

有問題嗎? 查看疑難排解區段

4.部署範例程式碼

在此步驟中,請使用 GitHub Actions 來設定 GitHub 部署。 這只是部署至 App Service 的許多方式之一,但也是在部署程序中持續整合的絕佳方式。 根據預設,每次對您的 GitHub 存放庫執行 git push 都會開始建置和部署動作。

步驟 1:在左側功能表中選取 [部署] > [部署中心]

螢幕擷取畫面:顯示如何在 App Service 中開啟 [部署中心]。

步驟 2:在 [部署中心] 頁面中:

  1. 在 [來源] 中,選取 [GitHub]。 根據預設,系統會選取 GitHub Actions 作為組建提供者。
  2. 登入您的 GitHub 帳戶,並遵循提示來授權 Azure。
  3. 在 [組織] 中,選取您的帳戶。
  4. 在 [存放庫] 中,選取 msdocs-spring-boot-mongodb-sample-app
  5. 在 [分支] 中,選取 [starter-no-infra]。 這是您搭配應用程式範例使用的相同分支,未包含任何 Azure 相關檔案或設定。
  6. 對於 [驗證類型],選取 [使用者指派的身分識別]
  7. 在最上層的功能表中,選取 [儲存]。 App Service 會將工作流程檔案認可至 .github/workflows 目錄中選擇的 GitHub 存放庫。 根據預設,部署中心會為工作流程建立使用者指派的身分識別,以使用 Microsoft Entra 進行驗證 (OIDC 驗證)。 如需替代驗證選項,請參閱使用 GitHub Actions 部署至 App Service

螢幕擷取畫面:顯示如何使用 GitHub Actions 設定 CI/CD。

步驟 3:

  1. 選取 [記錄] 索引標籤。看到新的部署已執行,但狀態為 [失敗]
  2. 選取 [建置/部署記錄]。 瀏覽器索引標籤會開啟至 GitHub 中分支存放庫的 [動作] 索引標籤。 在 [註釋] 中,您會看到錯誤 The string 'java21' is not valid SeVer notation for a Java version。 如果您想要,請在頁面中選取失敗的 [建置] 步驟,以取得詳細資訊。

顯示部署中心 [記錄] 頁面中錯誤的螢幕擷取畫面。

步驟 4:錯誤顯示 GitHub 工作流程期間發生錯誤。 若要修正此問題,請先將最新的變更提取到您的 codespace。 回到範例分支的 GitHub codespace 中,執行 git pull origin starter-no-infra。 這會將新認可的工作流程檔案提取到您的 Codespace。

螢幕擷取畫面:顯示 GitHub Codespace 內的 Git 提取。

步驟 5 (選項 1:使用 GitHub Copilot):

  1. 選取 [聊天] 檢視,然後選取 +,即可啟動新的聊天工作階段。
  2. 問:「@workspace 為什麼我在 GitHub Actions 中收到錯誤:字串 'java21' 不是 JAVA 版本的有效 SemVer 標記法。」Copilot 可能會提供說明,甚至提供您需要修正之工作流程檔案的連結。
  3. 在總管中開啟 .github/workflows/starter-no-infra_msdocs-spring-cosmosdb-123.yaml,並進行建議的修正。 GitHub Copilot 不會每次都提供您相同的回應,您可能需要提出更多問題來微調其回應。 如需提示,請參閱我可以在 Codespace 中使用 GitHub Copilot 執行哪些作業?

螢幕擷取畫面:顯示如何在新的 GitHub Copilot 聊天工作階段中詢問問題。

步驟 5 (選項 2:不使用 GitHub Copilot):

  1. 在總管中開啟 .github/workflows/starter-no-infra_msdocs-spring-cosmosdb-123.yaml 並尋找 setup-java@v4 動作。
  2. java-version 的值變更為 '21'

顯示 GitHub codespace 和已開啟自動產生的工作流程檔案的螢幕擷取畫面。

步驟 6:

  1. 選取 [原始檔控制] 延伸模組。
  2. 在文字方塊中,輸入提交訊息,例如 Fix error in java-version。 或者,選取 並讓 GitHub Copilot 為您產生認可訊息。
  3. 選取 [認可],然後使用 [是] 來確認。
  4. 選取 [同步變更 1],然後使用 [確定] 來確認。

螢幕擷取畫面:顯示要認可並推送至 GitHub 的變更。

步驟 7:返回 Azure 入口網站的 [部署中心] 頁面:

  1. 在 [記錄] 索引標籤下,選取 [重新整理]。 新的部署執行已從您認可的變更開始。
  2. 在部署執行的記錄項目中,選取最新時間戳記的 [建置/部署記錄] 項目。

顯示部署中心 [記錄] 頁面中成功部署的螢幕擷取畫面。

步驟 8:您會前往 GitHub 存放庫,並看到 GitHub 動作正在執行。 工作流程檔案會定義兩個不同的階段:建置和部署。 等候 GitHub 執行到顯示 [完成] 狀態。

顯示成功的 GitHub 執行的螢幕擷取畫面。

有問題嗎? 查看疑難排解區段

5.瀏覽至應用程式

步驟 1:在 [App Service] 頁面中:

  1. 從左側功能表中選取 [概觀]
  2. 選取應用程式的 URL。

螢幕擷取畫面:顯示如何從 Azure 入口網站啟動 App Service。

第 2 步:將幾項工作新增至清單。 恭喜,您正在 Azure App Service 中執行 Web 應用程式,並安全地連線至 Azure Cosmos DB。

Spring Boot Web 應用程式的螢幕擷取畫面,其中包含在 Azure 中執行的 Cosmos DB。

有問題嗎? 查看疑難排解區段

6.資料流診斷記錄

Azure App Service 會擷取輸出到主控台的所有訊息,以協助您診斷應用程式的問題。 如下列程式碼片段所示,應用程式範例包含可示範這項功能的標準 Log4j 記錄陳述式:

private static Logger logger = LoggerFactory.getLogger(TodoListController.class);

@Autowired
private TodoItemRepository todoItemRepository;

public TodoListController() {
}

/**
 * HTTP GET
 */
@GetMapping(path = "/api/todolist/{index}", produces = {MediaType.APPLICATION_JSON_VALUE})
public TodoItem getTodoItem(@PathVariable("index") String index) {
    logger.info("GET request access '/api/todolist/{}' path.", index);
    return todoItemRepository.findById(index).get();
}

步驟 1:在 [App Service] 頁面中:

  1. 從左側功能表中,選取 [App Service 記錄]
  2. 在 [應用程式記錄] 下,選取 [檔案系統]
  3. 在最上層的功能表中,選取 [儲存]

螢幕擷取畫面:顯示如何在 Azure 入口網站中啟用 App Service 的原生記錄。

步驟 2:從左側功能表中,選取 [記錄串流]。 您會看到應用程式的記錄,包括平台記錄和來自容器內的記錄。

螢幕擷取畫面:顯示如何在 Azure 入口網站中檢視記錄串流。

啟用適用於 .NET、Node.js、Python 和 Java 應用程式的 Azure 監視器 OpenTelemetry 系列中深入了解 Java 應用程式中的記錄。

有問題嗎? 查看疑難排解區段

7.清除資源

完成後,您可以刪除資源群組,以從 Azure 訂用帳戶中刪除所有資源。

步驟 1:在 Azure 入口網站頂端的搜尋列中:

  1. 輸入資源群組名稱。
  2. 選取資源群組。

螢幕擷取畫面:顯示如何在 Azure 入口網站中搜尋並瀏覽至資源群組。

步驟 2:在資源群組頁面中,選取 [刪除資源群組]

顯示 Azure 入口網站中 [刪除資源群組] 按鈕位置的螢幕擷取畫面。

步驟 3:

  1. 輸入資源群組名稱以確認刪除。
  2. 選取 [刪除]
  3. 再次使用 [刪除] 來確認。

Azure 入口網站中刪除資源群組確認對話方塊的螢幕擷取畫面。

2.建立 Azure 資源並部署應用程式範例

在此步驟中,您會建立 Azure 資源,並將範例應用程式部署至 Linux 上的 App Service。 本教學課程中使用的步驟會建立一組預設保護資源,其中包括 App Service 和 Azure Cosmos DB。

開發容器已具備 Azure Developer CLI (AZD)。

  1. 從存放庫根路徑中執行 azd init

    azd init --template javase-app-service-cosmos-redis-infra
    
  2. 出現提示時,請提供下列答案:

    問題 回答
    目前的目錄不是空的。 您是否要在「<您的目錄>」初始化專案? Y
    您要對這些檔案執行什麼動作? 維持現有的檔案不變
    輸入新的環境名稱 輸入唯一名稱。 AZD 範本會使用此名稱作為 Azure 中 Web 應用程式的 DNS 名稱一部分 (<app-name>-<hash>.azurewebsites.net)。 允許英數字元與連字號。
  3. 執行 azd auth login 命令並遵循提示來登入 Azure:

    azd auth login
    
  4. 使用 azd up 命令建立必要的 Azure 資源,並部署應用程式程式碼。 請遵循提示選取 Azure 資源所需的訂用帳戶和位置。

    azd up
    

    azd up 命令需要大約 15 分鐘才能完成 (時間多半用在 Redis 快取上)。 這也會編譯及部署您的應用程式程序代碼,但稍後會修改程序代碼以使用 App Service。 執行時,命令會提供佈建和部署程式的相關資訊,包括 Azure 中部署的連結。 完成時,命令也會顯示部署應用程式的連結。

    此 AZD 範本包含使用下列 Azure 資源產生預設安全架構的檔案 (azure.yamlinfra 目錄):

    • 資源群組:所有已建立資源的容器。
    • App Service 方案:定義 App Service 的計算資源。 系統會在 B1 層中建立 Linux 方案。
    • App Service:代表您的應用程式,並在 App Service 方案中執行。
    • 虛擬網路:與 App Service 應用程式整合,並隔離後端網路流量。
    • 具有 MongoDB API 的 Azure Cosmos DB 帳戶:只能從其私人端點後方存取。 系統會為您在伺服器上建立資料庫。
    • Azure Cache for Redis:只能從虛擬網路中存取。
    • 金鑰保存庫:只能從其私人端點後方存取。 用於管理 App Service 應用程式的秘密。
    • 私人端點:虛擬網路中的金鑰保存庫、資料庫伺服器和 Redis 快取的存取端點。
    • 私人 DNS 區域:啟用虛擬網路中 Cosmos DB 資料庫、Redis 快取和金鑰保存庫的 DNS 解析。
    • Log Analytics 工作區:作為應用程式傳送記錄的目標容器,您也可以在其中查詢記錄。

有問題嗎? 查看疑難排解區段

3.驗證連接字串

您使用的 AZD 範本已為您產生連線變數作為應用程式設定,並將其輸出至終端機以方便使用。 應用程式設定是將連線秘密保留在程式碼存放庫外部的一個方法。

  1. 在 AZD 輸出中,尋找應用程式設定 spring.data.mongodb.uri。 只會顯示設定名稱。 其在 AZD 輸出中看起來像這樣:

     App Service app has the following app settings:
             - spring.data.mongodb.uri
             - spring.data.mongodb.database
             - spring.redis.host
             - spring.redis.port
             - spring.redis.password
             - spring.redis.database
             - spring.redis.ssl
             - spring.cloud.azure.keyvault.secret.credential.managed_identity_enabled
             - spring.cloud.azure.keyvault.secret.endpoint
             - azure.keyvault.uri
             - azure.keyvault.scope
     

    spring.data.mongodb.uri 包含 Azure 中 Cosmos DB 資料庫的連線 URI。 這是標準 Spring Data 變數,您的應用程式已在 src/main/resources/application.properties 檔案中使用。

  2. 在總管中,瀏覽至 src/main/resources/application.properties,並看到 Spring Boot 應用程式已使用 spring.data.mongodb.uri 變數來存取資料。

  3. 為了方便起見,AZD 範本輸出會顯示應用程式的應用程式設定頁面直接連結。 尋找該連結,並在新的瀏覽器索引標籤中開啟該連結。

    如果您查看 spring.data.mongodb.uri 的值,這應該是 @Microsoft.KeyVault(...),這表示它是金鑰保存庫參考,因為已在金鑰保存庫中管理秘密。

有問題嗎? 查看疑難排解區段

4.瀏覽至應用程式

  1. 在 AZD 輸出中,尋找您應用程式的 URL,並在瀏覽器中瀏覽至目標。 AZD 輸出中 URL 看起來像這樣:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
     
  2. 將幾項工作新增至清單。

    在 Azure 中執行的使用 MySQL 的 Tomcat Web 應用程式的螢幕擷取畫面,顯示工作。

    恭喜,您正在 Azure App Service 中執行 Web 應用程式,並安全地連線至 Azure Cosmos DB。

有問題嗎? 查看疑難排解區段

5.資料流診斷記錄

Azure App Service 會擷取主控台記錄,以協助您診斷應用程式的問題。 為了方便起見,AZD 範本已啟用本機檔案系統記錄,並將記錄送至 Log Analytics 工作區

如下列程式碼片段所示,應用程式範例包含可示範這項功能的標準 Log4j 記錄陳述式:

private static Logger logger = LoggerFactory.getLogger(TodoListController.class);

@Autowired
private TodoItemRepository todoItemRepository;

public TodoListController() {
}

/**
 * HTTP GET
 */
@GetMapping(path = "/api/todolist/{index}", produces = {MediaType.APPLICATION_JSON_VALUE})
public TodoItem getTodoItem(@PathVariable("index") String index) {
    logger.info("GET request access '/api/todolist/{}' path.", index);
    return todoItemRepository.findById(index).get();
}

在 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 應用程式中的記錄。

有問題嗎? 查看疑難排解區段

6.清除資源

若要刪除目前部署環境中的所有 Azure 資源,請執行 azd down 並遵循提示。

azd down

疑難排解

Azure Cosmos DB 的入口網站部署檢視會顯示衝突狀態

根據所選取的訂用帳戶和區域,您可能會看到 Azure Cosmos DB 的部署狀態為 Conflict,且作業詳細資料中顯示下列訊息:

Sorry, we are currently experiencing high demand in <region> region, and cannot fulfill your request at this time.

該錯誤很可能是由所選區域的訂用帳戶限制所造成。 請嘗試為部署選擇不同的區域。

已部署範例應用程式不會顯示工作清單應用程式

如果您看到 Hey, Java developers! 頁面,而不是工作清單應用程式,App Service 很可能仍然會從您最近的程式碼部署載入更新的容器。 等待幾分鐘,然後重新整理頁面。

常見問題集

這設定會產生多少費用?

建立資源的定價如下:

  • App Service 方案是在基本層中建立,並可擴大或縮小。 請參閱 App Service 定價
  • Azure Cosmos DB 帳戶是在無伺服器層中建立的,而且與此層級相關的成本很小。 請參閱 Azure Cosmos DB 定價
  • Azure Cache for Redis 是在最低快取大小的基本層級中建立。 與此層級相關的成本不高。 您可以擴大至較高的效能層級以取得高可用性、叢集和其他功能。 請參閱 Azure Cache for Redis 定價
  • 除非您設定額外的功能 (例如對等互連),否則虛擬網路不會產生費用。 請參閱 Azure 虛擬網路定價
  • 私人 DNS 區域會產生少量費用。 請參閱 Azure DNS 定價

如何使用虛擬網路後方的 Cosmos DB 資料庫執行資料庫移轉?

App Service 中的 JAVA SE 容器已具有 Cosmos DB 的網路連線能力,但不包含任何移轉工具或其他 MongoDB 工具。 您有幾個選項:

  • 在應用程式啟動時自動執行資料庫移轉,例如使用 Hibernate 和或 Flyway。
  • 在應用程式的 SSH 工作階段中,安裝像是 Flyway CLI 的移轉工具,然後執行移轉指令碼。 請記住,已安裝的工具在應用程式重新啟動之後不會保留,除非它位於 /home 目錄中。
  • 整合 Azure Cloud Shell 與虛擬網路,並從該處執行資料庫移轉。

本機應用程式開發如何與 GitHub Actions 搭配運作?

使用 App Service 自動產生的工作流程檔案為例,每個 git push 都會開始執行新的組建和部署。 從 GitHub 存放庫的本機複本,並將所需的更新推送至 GitHub。 例如:

git add .
git commit -m "<some-message>"
git push origin main

我沒有權限可建立使用者指派的身分識別

請參閱透過部署中心設定 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 上執行 Java 應用程式。

了解如何使用自訂網域和憑證保障您的應用程式。