Microsoft Learnで学ぶ「Java on Azure」

https://qiita.com/official-events/22637c675c61a797a24f

<hr>

新入社員が全体研修を終えて仮配属にくる時期が近づいてきました。新人さんにJavaやAzureを学んでもらうとき、自分だったら何を勧めるかな？と考えたところ「<strong>Microsoft Learn</strong>」が頭に浮かびました。

https://docs.microsoft.com/ja-jp/learn/paths/java-on-azure/

と言いながらも私自身実際に試したことがなかったので「<strong>Azure 上の Java の概要</strong>」をやってみました。

https://docs.microsoft.com/ja-jp/learn/modules/intro-to-java-azure/

手を動かす部分は[「サンプル Java アプリのデプロイ」](https://docs.microsoft.com/ja-jp/learn/modules/intro-to-java-azure/6-sample-deployment)で、Spring BootのWebアプリケーションをAzureにデプロイする内容となっています。

# ローカル環境での実行

今回、私が試した環境は以下のとおりです。最近はローカル環境に何もインストールしてなくて、Docker+Remote Containerを利用しています。OSはWindows 10とmacOS両方試して同じように動きました。

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

[Dockerのイメージはmavenのもの](https://hub.docker.com/_/maven)を使いました。デプロイの際に必要な[Azure CLI](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli)を入れてます。

では具体的な手順を紹介していきます。dockerfileをVSCodeで開いたら、画面左下をクリックして、Reopen in Containerを選びます。しばらくするとコンテナ内の環境に変わります。

![スクリーンショット 2021-04-21 22.42.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/605f0d4e-5494-1643-36a6-ad80dd57ddac.png)

このあとは[「サンプル Java アプリのデプロイ」](https://docs.microsoft.com/ja-jp/learn/modules/intro-to-java-azure/6-sample-deployment)のとおりです。まずはGitでサンプルアプリをクローンします。

```
git clone https://github.com/spring-projects/spring-petclinic.git
```
続いて以下のコマンドでパッケージングします。

```
./mvnw package
```

このコマンドはコンテナ環境だと以下のエラーになりました。[原因を調べると](https://github.com/eclipse/che/issues/13926)mavenのイメージで使っている環境変数（MAVEN_CONFIG）が重複して起こる問題のようです。

```
[ERROR] Unknown lifecycle phase "/root/.m2". 
```

以下のコマンドで解決しました。

```
mvn clean install
```
実行して画面が表示されればOKです。

```java
java -jar target/*.jar
```

![スクリーンショット 2021-04-22 0.05.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/f68e220d-5fbf-305e-3101-a83c2a2769f8.png)

# Azureでの実行

続いてサンプルアプリをAzureにデプロイします。Learnの手順ではいきなりazure-webapp-maven-pluginのコマンドを実行していますが、以下のエラーになりました。

```
[ERROR] Failed to execute goal com.microsoft.azure:azure-webapp-maven-plugin:1.13.0:config (default-cli) on project spring-petclinic: Cannot find any subscriptions in current account. -> [Help 1]
```

先にAzure CLIでログインする必要があるようです。

```
az login
```

ログインした後に以下を実行します。

```
mvn com.microsoft.azure:azure-webapp-maven-plugin:1.13.0:config
```

成功するとAzureで構築する環境構成を聞かれるので回答します。その結果、pom.xmlにAzureデプロイ用の定義が自動的に追加されます。

最後は以下のコマンドでデプロイします。

```
mvn package com.microsoft.azure:azure-webapp-maven-plugin:1.13.0:deploy
```

しばらく待つと無事Azureにデプロイできました！

![スクリーンショット 2021-04-22 0.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47737/b7133803-632f-c93b-cfa4-1d712d0da92a.png)

今回はコンテナ環境で試したため、一部手順に違いがあります。でもこうやってMicrosoft Learnを使って学習することは基本的な知識や操作を覚える上で役に立ちそうです。このまま先のコンテンツもトライしてみたいと思います。