QuarkusのWebアプリケーションをAzure App Serviceで動かす

先日、JavaのWebフレームワーク[「Helidon」](https://helidon.io/#/)をAzure App Serviceで動かしました。今日は[「Quarkus」](https://quarkus.io/)を試します。

# ローカル環境での実行

[Helidonのときと同じ環境](https://qiita.com/kikutaro/items/cb92d6d5b2c8e22c8427)を使いました。

- [Docker](https://www.docker.com/)
- [Visual Studio Code](https://code.visualstudio.com/)
    - [Visual Studio Code Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
    - [Docker for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)
    - [Java Extension Pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)


使用したdockerfileは以下のとおりです。

```dockerfile
FROM maven:3.8.1-openjdk-11

RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
```

今回も[MicroProfile Starter](https://start.microprofile.io/)でプロジェクトの雛形を作りました。

![スクリーンショット 2021-04-30 20.52.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/76b67ca0-da9a-ee8e-5b0c-57c5f48ddfcc.png)

ビルドします。

```
mvn clean package
```

実行します。

```java
java -jar target/demo.jar
```

以下の表示になりました。

![スクリーンショット 2021-04-30 22.58.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/016c45b7-cfca-b4e1-b58d-7ce539619e8a.png)

![スクリーンショット 2021-04-30 22.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/3861e9bd-3645-8afa-b04d-5690783ee7e3.png)

# Azureでの実行

続いてAzureにデプロイするための準備です。最初にAzure CLIでログインしておきます。

```
az login
```

次にpom.xmlのbuildセクションに以下を追加します。

```xml
<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
```

調べたところ以下の情報がありました。

https://stackoverflow.com/questions/63915143/java-lang-classnotfoundexception-io-quarkus-runtime-quarkus

いまいちよくわかっていないのですが、Fat Jarになっていないっぽい？application.propertiesに以下を追加することで無事にAzure上でQuarkusが起動しました。

```
quarkus.package.uber-jar=true
```

あとは手でappSettingsを追加しています。これがないとQuarkusは起動しているけど発行されたURLにアクセスできませんでした。

```xml
<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> 
```

無事にローカル環境と同じように表示されました。

![スクリーンショット 2021-05-01 0.50.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/65585ecd-ab24-67ec-a416-0d41b40280f9.png)

![スクリーンショット 2021-05-01 0.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/eea18a81-a738-b417-f706-98f270fc7986.png)