最速で Azure App Service を立ち上げる

# 最速で Azure App Service を立ち上げる

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu から Azure App Service に Web アプリを最速でデプロイすることに挑戦します。
![spring-boot_on_azure-app-service.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/fc454fac-7ff8-665d-eda1-9ec64a2ffb4c.png)

## 目的

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

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

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

## 実現すること

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

## はじめに

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

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

## 関連記事

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

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

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

## App Service を立ち上げる

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

```sh
$ vim create_app_service.sh
```

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

|No|行|パラメータ|内容|
|:--|:--|:--|:--|
|1|resource_group_name=rg-hello|**rg-hello**|リソースグループの名前です。|
|2|appservice_plan_name=asp-hello|**asp-hello**|App Service プランの名前です。|
|3|webapp_name=app-hello-spring-boot|**app-hello-spring-boot**|App Service Web アプリの名前です。|
:::

ファイルの内容

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

# set variables.
location_name=japaneast
resource_group_name=rg-hello
appservice_plan_name=asp-hello
webapp_name=app-hello-spring-boot

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

# create an app service plan.
az appservice plan create \
    --resource-group $resource_group_name \
    --name $appservice_plan_name \
    --sku Free \
    --is-linux

# create a webapp.
az webapp create \
    --resource-group $resource_group_name \
    --plan $appservice_plan_name \
    --name $webapp_name \
    --runtime "JAVA:11-java11"

# set a startup file to a webapp config.
az webapp config set \
    --resource-group $resource_group_name \
    --name $webapp_name \
    --startup-file "java -jar /home/site/wwwroot/app.jar --server.port=80"

# deploy a webapp.
az webapp deploy \
    --resource-group $resource_group_name \
    --name $webapp_name \
    --src-path target/app.jar \
    --type jar

# run a webapp.
curl http://$webapp_name.azurewebsites.net/api/data -w '\n'
```

実行権限を付加します。

```sh
$ chmod +x create_app_service.sh
```

Azure にログインします。

```sh
$ az login
```

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

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

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

```sh
$ ./create_app_service.sh
```

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

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

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

### Azure Portal を確認
![tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/b305c30e-5a29-30f2-50d9-31a51ec4fc96.png)
このように App Service Web アプリが作成されています。

## App Service を削除する

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

```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 App Service 環境で、JAR ファイル形式の Spring Boot Web アプリを簡単に起動することができました。

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

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

## 推奨コンテンツ

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