先日、JavaのWebフレームワーク「Helidon」をAzure App Serviceで動かしました。今日は「Quarkus」を試します。
ローカル環境での実行
Helidonのときと同じ環境を使いました。
使用したdockerfileは以下のとおりです。
FROM maven:3.8.1-openjdk-11
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
今回もMicroProfile Starterでプロジェクトの雛形を作りました。
ビルドします。
mvn clean package
実行します。
java -jar target/demo.jar
以下の表示になりました。
Azureでの実行
続いてAzureにデプロイするための準備です。最初にAzure CLIでログインしておきます。
az login
次にpom.xmlのbuildセクションに以下を追加します。
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.13.0</version>
</plugin>
以下コマンドを実行します。
mvn com.microsoft.azure:azure-webapp-maven-plugin:1.13.0:config
対話式に構成を聞かれるので、linux、Java 8を選びました。
最初このままデプロイしたところ、Quarkusがうまく起動せず以下のエラーがログに出ていました。
Caused by: java.lang.ClassNotFoundException: io.quarkus.runtime.Quarkus
調べたところ以下の情報がありました。
いまいちよくわかっていないのですが、Fat Jarになっていないっぽい?application.propertiesに以下を追加することで無事にAzure上でQuarkusが起動しました。
quarkus.package.uber-jar=true
あとは手でappSettingsを追加しています。これがないとQuarkusは起動しているけど発行されたURLにアクセスできませんでした。
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.14.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>xxxxx</subscriptionId>
<resourceGroup>demo-xxxxxxxxxxx-rg</resourceGroup>
<appName>demo-xxxxxxxxxx</appName>
<pricingTier>P1v2</pricingTier>
<region>westeurope</region>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</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>900</value>
</property>
</appSettings>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
</plugins>
無事にローカル環境と同じように表示されました。