最速で Azure Container Apps (ACA) を立ち上げる

# 最速で Azure Container Apps (ACA) を立ち上げる

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu から Azure Container Apps にコンテナ アプリを最速でデプロイすることに挑戦します。
![spring-boot_on_azure-container-apps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/536d1005-46e3-88e5-2d56-17c00440f7f4.png)

## 目的

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

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

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

## 実現すること

ローカル環境の Ubuntu から Azure Container Apps に、シェルスクリプトを用いて Spring Boot カスタムコンテナイメージのアプリをデプロイします。

## はじめに

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

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

## 関連記事

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

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

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

## 開発環境

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

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

```sh
$ docker --version
Docker version 23.0.1, build a5ee5b1
```

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/cbcfe1433885bae514db#docker-hub-%E3%81%AB%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E7%99%BB%E9%8C%B2

:::note info
ここまでの作業で、**Docker Hub** に **$USER/app-hello-spring-boot:latest** というカスタムコンテナイメージの Web アプリが作成済みです。 
:::

:::note alert
ここで **$USER** という埋め込み変数は、**Ubuntu** のシェル変数 **USER** のことです。つまり、カスタムコンテナイメージを **Docker Hub** にプッシュする際に指定する**アカウント名**と、**Ubuntu** の**ユーザー名**を同じにすると、イメージの取り扱いが簡単になります。ただし、この方法は検証用途に限定されます。
:::

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

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

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

## Container Apps を立ち上げる

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

```sh
$ vim create_container_apps.sh
```

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

|No|行|パラメータ|内容|
|:--|:--|:--|:--|
|1|resource_group_name=rg-hello|**rg-hello**|リソースグループの名前です。|
|2|containerapp_env_name=cae-hello|**cae-hello**|Container Apps 環境の名前です。|
|3|containerapp_name=ca-hello-spring-boot|**ca-hello-spring-boot**|コンテナ アプリの名前です。|
|4|container_image_name=app-hello-spring-boot:latest|**app-hello-spring-boot:latest**|カスタムコンテナイメージの名前です。|
:::

ファイルの内容

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

# set variables.
location_name=japaneast
resource_group_name=rg-hello
containerapp_env_name=cae-hello
containerapp_name=ca-hello-spring-boot
container_image_name=app-hello-spring-boot:latest

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

# create a containerapp env.
az containerapp env create \
    --resource-group $resource_group_name \
    --name $containerapp_env_name \
    --location $location_name

# create a containerapp.
az containerapp create \
    --resource-group $resource_group_name \
    --environment $containerapp_env_name \
    --name $containerapp_name \
    --image $USER/$container_image_name \
    --target-port 8080 \
    --ingress 'external' \
    --min-replicas 1

# get a containerapp fqdn.
fqdn=$(az containerapp show \
    --resource-group $resource_group_name \
    --name $containerapp_name \
    --query 'properties.configuration.ingress.fqdn' \
    --output tsv)

# get a containerapp data.
curl https://$fqdn/api/data -w '\n'
```

実行権限を付加します。

```sh
$ chmod +x create_container_apps.sh
```

Azure にログインします。

```sh
$ az login
```

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

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

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

```sh
$ ./create_container_apps.sh
```

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

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

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

### Azure Portal を確認
![cap_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/e14e8ccd-5f87-20d6-437b-c35f85ced908.png)
このように Container Apps コンテナ アプリが作成されています。

## Container 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 Container Apps (ACA) 環境で、カスタムコンテナイメージの Spring Boot Web アプリを簡単に起動することができました。

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

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

## 推奨コンテンツ

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