Maven を使用して Quarkus Web アプリを Azure App Service にデプロイする

このクイックスタートでは、Azure App Service Web Apps 用の Maven プラグインを使用して、Quarkus アプリケーションを Azure App Service on Linux にデプロイします。 アプリの依存関係、ランタイム、構成を 1 つのデプロイ可能な成果物に統合する必要がある場合は、Tomcat および WAR ファイルでの Java SE デプロイを選択します。

Azure サブスクリプションがない場合は、開始する前に無料アカウントを作成してください。

前提条件

Azure CLI へのサインイン

Maven プラグインで最もシンプルかつ容易に Quarkus アプリケーションをデプロイするには、Azure CLI を使用します。

Azure CLI を使って、Azure アカウントにサインインします。

az login

指示に従って、サインインを完了します。

MicroProfile Starter からサンプル アプリを作成する

このセクションでは、Quarkus アプリケーションを作成し、ローカルでテストします。

Java SE 8 基本プロジェクトを作成する

  1. Web ブラウザーを開き、MicroProfile Starter サイトに移動します。

    Quarkus ランタイムが選択された MicroProfile Starter を示すスクリーンショット。

  2. 示されたフィールドに次の値を指定します。

    フィールド
    groupId com.microsoft.azure.samples.quarkus
    artifactId quarkus-hello-azure
    MicroProfile Version MP 3.2
    Java SE Version Java 8
    MicroProfile Runtime Quarkus
    Examples for Specifications Metrics、OpenAPI
  3. [DOWNLOAD] を選択してプロジェクトをダウンロードします。

  4. アーカイブ ファイルを解凍します。次に例を示します。

    unzip Quarkus-hello-azure.zip
    

Java SE 11 基本プロジェクトを作成する

Java 11 基本プロジェクトを作成するには、次のコマンドを使用します。

mvn io.quarkus:quarkus-maven-plugin:2.6.1.Final:create \
  -DprojectGroupId=com.microsoft.azure.samples.quarkus \
  -DprojectArtifactId=quarkus-hello-azure  \
  -DclassName="com.microsoft.azure.samples.quarkus.App" \
  -Dpath="/hello"

アプリケーションをローカル環境で実行する

  1. 完成したプロジェクトにディレクトリを変更します。次に例を示します。

    cd quarkus-hello-azure/
    
  2. Maven を使用してプロジェクトをビルドおよび実行します。次に例を示します。

    mvn quarkus:dev
    
  3. Web アプリのテストは、Web ブラウザーを使用してアプリをローカルで参照して行います。 たとえば、curl を使うことができる場合は次のようなコマンドを実行できます。

    Java SE 8 プロジェクトの場合:

    curl http://localhost:8080/data/hello
    

    Java SE 11 プロジェクトの場合:

    curl localhost:8080/hello
    
  4. 次のメッセージが表示されます。Hello World または hello

Azure App Service 用の Maven プラグインを構成する

このセクションでは、Maven でアプリを Azure App Service on Linux にデプロイできるように、Quarkus プロジェクトの pom.xml ファイルを構成します。

  1. コード エディターで pom.xml ファイルを開きます。

  2. pom.xml ファイルの <build> セクションで、<plugins> タグ内の maven-surefire-plugin の後に、次の <plugin> エントリを追加します。

    <plugin>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-webapp-maven-plugin</artifactId>
      <version>2.5.0</version>
    </plugin>
    
  3. デプロイを構成するには、次の Maven コマンドを実行します。

    mvn azure-webapp:config
    

    プロンプトで次のオプションを選択します。

    入力フィールド 値の入力または選択
    サブスクリプションを選択します。 サブスクリプション ID を入力します。
    Define value for OS(Default: Linux): 2. linux
    Define value for javaVersion(Default: Java 8): 2. Java 11
    pricingTier の値を定義します (既定値: P1v2): 9. P1v2
    確認 (Y/N)

    次の例のような出力が表示されます。

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------< com.microsoft.azure.samples.quarkus:quarkus-hello-azure >-------
    [INFO] Building quarkus-hello-azure 1.0-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- azure-webapp-maven-plugin:2.5.0:config (default-cli) @ quarkus-hello-azure ---
    [INFO] Auth type: OAUTH2
    Username: abc@xyz.com
    Available subscriptions:
    *  1: Subscription1(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)
       2: Subscription2(yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy)
    Please choose a subscription [xxx]: 1
    [INFO] Subscription: Subscription1(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)
    Define value for OS [Linux]:
      1: Windows
    * 2: Linux
      3: Docker
    Enter your choice: 2
    Define value for javaVersion [Java 8]:
    * 1: Java 8
      2: Java 11
      3: Java 17
    Enter your choice: 2
    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: 9
    Please confirm webapp properties
    Subscription Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
    AppName : quarkus-hello-azure-1601011883156
    ResourceGroup : quarkus-hello-azure-1601011883156-rg
    Region : centralus
    PricingTier : P1v2
    OS : Linux
    Java : Java 11
    Web server stack: Java SE
    Deploy to slot : false
    Confirm (Y/N) [Y]:
    [INFO] Saving configuration to pom.
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  16.502 s
    [INFO] Finished at: 2020-09-25T14:31:34+09:00
    [INFO] ------------------------------------------------------------------------
    
  4. PORTWEBSITES_PORTWEBSITES_CONTAINER_START_TIME_LIMIT<configuration>セクションに <appSettings> セクションを追加します。 azure-webapp-maven-plugin の XML エントリは、次の例のようになります。

       <plugin>
         <groupId>com.microsoft.azure</groupId>
         <artifactId>azure-webapp-maven-plugin</artifactId>
         <version>2.5.0</version>
         <configuration>
           <schemaVersion>V2</schemaVersion>
           <resourceGroup>microprofile</resourceGroup>
           <appName>quarkus-hello-azure-1591836715762</appName>
           <pricingTier>P1v2</pricingTier>
           <region>centralus</region>
           <runtime>
             <os>linux</os>
             <javaVersion>java 11</javaVersion>
             <webContainer>java SE</webContainer>
           </runtime>
           <appSettings>
             <property>
               <name>PORT</name>
               <value>8080</value>
             </property>
             <property>
               <name>WEBSITES_PORT</name>
               <value>8080</value>
             </property>
             <property>
               <name>WEBSITES_CONTAINER_START_TIME_LIMIT</name>
               <value>600</value>
             </property>
           </appSettings>
           <deployment>
             <resources>
               <resource>
                 <directory>${project.basedir}/target</directory>
                 <includes>
                   <include>*.jar</include>
                 </includes>
               </resource>
             </resources>
           </deployment>
         </configuration>
       </plugin>
    
  5. src/main/resources/application.properties ファイルに次のエントリを追加して、Uber (FAT) jar を作成します。

    quarkus.package.type=uber-jar
    

Azure にアプリケーションをデプロイする

この記事の前のセクションで説明した設定をすべて構成したら、次は Azure に Web アプリをデプロイします。 そのためには、次の手順を行ってください。

  1. pom.xml ファイルに変更を加えた場合は、次のコマンドを使用して JAR ファイルをリビルドします。

    mvn clean package
    
  2. 次のコマンドを使用して Web アプリを Azure にデプロイします。

    mvn azure-webapp:deploy
    

デプロイに成功すると、次の出力が表示されます。

[INFO] Successfully deployed the artifact to https://quarkus-hello-azure-1591836715762.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:20 min
[INFO] Finished at: 2020-06-11T10:06:51+09:00
[INFO] ------------------------------------------------------------------------

Maven によって、ご自身の Web アプリが Azure にデプロイされます。 Web アプリまたは Web アプリ プランが存在しない場合は、Maven によって新たに作成されます。 出力に示されている URL に Web アプリが表示されるまで数分かかることがあります。 Web ブラウザーで URL にアクセスします。 次の画面が表示されます。

Quarkus のフロント ページを示す Web ブラウザーのスクリーンショット。

Web アプリのデプロイが完了すると、Azure portal でそれを管理できるようになります。

次のスクリーンショットに示すように、Web アプリが microprofile リソース グループに一覧表示されます。

リソース グループの内容を示すAzure portalのスクリーンショット。

Web アプリにアクセスするには、Web アプリの [概要] ページにある [参照] を選択します。 デプロイが成功して実行中であることを確認します。 次の画面が表示されます。

Web アプリの概要ページを示すAzure portalのスクリーンショット。

実行中の App Service からのログ ストリームを確認する

実行中の App Service からログを表示 ("tail") できます。 サイト コードでの console.log への呼び出しはすべて、ターミナルに表示されます。

az webapp log tail 
    --resource-group microprofile \
    --name quarkus-hello-azure-1601011883156

ログ ストリームを示すターミナル ウィンドウのスクリーンショット。

リソースをクリーンアップする

Azure リソースが不要になったら、リソース グループを削除して、デプロイしたリソースをクリーンアップします。

  • Azure portal で、左側のメニューから [リソース グループ] を選択します。
  • [名前でフィルター] フィールドに「microprofile」と入力します。このチュートリアルで作成したリソース グループにはこのプレフィックスが付いています。
  • このチュートリアルで作成したリソース グループを選択します。
  • トップ メニューから [リソース グループの削除] を選択します。

次のステップ

MicroProfile および Azure の詳細については、Azure ドキュメント センターで引き続き MicroProfile に関するドキュメントをご確認ください。

その他のリソース

この記事で説明しているさまざまなテクノロジの詳細については、次の記事をご覧ください。