練習:將 Web 應用程式部署到 Azure App Service

已完成

現在您已在本機執行 Hello World JAVA 應用程式,您可以將它部署至 Azure App Service。

有多種方式可將您的應用程式部署至 Azure App Service。 本課程模組描述下列兩種方法:

  • 設定及使用適用於 Azure App Service 的 Maven 外掛程式來部署 Web 應用程式。
  • 使用 Azure CLI 手動建立必要的資源,然後部署。

使用適用於 Azure App Service 的 Maven 外掛程式是一種更容易開始使用的方式。 根據您的喜好設定,選取本單元開頭的相關按鈕。

使用適用於 Azure App Service 的 Maven 外掛程式。

Microsoft 提供適用於 Azure App Service 的 Maven 外掛程式,讓 Java 開發人員輕鬆將應用程式部署到 Azure。 透過使用此外掛程式,您可以輕鬆設定應用程式,並將其部署到 Azure。

設定適用於 Azure App Service 的 Maven 外掛程式

若要設定適用於 Azure App Service 的 Maven 外掛程式,請執行下列命令:

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.10.0:config

在執行命令後,提示字元會要求輸入一些選項,請依序輸入並選取合適的項目並進行設定。 輸入下列選項:

項目 輸入值
訂用帳戶 選擇您的 Azure 訂用帳戶
定義 OS 的值 Linux
定義定價層的值 B1
定義 Java 版本的值 JAVA 17
Confirm (Y/N) (確認 (Y/N))
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.example:hello-java-azure >--------------------
[INFO] Building hello-java-azure 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- azure-webapp:2.10.0:config (default-cli) @ hello-java-azure ---
Downloading from ossrh: https://oss.sonatype.org/content/repositories/snapshots/net/minidev/json-smart/maven-metadata.xml
Downloading from central: https://repo.maven.apache.org/maven2/net/minidev/json-smart/maven-metadata.xml
Downloading from shibboleth-repo: https://build.shibboleth.net/nexus/content/repositories/releases/net/minidev/json-smart/maven-metadata.xml
Downloaded from central: https://repo.maven.apache.org/maven2/net/minidev/json-smart/maven-metadata.xml (1.3 kB at 6.2 kB/s)
Create new run configuration (Y/N) [Y]: Y
Define value for OS [Linux]:
  1: Windows
* 2: Linux
  3: Docker
Enter your choice: 2
Define value for javaVersion [Java 17]:
* 1: Java 17
Enter your choice: 1
Define value for pricingTier [P1v2]:
   1: B1
   2: B2
   3: B3
   4: D1
   5: EP1
   6: EP2
   7: EP3
   8: F1
*  9: P1v2
  10: P1v3
  11: P2v2
  12: P2v3
  13: P3v2
  14: P3v3
  15: S1
  16: S2
  17: S3
  18: Y1
Enter your choice: 1
Please confirm webapp properties
AppName : hello-java-azure-1731367782304
ResourceGroup : hello-java-azure-1731367782304-rg
Region : centralus
PricingTier : B1
OS : Linux
Java Version: Java 17
Web server stack: Java SE
Deploy to slot : false
Confirm (Y/N) [Y]: Y
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:02 min
[INFO] Finished at: 2024-11-11T15:30:21-08:00
[INFO] ------------------------------------------------------------------------

您應該會在 <plugins> 檔案的 區段中看到新的區段。

如想要變更資源群組名稱、執行個體名稱和部署位置,請變更 <resourceGroup><appName><region>

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-webapp-maven-plugin</artifactId>
    <version>2.10.0</version>
    <configuration>
        <schemaVersion>v2</schemaVersion>
        <resourceGroup>hello-java-azure-1731367782304-rg</resourceGroup>
        <appName>hello-java-azure-1731367782304</appName>
        <pricingTier>B1</pricingTier>
        <region>centralus</region>
        <runtime>
            <os>Linux</os>
            <javaVersion>Java 17</javaVersion>
            <webContainer>Java SE</webContainer>
        </runtime>
        <deployment>
            <resources>
                <resource>
                    <directory>${project.basedir}/target</directory>
                    <includes>
                        <include>*.jar</include>
                    </includes>
                </resource>
            </resources>
        </deployment>
    </configuration>
</plugin>

編譯及部署到 Azure App Service

現在部署至 Azure App Service 的設定已完成,請使用下列命令再次編譯原始程式碼:

mvn clean package

編譯之後,請使用下列適用於 Azure Web Apps 命令的 Maven 外掛程式來部署您的應用程式:

mvn azure-webapp:deploy

加以部署後,您應該會看到下列輸出:

[INFO] Successfully deployed the artifact to https://hello-java-azure-1731367782304.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:47 min
[INFO] Finished at: 2024-11-11T15:39:47-08:00
[INFO] ------------------------------------------------------------------------

已部署應用程式的公用 URL 會顯示在輸出訊息中,如下列範例所示:Successfully deployed the artifact to https://hello-java-azure-1731367782304.azurewebsites.net

從命令列確認記錄資料流

若要存取記錄資料流,請執行下列 CLI 命令:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

您應該會看到類似下列範例的結果:

2024-11-07T18:14:37  Welcome, you are now connected to log-streaming service.
Starting Log Tail -n 10 of existing logs ----
/appsvctmp/volatile/logs/runtime/container.log
2024-11-07T18:06:05.3874260Z  java.base/java.lang.Thread.run(Thread.java:1583)
2024-11-07T18:06:05.5635356Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol stop
2024-11-07T18:06:05.5636042Z INFO: Stopping ProtocolHandler ["http-nio-127.0.0.1-80"]
2024-11-07T18:06:05.6020767Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol stop
2024-11-07T18:06:05.6021438Z INFO: Stopping ProtocolHandler ["http-nio-169.254.129.3-80"]
2024-11-07T18:06:05.6423756Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol destroy
2024-11-07T18:06:05.6424403Z INFO: Destroying ProtocolHandler ["http-nio-127.0.0.1-80"]
2024-11-07T18:06:05.6893602Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol destroy
2024-11-07T18:06:05.6894311Z INFO: Destroying ProtocolHandler ["http-nio-169.254.129.3-80"]
2024-11-07T18:06:05.7849816Z Done processing signal SIGTERM. Exiting now!
Ending Log Tail of existing logs ---
Starting Live Log Stream ---

使用 Azure CLI

使用下列步驟來部署使用 Azure CLI:

  1. 如果尚未安裝 Azure CLI,請加以安裝。 如需詳細資訊,請參閱如何安裝 Azure CLI

  2. 使用下列命令登入 Azure:

    az login
    
  3. 使用下列命令設定環境變數。 請務必將佔位符替換為表格中所描述的值。 本課程模組會用到這些值。

    export RESOURCE_GROUP="appServiceWorkshop"
    export LOCATION="<region>"
    export APP_SERVICE_PLAN="myAppServicePlan"
    export WEBAPP_NAME="<web-app-name>"      # Ensure this name is globally unique
    export JAR_FILE_PATH="<jar-file-path>"  # Replace with the actual path to your JAR file
    

    下表描述占位符值:

    變數 描述
    <web-app-name> 您 Web 應用程式的名稱。 此名稱在 Azure 中必須是唯一。
    <region> 您想要使用的 Azure 區域。 根據預設,您可使用 eastus,但建議您使用居住位置附近的區域。 您可輸入 az account list-locations 來查看可用區域的完整清單。
    <jar-file-path> 此路徑是您 .jar 檔案儲存在專案目錄中的位置,例如,target/<jar-file>。 請確定您將此變數設定為專案目錄的完整路徑。
  4. 請使用下列命令來建立資源群組:

    az group create \
        --name $RESOURCE_GROUP \
        --location $LOCATION
    
  5. 使用下列命令建立 App Service 方案:

    az appservice plan create \
        --name $APP_SERVICE_PLAN \
        --resource-group $RESOURCE_GROUP \
        --is-linux \
        --sku B1
    
  6. 使用下列命令建立 Web 應用程式:

    az webapp create \
        --resource-group $RESOURCE_GROUP \
        --plan $APP_SERVICE_PLAN \
        --name $WEBAPP_NAME \
        --runtime "JAVA|17-java17"
    
  7. 使用下列命令部署應用程式:

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $WEBAPP_NAME \
        --src-path $JAR_FILE_PATH\
    

    部署流程一般需要幾分鐘的時間。

  8. 瀏覽已部署的 JAVA Web 應用程式。 使用下列命令來產生部署 URL:

    echo "Your website is at https://$(az webapp show \
        --name $WEBAPP_NAME \
        --resource-group $RESOURCE_GROUP \
        --query defaultHostName \
        --output tsv)"
    

    當您執行此命令時,它會輸出類似下列內容:Your website is at https://<your-app-name>.azurewebsites.net

  9. 選擇連結。 您應該會在畫面上看到 “Hello,JAVA on Azure!”。

恭喜! Web 應用程式已成功部署到 Azure App Service。

練習摘要

在此單元中,您已了解如何建立及封裝 Java Web 應用程式、如何使用適用於 Azure Web Apps 的 Maven Plugin,以及如何將應用程式部署到 Azure App Service。 這些步驟不僅適用於 JSF 應用程式,也適用於大部分的 Java Web 應用程式。