教學課程:在Linux和 MySQL 上建置具有 Azure App 服務 的 JBoss Web 應用程式

本教學示範如何在 Azure App Service 中建立、設定並部署一個安全的 JBoss 應用程式,並透過 Azure Database for MySQL 連接到 MySQL 資料庫。 Azure App Service 是高度可調整、自我修補的 Web 裝載服務,可輕鬆在 Windows 或 Linux 上部署應用程式。 完成這個教學後,你會有一個在 Linux 上運行的 JBoss 應用程式。

附註

JBoss 企業應用平台(JBoss EAP)在 App Service 上現已支援「自帶授權」(BYOL)計費。 此方法允許擁有現有 Red Hat 訂閱的客戶,直接將授權套用至 Azure App Service 上的 JBoss EAP 部署。 深入瞭解

JBoss 應用程式將資料儲存在 MySQL 中的螢幕快照。

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

  • 為 Azure App 服務 和 適用於 MySQL 的 Azure 資料庫 彈性伺服器建立安全預設架構。
  • 使用無密碼 連接字串 保護資料庫連線。
  • 使用 JBoss CLI 確認 App Service 中的 JBoss 數據源。
  • 從 GitHub 存放庫將 JBoss 範例應用程式部署至 App Service。
  • 存取應用程式程式代碼中的App Service 應用程式設定。
  • 進行更新並重新部署應用程式程式碼。
  • 將診斷記錄從 App Service 串流出。
  • 在 Azure 入口網站中管理應用程式。
  • 使用 Azure Developer CLI 佈建相同的架構並進行部署。
  • 使用 GitHub Codespaces 和 GitHub Copilot 最佳化您的開發工作流程。

必要條件

跳到結尾

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

mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up

1.執行範例

首先,建立一個以數據為基礎的範例應用程式作為起點。 為了方便你, 範例庫 包含 開發容器 設定。 開發容器包含開發應用程式所需的一切,包括資料庫、快取,以及範例應用程式所需的所有環境變數。 開發容器可以在 GitHub codespace 中執行,這表示您可以在任何電腦上使用網頁瀏覽器執行範例。

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

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

步驟 2:在 GitHub 分支中:

  1. 選取 main>starter-no-infra 作為起始分支。 此分支只包含範例專案,沒有與 Azure 相關的檔案或設定。
  2. 選擇 代碼>Codespaces。 接著選擇 在 starter-no-infra 上創建 codespace。 設定 Codespace 需要幾分鐘的時間。

步驟 3:在 codespace 終端機中:

  1. 執行 mvn clean wildfly:run
  2. 當您看到通知 Your application running on port 8080 is available.時,請等候幾秒鐘的時間讓WildFly伺服器完成載入應用程式。 然後,選取 [ 在瀏覽器中開啟]。 您應該會在新的瀏覽器索引標籤中看到範例應用程式。若要停止 WildFly 伺服器, 請輸入 Ctrl+C

秘訣

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

  • @workspace 此專案有何用途?
  • @workspace .devcontainer 資料夾的功能為何?

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

2.建立 App Service 和 MySQL

首先,建立 Azure 資源。 本教學課程中使用的步驟會建立一組預設保護資源,其中包含 App Service 和適用於 MySQL 的 Azure 資料庫。 針對創建過程,您會指定:

  • Web 應用程式的 [名稱]。 它用來做為應用程式的 DNS 名稱的一部分。
  • 要實際執行應用程式的區域。 這個區域是你應用程式 DNS 名稱的一部分。
  • 應用程式的執行階段堆疊。 您可以在此處選取要用於應用程式的 Java 版本。
  • 應用程式的主控方案。 這是定價層級,其中包含您的應用程式所需的一組功能和擴展能力。
  • 應用程式的 [資源群組]。 資源群組可以讓你將應用程式所需的所有 Azure 資源分組在一個邏輯容器中。

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

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

  1. 在頂端搜尋列中,輸入 App Service
  2. 服務 項目中,選擇 應用程式服務
  3. 選取 [建立>Web 應用程式]。 您也可以直接瀏覽至建立精靈

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

  1. 名稱msdocs-jboss-mysql。 這個程序會為你建立一個名為 msdocs-jboss-mysql_group 的資源群組。
  2. 執行階段堆疊Java 17
  3. Java Web 伺服器堆疊Red Hat JBoss EAP 8
  4. 作系統Linux
  5. [區域]:您附近的任何 Azure 區域。
  6. Linux 方案新建並使用 msdocs-jboss-mysql 名稱
  7. 定價方案進階 V3 P0V3。 準備好時,您可以 升級 至不同的定價層。

步驟 3:

  1. 選取 資料庫 索引標籤。
  2. 選取 [建立資料庫]。
  3. [引擎] 中,選取 [MySQL - 彈性伺服器]。
  4. 選取 部署

步驟 4:

  1. 選取 [部署] 索引標籤。
  2. 啟用 持續部署
  3. [組織] 中,選取您的 GitHub 別名。
  4. 在 [ 存放庫] 中,選取 msdocs-jboss-mysql-sample-app
  5. 在 [分支] 中,選取 [starter-no-infra]
  6. 請確定 已停用基本身份驗證
  7. 選取 [檢閱 + 建立]。
  8. 驗證完成時,選取 [建立]

步驟 5: 部署需要幾分鐘的時間才能完成。 完成部署後,選取 [移至資源]。 它會直接帶你到 App Service 應用程式,但會建立以下資源:

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

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

3.建立無密碼連線

在此步驟中,您會產生受控識別型服務連線,稍後您可以使用該聯機在 JBoss 伺服器中建立數據源。 藉由使用受控識別來連線到 MySQL 資料庫,您的程式代碼就無法意外洩漏秘密。

步驟 1:建立受控識別。

  1. 在頂端搜尋列中,輸入 受控識別
  2. 服務 項目中,選擇 受管理身份
  3. 選取 [建立]
  4. [資源群組] 中,選取 msdocs-jboss-mysql_group
  5. [區域] 中,選取您用於 Web 應用程式的相同區域。
  6. 在 [ 名稱] 中,輸入 msdocs-jboss-mysql-server-identity
  7. 選取 [檢閱 + 建立]。
  8. 選取 [建立]

步驟 2:在 MySQL 伺服器中啟用Microsoft Entra 驗證。

  1. 在頂端搜尋列中,輸入 msdocs-jboss-mysql-server
  2. 選取名為 msdocs-jboss-mysql-server 的 適用於 MySQL 的 Azure 資料庫 彈性伺服器資源。
  3. 從左側功能表中,選取 [安全性>驗證]。
  4. [指派存取權] 中,選取 [僅限 Microsoft Entra 驗證]
  5. 「選擇身份」中,選擇「選擇」。
  6. 選取 msdocs-jboss-mysql-server-identity,然後選取 [ 新增]。 將身分識別指派給 MySQL 伺服器需要一些時間。
  7. Microsoft Entra 管理員名稱中,選擇 選取
  8. 找到你的 Azure 帳號並選擇它,然後選擇選擇。
  9. 選取 [儲存],並等候作業完成。

步驟 3:新增受控識別型服務連接器。

  1. 在頂端搜尋列中,輸入 msdocs-jboss-mysql
  2. 選取名為 msdocs-jboss-mysql 的 App Service 資源。
  3. 在 App Service 頁面的左側功能表中,選取 [設定 > 服務連接器]
  4. 選取 [建立]
  5. 基本 索引標籤中:
  6. 服務類型 設定為 DB for MySQL 彈性伺服器
  7. 將 MySQL 彈性伺服器設定msdocs-jboss-mysql-server
  8. 將 MySQL 資料庫設定msdocs-jboss-mysql-database
  9. 將 [用戶端類型] 設定[Java]。
  10. 選取 [驗證] 索引標籤。
  11. 選取 系統指派的受控身分
  12. 選取 檢閱 + 建立 索引標籤。
  13. 驗證完成時,選取 [在 Cloud Shell 上建立],並等候作業在 Cloud Shell 中完成。
  14. 當您看到輸出 JSON 時,您可以關閉 Cloud Shell。 此外,請關閉 [ 建立連線 ] 對話方塊。
  15. 選取 [ 重新整理 ] 以顯示新的服務連接器。

步驟 4:將驗證外掛程式新增至 連接字串。

  1. 從左側功能表中,選取 [環境變數]。
  2. 選取 [AZURE_MYSQL_CONNECTIONSTRING]。 [ 值] 欄位應該包含 user ,但沒有 password。 使用者是受管理身份。
  3. App Service 應用程式中的 JBoss 伺服器具有驗證外掛程式來驗證受控識別,但您仍然需要將它新增至 連接字串。 捲動至值的結尾,並附加 &defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
  4. 選取 [套用]
  5. 選擇套用,然後確認

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

4.確認 JNDI 資料來源

如果您新增的應用程式設定包含 Oracle、SQL Server、PostgreSQL 或 MySQL 的有效 JDBC 連接字串,App Service 會在 JBoss 伺服器中為其新增 Java 命名和目錄介面 (JNDI) 數據源。 在此步驟中,您會使用應用程式容器的 SSH 連線來驗證 JNDI 資料來源。 在過程中,您會了解如何存取 SSH shell 並運行 JBoss CLI。

步驟 1:返回 [App Service] 頁面:

  1. 在左側選單中,選擇 開發工具>SSH
  2. 選取 [執行]

步驟 2:在 SSH 終端機中:

  1. 執行 $JBOSS_HOME/bin/jboss-cli.sh --connect
  2. 在 JBoss CLI 連線中,執行 ls subsystem=datasources/data-source。 您應該會看到自動產生的資料來源, 稱為 AZURE_MYSQL_CONNECTIONSTRING_DS
  3. 使用 /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)取得數據源的 JNDI 名稱。 您現在有 JNDI 名稱 java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS,稍後可在應用程式程式代碼中使用。

附註

只有 /home 中檔案的變更才能在應用程式重新開機之後保存。 舉例來說,如果你在 JBoss CLI 裡編輯 /opt/eap/standalone/configuration/standalone.xml 或更改伺服器設定,這些變更不會持續存在,超過重新啟動應用程式。 要持續執行變更,可以使用啟動腳本,例如在 Azure App Service 中「配置 Tomcat、JBoss 或 Java SE 應用程式的資料來源」中示範。

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

5.部署範例程式碼

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

如同 JBoss 慣例,如果您想要部署至 JBoss 的根內容,請將您建置的成品 命名為 ROOT.war

步驟 1: 回到範例分支的 GitHub 程式代碼空間中,執行 git pull origin starter-no-infra。 此指令會將新提交的工作流程檔案拉入你的程式碼空間。 您可以根據 .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml 的需求加以修改。

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

  1. 要開始新的聊天會話,請選擇 聊天 視窗,然後選擇 +
  2. 問:「@workspace 應用程式如何連線到資料庫?」Copilot 可能會提供有關 java:jboss/MySQLDS 資料來源以及如何設定的一些說明。
  3. 比如說:「Azure 裡的 JBoss 資料來源使用 JNDI 名稱 java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS。」Copilot 可能會給你類似以下 選項 2:不使用 GitHub Copilot 步驟的程式碼建議,甚至告訴你在類別中做更改。 GitHub Copilot 不會每次都給你相同的回應。 您可能需要詢問更多問題,以微調其回應。 想要獲得技巧,請參考「GitHub Copilot 在我的程式碼空間中能做什麼?

步驟 2 (選項 2:不含 GitHub Copilot):

  1. 在檔案瀏覽器中開啟 src/main/resources/META-INF/persistence.xml 。 應用程式啟動時,它會載入此檔案中的資料庫設定。
  2. <jta-data-source> 的值從 java:jboss/MySQLDS 變更為 java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS,這是您稍早在 SSH shell 中使用 JBoss CLI 找到的資料來源。

步驟 3:

  1. 選取Source Control擴充功能。
  2. 在文字方塊中,輸入提交訊息,例如 Configure Azure JNDI name
  3. 選取 [認可],然後使用 [是] 來確認。
  4. 選取 [同步變更 1],然後使用 [確定] 來確認。

步驟 4: 回到 Azure 入口網站中的 App Service 管理頁面:

  1. 從左側功能表中,選取 [部署>部署中心]。
  2. 選取 [記錄]。 新的部署執行已從您認可的變更開始。
  3. 在部署執行的記錄項目中,選取最新時間戳記的 [建置/部署記錄] 項目。

步驟 5: 系統會帶您前往 GitHub 存放庫,並查看 GitHub 動作正在執行。 工作流程檔案會定義兩個不同的階段:建置和部署。 請稍候,直到 GitHub 顯示狀態為完成。 需要約 5 分鐘的時間。

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

6.開啟應用程式

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

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

第 2 步:將幾項工作新增至清單。 祝賀! 你正在 Azure App Service 中執行一個網頁應用程式,並且安全連接 Azure Database for MySQL。

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

7.資料流診斷記錄

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

private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

@PersistenceContext
private EntityManager entityManager;

public List<Task> getAllTasks() {
    logger.log(Level.INFO, "Finding all tasks. ");

    return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}

在 App Service 頁面中,從左側功能表中,選取 [ 監視>記錄數據流]。 您會看到應用程式的記錄,包括平台記錄和來自容器內的記錄。

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

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

8.清除資源

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

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

  1. 輸入資源組名 msdocs-jboss-mysql_group
  2. 選取資源群組。

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

步驟 3:

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

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

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

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

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

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

    問題 回答
    繼續在「<your-directory>」中初始化應用程式嗎? 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 應用程式整合,並隔離後端網路流量。
    • 適用於 MySQL 的 Azure 資料庫 彈性伺服器:只能從虛擬網路存取。 系統會為您在伺服器上建立資料庫。
    • Azure Cache for Redis:只能從虛擬網路中存取。
    • 私人端點:虛擬網路中的金鑰保存庫和 Redis 快取的存取端點。
    • 私人 DNS 區域:啟用虛擬網路中的金鑰保存庫、資料庫伺服器和 Redis 快取的 DNS 解析。
    • Log Analytics 工作區:作為應用程式傳送記錄的目標容器,您也可以在其中查詢記錄。
    • 金鑰保存庫:當您使用 AZD 重新部署時,用來保留資料庫密碼。

    指令第一次完成建立資源並部署應用程式碼,但已部署的範例應用程式還沒運作。 你必須做些小改動,才能讓它連接到 Azure 的資料庫。

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

3.驗證連接字串

你使用的 AZD 範本已經在 應用程式設定 中產生了連接變數,並輸出到終端機。 應用程式設定是將連線秘密保留在程式碼存放庫外部的一個方法。

  1. 在 AZD 輸出中,尋找應用程式設定 AZURE_MYSQL_CONNECTIONSTRING。 只會顯示設定名稱。 在 AZD 輸出中,它們看起來是這樣的:

     App Service app has the following app settings:
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
     

    AZURE_MYSQL_CONNECTIONSTRING 包含 Azure 中 MySQL 資料庫的連接字串。 您稍後必須在程式碼中使用它。

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

    如果您新增的應用程式設定包含有效的 Oracle、SQL Server、PostgreSQL 或 MySQL 連接字串,App Service 會將它新增為 JBoss 伺服器context.xml檔案中的 Java 命名和目錄介面 (JNDI) 數據源。

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

4.確認 JNDI 資料來源

在此步驟中,您會使用應用程式容器的 SSH 連線來驗證 JBoss 伺服器中的 JNDI 數據源。 在此過程中,您會瞭解如何存取 JBoss 容器的 SSH 命令列界面。

  1. 在 AZD 輸出中,尋找 SSH 連線的 URL,並在瀏覽器中開啟。 輸出中看起來像這樣:

     Open SSH session to App Service container at: <URL>
     
  2. 在 SSH 終端機中,執行 $JBOSS_HOME/bin/jboss-cli.sh --connect

  3. 在 JBoss CLI 連線中,執行 ls subsystem=datasources/data-source。 您應該會看到自動產生的資料來源, 稱為 AZURE_MYSQL_CONNECTIONSTRING_DS

  4. 使用 /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)取得數據源的 JNDI 名稱。 您現在有 JNDI 名稱 java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS,稍後可在應用程式程式代碼中使用。

    螢幕擷取畫面:顯示要在 SSH 殼層及其輸出中執行的命令。

附註

只有 /home 中檔案的變更才能在應用程式重新開機之後保存。 舉例來說,如果你在 JBoss CLI 裡編輯 /opt/eap/standalone/configuration/standalone.xml 或更改伺服器設定,這些變更不會持續存在,超過重新啟動應用程式。 要持續執行變更,可以使用啟動腳本,例如在 Azure App Service 中「配置 Tomcat、JBoss 或 Java SE 應用程式的資料來源」中示範。

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

5.修改範例程式碼並重新部署

  1. 要開始新的聊天會話,請在 GitHub 程式碼空間中選擇 聊天 視窗,然後選擇 +

  2. 問:「@workspace 應用程式如何連線到資料庫?」Copilot 可能會提供有關 java:jboss/MySQLDS 資料來源以及如何設定的一些說明。

  3. 問:「@workspace我想用 JBoss 裡現有的 JNDI 資料來源替換 persistence.xml 中定義的資料來源?」Copilot 可能會給你類似以下選項二的程式碼建議 :不使用 GitHub Copilot 步驟,甚至告訴你要在 persistence.xml 檔案中做更改。

  4. 在檔案管理器中開啟src/main/resources/META-INF/persistence.xml並進行建議的 JNDI 調整。

    GitHub Copilot 不會每次都給你相同的回應。 你可能需要問其他問題來微調它的回應。 想要獲得技巧,請參考「GitHub Copilot 在我的程式碼空間中能做什麼?

  5. 在 codespace 終端機中,執行 azd deploy

    azd deploy
    

秘訣

您也可以只使用 azd up,這會執行所有 azd packageazd provisionazd deploy

想知道 .war 檔案是怎麼打包的,你可以單獨執行 azd package --debug

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

6.開啟應用程式

  1. 在 AZD 輸出中,找到您應用程式的 URL,然後在瀏覽器中打開該 URL。 AZD 輸出中 URL 看起來像這樣:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. 將幾項工作新增至清單。

    Azure 中執行 MySQL 的 JBoss Web 應用程式的螢幕快照,其中顯示工作。

    祝賀! 你正在 Azure App Service 中執行一個網頁應用程式,並且安全連接 Azure Database for MySQL。

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

7.資料流診斷記錄

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

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

private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

@PersistenceContext
private EntityManager entityManager;

public List<Task> getAllTasks() {
    logger.log(Level.INFO, "Finding all tasks. ");

    return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}

在 AZD 輸出的內容中,尋找用來串流 App Service 記錄的連結,並使用瀏覽器進入該連結。 連結在 AZD 輸出中看起來像這樣:

Stream App Service logs at: <URL>

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

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

8.清除資源

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

azd down

疑難排解

我在建立精靈中看到錯誤訊息:「無權使用攜帶您自己的授權功能」

如果您看到錯誤:The subscription 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e' is not entitled to use the Bring Your Own License feature when creating the application,這表示您已在 Java 網頁伺服器堆棧選取 Red Hat JBoss EAP 7/8 BYO 授權,但尚未在 Red Hat Cloud Access 中設定您的 Azure 帳戶,或在 Red Hat Cloud Access 中沒有作用中的 JBoss EAP 授權。

適用於 MySQL 的 Azure 資料庫彈性伺服器的入口網站部署檢視顯示衝突狀態。

根據所選取的訂用帳戶和區域,您可能會看到適用於 MySQL 的 Azure 資料庫彈性伺服器的部署狀態為 Conflict,且作業詳細資料中顯示下列訊息:

InternalServerError: An unexpected error occurred while processing the request.

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

[建立連線] 對話框會顯示 [在 Cloud Shell 上建立] 按鈕,但未啟用。

您可能也會在對話框中看到錯誤訊息: The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.

服務連接器自動化需要 MySQL 伺服器的網路存取權。 查看 MySQL 伺服器資源的網路設定,並確定 至少已選取 [允許透過因特網存取此資源的公用 IP 位址 ]。 服務連接器可以從該處取得。

如果您沒有看到此複選框,您可能已改為使用 [Web 應用程式 + 資料庫精靈 ] 建立部署,而部署會鎖定 MySQL 伺服器的所有公用網路存取權。 無法修改組態。 由於應用程式的 Linux 容器可以透過虛擬網路整合來存取 MySQL,因此您可以在應用程式的 SSH 會話中安裝 Azure CLI,並在該處執行提供的 Cloud Shell 命令。

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

如果您看到 JBoss 启动画面,而不是任務列表應用程式,很可能是因為 App Service 仍在從您最近的程式碼部署中載入更新的容器。 等待幾分鐘,然後重新整理頁面。

我的應用程式無法啟動,我看到「拒絕使用者存取...(使用密碼:NO)' 在記錄中。

這個錯誤很可能是因為你沒有在連線字串中加入無密碼認證外掛。 請參閱 Java 範例程式碼,內容為 「整合 Azure Database for MySQL with Service Connector」。 遵循 3 中的指示,變更 MySQL 連接字串。建立無密碼連線

我在診斷記錄中看到「資料表『工作』已存在」錯誤。

您可以忽略這個休眠錯誤,因為它表示應用程式程式代碼已連線到 MySQL 資料庫。 應用程式啟動時會設定建立必要的資料表,例如 src/main/resources/META-INF/persistence.xml。 當應用程式第一次啟動時,它應該會成功建立數據表,但在後續重新啟動時,您會看到此錯誤,因為數據表已經存在。

常見問題集

這設定會產生多少費用?

建立資源的定價如下:

  • App Service 方案是在 P0v3 層中建立,而且可以進行向上或向下調整。 請參閱 App Service 定價
  • MySQL 彈性伺服器創建於 D2ds 層,並且可以擴充或縮減。 請參閱適用於 MySQL 的 Azure 資料庫定價
  • Azure Cache for Redis 是在最低快取大小的基本層級中建立。 與此層級相關的成本不高。 您可以擴大至較高的效能層級以取得高可用性、叢集和其他功能。 請參閱 Azure Cache for Redis 定價
  • 除非您設定額外的功能 (例如對等互連),否則虛擬網路不會產生費用。 請參閱 Azure 虛擬網路定價
  • 私人 DNS 區域會產生少量費用。 請參閱 Azure DNS 定價

如何使用其他工具連線到虛擬網路後方的 MySQL 資料庫?

在本教學課程中,App Service 應用程式已具備 MySQL 伺服器的網路連線能力,並且可以使用其系統指派的受控識別來向 Microsoft Entra 進行驗證。 你可以直接從應用程式容器內連接 MySQL,方法是在 SSH 會話中執行以下指令。 從 AZURE_MYSQL_CONNECTIONSTRING 應用程式設定中取得你的 <server><user><database> 數值。

apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`

一些考慮:

  • 您在 SSH 工作階段中安裝的工具不會在應用程式重新啟動時儲存。
  • 如果你依照 Azure 入口網站的步驟操作,並用你的 Microsoft Entra 使用者作為管理員設定 MySql,你就可以用 Microsoft Entra 使用者連接 MySQL。
  • 要從像 MySQL Workbench 這類桌面工具連線,你的機器必須在虛擬網路中,例如部署在同一虛擬網路中的 Azure 虛擬機。 您也必須另外設定驗證,可以選擇使用受控身份識別或 Microsoft Entra 帳戶。
  • 要從本地網路中的機器連線到與 Azure 虛擬網路有站對站 VPN連線的機器時,你無法針對管理的身分識別設定驗證。 你可以透過使用 Microsoft Entra 使用者來設定認證。
  • 您也可以 整合 Azure Cloud Shell ,並使用 Azure CLI 或 MySQL CLI 進行連線。 若要驗證,您可以設定 Microsoft Entra 使用者。

如何使用 Microsoft Entra 驗證取得 MySQL 連線的有效存取令牌?

對於Microsoft Entra 使用者、系統指派的受控識別,或獲授權存取 MySQL 資料庫的使用者指派受控識別,Azure CLI 可協助您產生存取令牌。 如果你使用受管理身份,該身份必須在執行 Azure CLI 的 App Service 應用程式或虛擬機上設定。

# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>

# Get an access token
az account get-access-token --resource-type oss-rdbms

你也可以使用 az mysql flexible-server connect Azure CLI 指令來連接 MySQL。 出現提示時,請使用存取令牌作為密碼。

az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive

如需詳細資訊,請參閱

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

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

git add .
git commit -m "<some-message>"
git push origin starter-no-infra

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

請參閱透過部署中心設定 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) 甚至可以建議在何處進行變更,但系統不允許為您進行變更。 您可以自行新增建議的變更並加以測試。

您可以述說以下一些其他內容來微調取得的答案:

  • 請變更此程式碼以使用資料來源 jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS。
  • 程式碼中的某些匯入使用 javax,但我有 Jakarta 應用程式。
  • 我希望此程式碼只在已設定環境變數 AZURE_MYSQL_CONNECTIONSTRING 時才執行。
  • 我希望此程序碼只能在 Azure App Service 中執行,而不是在本機執行。

在開發人員指南中深入了解如何在 App Service 上執行 Java 應用程式。

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