Azure Spring Cloudを試してみた

SpringのPaaSである [Azure Spring Cloud](https://azure.microsoft.com/ja-jp/services/spring-cloud/) がプライベートプレビューで登場したので試してみました。  
ドキュメントはこちらを参照です。
[Azure Spring Cloud のドキュメント](https://docs.microsoft.com/ja-jp/azure/spring-cloud/)

# プレビューにサインアップ
* [Azure Spring Cloud](https://azure.microsoft.com/ja-jp/services/spring-cloud/) ページにある[プレビューにサインアップ]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/4ff3afc7-5aa5-c3f5-a032-86dab0c205a6.png)

* Formsが開くので質問内容を埋めて申請します。大体1～2営業日くらいで有効化したよという内容のメール返信が来ました。

# Azure Spring Cloudを作成する
* AzureポータルのMarketplaceから[Azure Spring Cloud]を検索し選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/fce98b04-5a1d-a4c0-aab2-147e74a4a739.png)

    * ここで注意点ですが、私の環境ではなぜかAzureポータルのMarketplaceで検索してもヒットしませんでした。有効化したよメールにリンクが貼ってあり、そのリンクからアクセスすると辿り着くことができました。

* リソースグループ、サービス名、リージョンを入力します。日本リージョンはまだきていないのでEast USを選択しました。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/a2a9c7fd-861a-c20c-f0b1-0d9bb81407b5.png)

* タグは必要に応じて設定します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/e1bbf5ef-eb8c-c185-1e52-0b6c517f0533.png)

* サマリー画面が出るので、そのまま作成します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/ceb7f622-d6ed-a13f-9d11-c11a2ec584de.png)

# Azure CLI 拡張機能をインストールする
* 作成している間にAzure CLI拡張機能をインストールしておきます。

```
$ az extension add -y --source https://azureclitemp.blob.core.windows.net/spring-cloud/spring_cloud-0.1.0-py2.py3-none-any.whl
```

# アプリケーション作成

* Azure CLIでログインします。

```
$ az login
```

* Spring Cloud上にmy-springという名前でアプリケーションを作成します。

```
$ az spring-cloud app create -n my-spring -g [Your ResourceGroup Name] -s [Your Spring Cloud Service Name]
```

* JARファイルをデプロイします。

```
$ az spring-cloud app deploy -n my-spring --jar-path XXX.jar -g [Your ResourceGroup Name] -s [Your Spring Cloud Service Name]
```

# パブリックエンドポイントを割り当てる

* AzureポータルからAppsを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/78b2574f-14a3-75cb-5d4b-bc72aa0101e3.png)

* 先ほど作成した[my-spring]アプリケーションを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/463f51fa-3d33-10c5-dfe7-954b9d3ac90d.png)

* [Assign domain]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/a44e3e3d-2b69-3b0b-2a4e-da5e473a6c00.png)

* URLが発行されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/162b5e35-2346-814a-c413-0837e5335b1c.png)

* URLにアクセスするとSpring Bootアプリケーションにアクセスすることができます。(このアプリは自前のサンプルです)  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/81e6f3d3-505e-ebb7-10d8-03c4091c56a9.png)

* ポータルから停止操作をしてみます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/ca228bfa-c2d2-8a53-876e-560ccffeff3f.png)

* 503エラーになりました。裏でnginxが動いているようですね。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/76f8b3dd-db4b-9d10-403c-04125aaaa31e.png)

# まとめ
自前のアプリケーションを動かしてみましたが、素早くデプロイまで辿り着くことができました。
裏ではAKS上で動作しているようですが、Kubernetesの存在を感じさせません。
AKSはKubernetesのマネージドサービスですが、構築や運用にはどうしてもKubernetesの知識が必要になり、学習コストは低くないです。
Azure Spring Cloudだと、Kubernetes周りのことを気にすることなく、アプリケーションのビルドができることが魅力だと感じました。
試してませんが、Web Appのようなブルーグリーンデプロイメントを備えているのもいいですね。

気になる点としては、アプリケーション毎にスケールアップやアウトもできますが、オートスケールには対応していないようです。
vNetの中には入れれないのでパブリックに公開するWebアプリケーションに限られそうです。
IPアドレス制限もAzureポータルからはできないので、必要であればSpringアプリケーションの中で設定しなければいけないですね。

Web App for Containerでも代替できそうですが、よりインフラ面を気にせずにコードに集中できるようなサービスという印象です。