【祝！東日本GA】Azure Spring Cloud をとにかく始めてみる 

[@yo41sawada](https://twitter.com/yo41sawada) です。

前回 [こちらの記事](https://qiita.com/yo41sawada/items/81653455870f8bd337c4) で Azure Spring Cloud に注目しているといった矢先、
嬉しいニュースが飛び込んできました。

https://twitter.com/yoshioterada/status/1380059895655854082

というわけで早速試してみたので、それを共有しようと思います。

# この記事で共有すること
- Azure Spring Cloud を東日本リージョンにデプロイするための大まかな手順とその画面キャプチャ
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/737688f5-6320-7244-06b8-e2a4deaf96ca.png)

# この記事で言及しないこと
- Azure（ポータル/ CLI ) の基本的な操作・用語や Microsoft アカウントを準備するための手順
- Java & Spring を用いた基本的なウェブアプリケーション開発や Maven を用いたビルドに関する知識や手順

# 動作環境
動作環境は以下の通りです。ちなみに今回 Java については、こちらも先日発表になった Microsoft 独自の OpenJDK ディストリビューションである「Microsoft Build of OpenJDK」を使っています（ 2021 年 4 月 15 日時点ではプレビュー版）。それはまた別の機会があれば。

- OS : Windows 10 Pro (19042.867)
- Java : Microsoft Build of OpenJDK 11.0.10
- Maven : 3.8.1
- Azure CLI : 2.17.1

# 全体の流れ
先に大まかな流れを押さえておきましょう。

1. 環境セットアップ（ Java / Maven / Azure CLI ）
1. デプロイする Spring Web アプリケーションの準備
1. 東日本リージョンへの Azure Spring Cloud リソース追加
1. 上記リソースへのアプリ追加
1. ビルドしたアプリケーション（jar）のデプロイ

# 環境セットアップ（ Java / Maven / Azure CLI ）
詳細な手順は省きますが、今回はコマンド（ Git Bash ）を用いる部分もあるので、
正しくインストール出来ているかを確認するようにしましょう。

### Java
Microsoft Build of OpenJDK は [こちら](https://www.microsoft.com/openjdk) からダウンロードページに遷移し（「 Download 」ボタンをクリック）、インストーラをダウンロードしてインストールします。
私の場合は、以下のインストーラを用いました。

- microsoft-jdk-11.0.10.9-windows-x64.msi

インストールが完了したら、 Git Bash にて以下のコマンドを実行して JDK がインストールされていることを確認します。

```bash
$ java -version
```

例えば以下のように表示されれば成功です。

```bash
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment Microsoft-18724 (build 11.0.10+9)
OpenJDK 64-Bit Server VM Microsoft-18724 (build 11.0.10+9, mixed mode)
```


### Maven
Maven の場合は [こちら](https://maven.apache.org/download.cgi) からアーカイブファイルをダウンロードした後、解凍して環境変数の設定を行います。
私の場合は、以下のアーカイブファイルを用いました。

- apache-maven-3.8.1-bin.zip

解凍と環境変数の設定が完了したら、 Git Bash にて以下のコマンドを実行して mvn コマンドが実行できることを確認します。

```bash
$ mvn -v
```

例えば以下のように表示されれば成功です。

```bash
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: C:\develop\apache-maven-3.8.1
Java version: 11.0.10, vendor: Microsoft, runtime: C:\Program Files\Microsoft\jdk-11.0.10.9-hotspot
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
```

### Azure CLI
Azure CLI は [こちら](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli) からダウンロードページに遷移し（「〇〇へのインストール」リンクをクリック）、インストーラをダウンロードしてインストールします。
私の場合は、以下のインストーラを用いました。

- azure-cli-2.17.1.msi

インストールが完了したら、 続けて以下のコマンドを実行して Azure CLI 用の Azure Spring Cloud 拡張機能をインストールします。

```bash
$ az extension add --name spring-cloud
```

インストールが完了したら、以下のコマンドを実行して Azure CLI と Azure Spring Cloud 拡張機能がインストールされていることを確認します。

```bash
$ az --version
```

例えば以下のように表示されれば成功です。私の場合は更新のアナウンスが表示されていますが、これは記事執筆時点での Azure CLI 最新バージョンが 2.22.0 であるためです。ここではそのまま続けていきますが、入手できる最新の Azure CLI を用いても問題無いと思います。

```bash
azure-cli                         2.17.1 *

core                              2.17.1 *
telemetry                          1.0.6

Extensions:
spring-cloud                       2.3.1

Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
Extensions directory 'C:\Users\{USER NAME}\.azure\cliextensions'

Python (Windows) 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 23 2018, 23:31:17) [MSC v.1916 32 bit (Intel)]

Legal docs and information: aka.ms/AzureCliLegal


You have 2 updates available. Consider updating your CLI installation with 'az upgrade'

Please let us know how we are doing: https://aka.ms/azureclihats
and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy
```

そのまま Microsoft アカウントでログインしましょう。

```bash
$ az login
```


# デプロイする Spring Web アプリケーションの準備
環境のセットアップが完了したら、早速 Azure Spring Cloud 向けアプリケーションを用意していきましょう。ここではイチから準備する方法とショートカットする方法を紹介しますが、問題無くビルドして jar を作成できることがゴールです。

### イチから
イチから準備する場合は、[公式のドキュメント](https://docs.microsoft.com/ja-jp/azure/spring-cloud/quickstart?WT.mc_id=Portal-AppPlatformExtension&tabs=Azure-CLI&pivots=programming-language-java)に方法が記載されているので、その通り進めていきましょう。

まずは Spring Initializr にアクセスし、プロジェクトを準備します。[こちら](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.3.4.RELEASE&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-starter-sleuth,cloud-starter-zipkin,cloud-config-client) から Spring Initializr へアクセスすれば予め Azure Spring Cloud 向けの Dependencies を追加したプロジェクトが設定されているので、「 GENERATE 」 ボタンをクリックしてアーカイブをダウンロードしてください。
![screenshot.1618409562.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/cefd42d7-1465-18c9-86cd-cc4ee70c18c5.jpeg)


ダウンロードが完了したらそのアーカイブを一度解凍し、 HellospringApplication.java と同じディレクトリに API 用の HelloController.java を用意します。

```java:HelloController.java
package com.example.hellospring;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Welcome to Japan East!!!";
    }

}
```

HelloController.java の準備が出来たら、Maven を使ってプロジェクトをビルドします。

```bash
$ mvn clean package
```

### 面倒な方向け
ドキュメントや上記に記載した内容を読んで進めることを省略したい方は、 [こちら](https://github.com/yo41sawada/HelloAzureSpringCloud) からサンプルプロジェクトをダウンロードなりクローンなりした上でビルドしてください。

# 東日本リージョンへの Azure Spring Cloud リソース追加
それではいよいよ東日本リージョンの Azure Spring Cloud リソースを追加していきます。

1. [Azure ポータル](https://portal.azure.com/#home) に Microsoft アカウントを用いてログインし、ホーム画面にて「リソースの作成」をクリックします。
1. 「新規」ページの「 Marketplace を検索」フォームに、「 Azure Spring Cloud 」と入力します。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/2555831b-51ec-b297-398b-022f095849d0.png)
1. 検索結果に表示された「 Azure Spring Cloud 」の「作成」をクリックします。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/737688f5-6320-7244-06b8-e2a4deaf96ca.png)
1. 表示された「 Azure Spring Cloud 」リソース作成画面の「基本」タブにて以下を入力します。
    1. プロジェクトの詳細
        1. サブスクリプション（例：Pay-As-You-Go ）
        1. リソースグループ（例：RG_Demo4ASC ）
        ![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/72b32e13-8a9c-e876-621b-eedb97159d17.png)
    1. サービスの詳細
        1. 名前（例：welcome-japaneast-asc ）
        1. **リージョン（東日本）←当然**
        1. 価格（例：Basicレベル）
1. タブを下にスクロールし、「確認と作成」をクリックします。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/e723ca12-abcb-7d5f-992e-f71ffa863ce2.png)
1. 問題無く検証が終了したことを確認し、「作成」をクリックします。
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/70bb58ef-b6cc-91ae-2bb8-08959eab512a.png)
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/6e5affb5-bdd5-5ab5-7a17-69c145df0a87.png)
1. リソースのデプロイ画面が表示されるので、完了を待ちます。なおこの辺りから「 Microsoft.AppPlatform 」という表現が出てきますが、気にせず進めて下さい。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/36cbeac7-75c5-ea44-bdef-582a2ba6a100.png)
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/2d8c93c1-336e-ecbf-9b9c-d152050f5270.png)
1. 作成された Azure Spring Cloud のリソースを確認します。
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/b7056c7d-e2ac-5994-21d6-3e81fb283e41.png)

# 上記リソースへのアプリ追加
続いて、準備した東日本リージョンの Azure Spring Cloud リソースへ、アプリを追加していきます。

1. Azure Spring Cloud リソースの 「設定」 > 「アプリ」に、何も表示されていないことを確認します。
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/3bbb5f72-71e5-a182-008d-f03a98a3eed7.png)
1. Git Bash を起動し、以下のコマンドを実行することでアプリを追加します。先ほど作成したリソースを例にあげると、以下のようになります。
    1. アプリ名（例．hellospring ）← ここだけ考える
    1. サービス名（ welcome-japaneast-asc ）
    1. リソースグループ名（ RG_Demo4ASC ）

```bash
$ az spring-cloud app create -n アプリ名 -s サービス名 -g リソースグループ名 --assign-endpoint true
```

1. コマンドの実行結果に「 App create succeeded 」と表示されていれば、アプリの追加は成功です。
1. 再度 Azure ポータルに戻り、 Azure Spring Cloud リソースの 「設定」 > 「アプリ」において、追加したアプリ（例．hellospring ）が表示されていることを確認します。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/b7d1f018-7d64-1d84-ef5d-cd5260d47458.png)
1. 追加したアプリ名のリンクをクリックし、「概要」に表示された「URL」をクリックします。
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/c9a598af-6c62-6dba-4968-746b58c3e497.png)
1. Azure Spring Cloud のページが表示されていることを確認します。
![図13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/3341aaaf-4fd2-6e33-30f6-3b3409503bef.jpeg)

# ビルドしたアプリケーション（jar）のデプロイ
最後に、追加したアプリに先程ビルドした jar をデプロイしていきます。

1. Git Bash を起動し、以下のコマンドを実行することでアプリへ jar をデプロイします。先ほど追加したアプリを例にあげると、以下のようになります。
    1. アプリ名（ hellospring ）
    1. サービス名（ welcome-japaneast-asc ）
    1. リソースグループ名（ RG_Demo4ASC ）
    1. ビルドした jar の配置されているパス（例：target/hellospring-0.0.1-SNAPSHOT.jar ）

```bash
$ az spring-cloud app deploy -n アプリ名 -s サービス名 -g リソースグループ名 --jar-path ビルドした jar の配置されているパス
```

1. コマンドが問題無く終了していれば、デプロイは成功です。
1. 先程と同様に Azure Spring Cloud リソースへ追加したアプリ名のリンクをクリックし、「概要」に表示された「URL」をクリックします。
1. API のレスポンスが正しく返っていることを確認します。
![図14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/d6d92c9e-7e75-2213-fb8a-d72986ce0250.jpeg)

以上が東日本リージョンの Azure Spring Cloud にアプリケーションをデプロイする手順です。うまくいきましたか？

# ハマりやすいところ
最後に少しだけ、ハマりやすいところ（自分が進めていて不安になったところや少し躓いたところ）を紹介しておきますので、他にもあればコメントなど頂けると嬉しいです。

### リソースのデプロイに 20 分くらいかかった
Azure ポータルを用いて Azure Spring Cloud リソースを追加した際のデプロイに 20 分程時間がかかりました。東日本リージョンだからなのかは切り分けできていませんが、ここは気長に待ちましょう。

### ResourceNotFoundError に遭遇した
「az spring-cloud app create ～」コマンドを実行した時に、リソースグループ名が見つからないというエラーに遭遇しました。これは Azure CLI コマンドを操作している方は一度は遭遇するのではというあるあるなのですが、Azure CLI を操作している際にログインしている Microsoft アカウントのサブスクリプションが適切に指定されていない場合等に起こります。焦らず、以下のようにサブスクリプションを指定するコマンドを実行しましょう。サブスクリプションは適宜読み替えてください（例：Pay-As-You-Go ）。

```bash
$ az account set -s サブスクリプション名
```

### ビルドしたアプリケーションをデプロイしたのに変化が無い
正しくデプロイできているのであれば、ブラウザのキャッシュが原因です。落ち着いて、F5 等でリロードしましょう。

# おわりに
いかがだったでしょうか。Spring や Azure を触っている方であれば、東日本リージョンに Azure Spring Cloud のアプリケーションを簡単にデプロイできたのではないかと思います。一方でここで紹介しなかった機能や画面も多いので、例えば以下のような内容について確認出来たら、こちらで共有していこうと思います。

- 価格レベルの変更
- Automation 有効化
- Java インプロセスエージェント有効化
- 既存の仮想ネットワークへのデプロイ


# 関連記事等
- [クイック スタート:初めての Azure Spring Cloud アプリケーションをデプロイする](https://docs.microsoft.com/ja-jp/azure/spring-cloud/quickstart?WT.mc_id=Portal-AppPlatformExtension&tabs=Azure-CLI&pivots=programming-language-java)
- [30 分でわかった気になれる Azure Spring Cloud](https://www.youtube.com/watch?v=vdxwMxBxnAI)
- [マイクロソフトが無償でJavaの長期サポートを提供へ、「Microsoft Build of OpenJDK」をリリース](https://www.publickey1.jp/blog/21/javamicrosoft_build_of_openjdk.html)
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/2642600a-f251-ff23-c3b7-2d461827243f.png)
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713/17bbfad1-7642-c3f5-55d9-cfcb52a51fac.png)