最速で Azure Spring Apps (ASA) を立ち上げる

# 最速で Azure Spring Apps (ASA) を立ち上げる

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu から Azure Spring Apps に Web アプリを最速でデプロイすることに挑戦します。
![spring-boot_on_azure-spring-apps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/ef0c7db1-319f-7fc7-5543-749ad78289f0.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/studio_meowtoon/items/6119ab05d8b13527efd8

## 実現すること

ローカル環境の Ubuntu から Azure Spring Apps に、シェルスクリプトを用いて Spring Boot JAR ファイル形式のアプリをデプロイします。

## はじめに

みなさん Azure を楽しんでますか？今回は趣向を変えて Azure Spring Apps を最速で立ち上げることに挑戦してみたいと思います。

:::note alert
**Microsoft Azure** は、**Web ブラウザ**から簡単に**クラウド環境**に **Web アプリをアップロード**できる環境があります。これにより、**コマンドを入力する必要がなく**、簡単に Azure に Web アプリをデプロイできます。この記事では学習のため、Ubuntu 上のシェルスクリプトから Spring Apps を起動する方法を試みています。ご注意ください。 
:::

## 関連記事

他の **Azure PaaS サービス**と比較してみましょう！

https://qiita.com/studio_meowtoon/items/35479d577e46d8804aa9

https://qiita.com/studio_meowtoon/items/9242f70a78bc920a8a5a

## 開発環境

+ Windows 11 Home 22H2 を使用しています。  

:::note info
[WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方も参考にして頂けます。  
:::

<details>

WSL (Microsoft Store アプリ版) [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
```

Ubuntu [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
```

Java JDK [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/4d11e94a2389758759cd)

```sh
$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
```

Maven [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/f4cdc4039158153365fb)

```sh
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
```

Azure CLI [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/9721041f9e6e3e987cf0)

```sh
$ az --version
azure-cli                         2.45.0
core                              2.45.0
telemetry                          1.0.8
```

</details>

:::note warn
この記事では基本的に **Ubuntu のターミナルで操作**を行います。**Vim を使用してコピペする方法**を初めて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
:::

https://qiita.com/studio_meowtoon/items/7771ad48676926e41463

## Spring Boot アプリを作成

こちらの関連記事で手順がご確認いただけます。

https://qiita.com/studio_meowtoon/items/37ac0082a3228e4de570

https://qiita.com/studio_meowtoon/items/ffbcb6ac9179852b2816

:::note info
ここまでの作業で、プロジェクトフォルダに **target/app.jar** というファイル名の JAR ファイル形式の Web アプリが作成済みです。 
:::

## プロジェクトフォルダに移動

プロジェクトフォルダに移動します。
※ ~/tmp/hello-spring-boot をプロジェクトフォルダとします。

```sh
$ cd ~/tmp/hello-spring-boot
```

## Spring Apps を立ち上げる

シェルスクリプトを作成します。

```sh
$ vim create_spring_apps.sh
```

:::note warn
状況により、次の3つの**パラメータ**を変更してください。

|No|行|パラメータ|内容|
|:--|:--|:--|:--|
|1|resource_group_name=rg-hello|**rg-hello**|リソースグループの名前です。|
|2|spring_service_name=aps-hello|**aps-hello**|Spring Apps サービスの名前です。|
|3|spring_app_name=sap-hello-spring-boot|**sap-hello-spring-boot**|Spring Apps アプリの名前です。|
:::

```sh:create_spring_apps.sh
#!/bin/sh

# set variables.
location_name=japaneast
resource_group_name=rg-hello
spring_service_name=aps-hello
spring_app_name=sap-hello-spring-boot

# create a resource group
az group create \
    --name $resource_group_name \
    --location $location_name

# create a spring service.
az spring create \
    --resource-group $resource_group_name \
    --name $spring_service_name \
    --location $location_name \
    --sku Basic

# create a spring app.
az spring app create \
    --resource-group $resource_group_name \
    --service $spring_service_name \
    --name $spring_app_name \
    --runtime-version Java_11 \
    --assign-endpoint true

# deploy a spring app.
az spring app deploy \
    --resource-group $resource_group_name \
    --service $spring_service_name \
    --name $spring_app_name \
    --artifact-path target/app.jar

# get a spring service id.
spring_service_id=$(az spring list \
    --query "[0].id" \
    -o tsv)

# get a signed in user id.
signed_in_user_id=$(az ad signed-in-user show \
    --query id \
    -o tsv)

# create a spring app connect role.
az role assignment create \
    --role 'Azure Spring Apps Connect Role' \
    --scope $spring_service_id \
    --assignee $signed_in_user_id

# get a spring app data.
curl https://$spring_service_name-$spring_app_name.azuremicroservices.io/api/data -w '\n'
```

実行権限を付加します。

```sh
$ chmod +x create_spring_apps.sh
```

Azure にログインします。

```sh
$ az login
```

こちらの関連記事で手順がご確認いただけます。 

https://qiita.com/studio_meowtoon/items/9721041f9e6e3e987cf0

シェルスクリプトを実行します。

```sh
$ ./create_spring_apps.sh
```

デプロイが完了すると以下の内容が表示されます。

```sh
{"message":"Hello World!"}
```

:::note info
シェルスクリプトを実行するコマンドを叩いてから **Hello World!** が表示されるまで**18分14秒**でした。
:::

### Azure Portal を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/c42fc88d-697f-7c96-b85a-1fd3a3a3fe99.png)
このように Azure Spring Apps アプリが作成されています。

## Spring Apps を削除する

シェルスクリプトを作成します。

```sh
$ vim delete_resource_group.sh
```

:::note warn
次のパラメータは上で作成したものと合わせてください。

|No|行|パラメータ|内容|
|:--|:--|:--|:--|
|1|resource_group_name=rg-hello|**rg-hello**|リソースグループの名前です。|
:::

ファイルの内容

```sh:delete_resource_group.sh
#!/bin/sh

# set variables.
resource_group_name=rg-hello

# delete resource group
az group delete \
    --name $resource_group_name \
    --yes
```

実行権限を付加します。

```sh
$ chmod +x delete_resource_group.sh
```

シェルスクリプトを実行します。

```sh
$ ./delete_resource_group.sh
```

削除中は以下のように表示されます。

```sh
 / Running ..
```

## まとめ

Azure Spring Apps 環境で、JAR ファイル形式の Spring Boot Web アプリを簡単に起動することができました。

:::note warn
実際の業務では、手動で Spring Apps に Web アプリをデプロイすることもできます。例えば、**Azure ポータル**上で**手動で設定**を行ったり、さらに、CI/CD パイプラインを使用して自動的にデプロイすることもできます。しかし、このスクリプトを読むことで、Spring Apps に Web アプリを配備するために必要な手順が理解できます。また、このスクリプトをさらに改良することに挑戦することもできます。
:::

どうでしたか？ WSL Ubuntu で、Azure クラウドアプリケーション開発環境を手軽に構築することができます。ぜひお試しください。今後も Azure の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

## 推奨コンテンツ

https://qiita.com/studio_meowtoon/items/7a5c2cbb4d1267e110ba