Azure Container  Apps入門まとめ（１）

## はじめに
本記事は、Azure Container Apps（以下ACA）をお試しで使ってみるにあたり、メモを書き留めたものです。
数回に分けてACAを使って見たいと思います。

## Azure Container Apps
Azureにはコンテナが利用できるリソース自体、いくつかありますが、
ACAは、開発者が Kubernetes の複雑な管理を意識せずに、
コンテナ化されたアプリケーションをデプロイして実行できるようになっています。
私が個人的に思う、AzureでフルマネージドなK8S環境を利用できるAzure Kubernetes Serviceとの比較は以下のとおりです。
導入ハードルはAKSと比較すると低いため、非常に使いやすいと思っています。
当たり前ですが、アプリ自体はコンテナで開発しているため、アプリ規模が大きくなってきて、
フルマネージドな環境が良いとなった場合は、AKSへ移行するのもありと感じました。

|項目 | Azure Container Apps (ACA) | Azure Kubernetes Service (AKS) |
|----|---|---|
|管理の容易さ |非常に簡単 |中級〜上級者向け |
|インフラ管理 |不要 |必要 |
|カスタマイズ性 |低い |高い  |
|スケーリング |自動（イベント駆動、ゼロスケール可能） |手動または自動（詳細設定が可能） |
|ユースケース |小規模～中規模アプリケーション |大規模かつ複雑なアプリケーション |
|コスト |使用量に応じた課金（サーバーレス） |クラスターの維持費が発生 |
|Kubernetesの知識 |必要なし |必要 |
|マイクロサービス開発 |簡単（Dapr 統合）|フルカスタマイズ可能 |
|ネットワークとセキュリティ |簡単な設定のみ |高度な設定が可能 |

## 今回のシリーズで目指す構成
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/99615275-c9c5-9e07-219f-c25805ad9d37.png)

今回は、イメージ管理にAzure Container Registry（以下、ACR）を利用します。
GitHub Packages等も利用可能です。

## 本記事で説明する構成
今回の記事では、ACRリソース作成～ACA環境構築～初期イメージデプロイまでを説明します。
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/33dfab8a-6eb6-5568-84cb-d8e83b4bbe0b.png)

## 環境
* Windows11
* Podmanv version 5.3.1

## ACRリソース作成
Azure上で、ACRのリソースを作成します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/c5290fe9-dc92-d8fc-e7e5-f873adf4d16c.jpeg">

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/ed566fbc-93ed-e18d-9d02-31f01e074d47.jpeg">

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/efe54a94-6647-59c0-12ab-38227dce5767.jpeg">

:::note info
ACA作成時に、どのイメージを利用するか聞かれるので、先に作っておいたほうが便利です。
ACAスタートアップのイメージをそのまま使う場合は不要です。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/b5861886-66d9-fe46-1e97-f6a7129968c6.jpeg">
:::

:::note warn
ACRリソースを作成したら、管理ユーザを有効にすることを忘れないようにしてください。
ACA作成時にエラーとなります。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/6d200ebc-05df-d02f-f0a1-fb16f0fe39ca.jpeg">
:::

管理者ユーザの有効化
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/24b2d439-2cbf-c92d-3e87-88c96629c043.jpeg">

## コンテナイメージの準備
Azureのリソースを利用する前に、コンテナイメージを準備します。
今回は、最低限画面が表示されればいいのでNginxのイメージを利用します。
```Dockerfile
# Dockerfile
FROM nginx:alpine
COPY . /usr/share/nginx/html
```

Dockerfileを保存、保存したディレクトリへ移動し、ビルドします。
```
podman build -f Dockerfile -t demo/myapp:latest .
```

タグ付けを実施
```
podman build -f Dockerfile -t demo/myapp:latest .
```
PodmanにてACRへログイン情報
先ほど有効にした管理者ユーザの情報を入力
```
podman login containerregistryasdfg.azurecr.io --username <ユーザ名> --password <パスワード>
```

ACRへプッシュ
```
podman push containerregistryasdfg.azurecr.io/demo/myapp:latest
```
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/5deb3eb9-2f24-076c-d8fe-c3e2be510980.jpeg">

## ACAリソース作成
いよいよ本番のACAリソースの作成です。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/ff86641b-8063-f472-177b-c9c95b36a6c0.jpeg">

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/2f6921e9-7e8c-897b-0c45-f3c1efaf6e3f.jpeg">

Container Apps環境については、デフォルトで作成されますが、今回はリソース名も指定したいため、新規作成リンクから新規作成します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/7d831a48-6cbf-f9bf-e07f-1bd5b64e4761.jpeg">

Container Apps環境にてログ出力先の設定も行います。
今回は、LogAnalyticsWorkspaceの名前も指定したいため、こちらも新規作成します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/faf633a9-1bb8-7016-79c9-c8cc9800edfc.jpeg">

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/190b0a28-93e0-dcd6-4b42-26d912bb43fd.jpeg">

ACAリソースの構築画面でコンテナーの設定を行います。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/6ade94e6-f3c3-4436-c9c1-941bc88974cc.jpeg">

HTTPのエンドポイントを有効にするため、
Ingressを有効にし、トラフィックはどこからでも受け入れるようにします。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/97230602-d9fc-5118-868f-63da2a81a490.jpeg">

最後に内容を確認し、作成を行います。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/0f2191dd-7fd2-1fad-ffe6-d78da4ed25ac.jpeg">

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/8cf15db7-9644-722f-4633-530c419f659d.jpeg">

これですべてのリソースが作成され、コンテナイメージの起動までできました。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/ab86c420-c3dd-6550-7010-983e8bfe7993.jpeg">

## 画面アクセス
最後に、画面にアクセスします。
コンテナアプリリソースを開き、アプリケーションURLをコピーします。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/c510a337-446f-0ed0-bf6b-6d436bac5a3d.jpeg">

コピーしたURLをブラウザで開きます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2638718/792dfb52-236c-f766-2291-93f5ddd8979d.jpeg">

無事に開けました！！
最後に、今回のリソースはリソースグループごと削除しました。
今回はここまでです。

## まとめ
ACAを利用することで簡単にコンテナアプリをデプロイすることができました。
手軽にコンテナをデプロイできるところがやはり一番のメリットだと感じました。
次回以降は、以下のようなことを試してみたいです。
* AzureDevOpsを利用したCI/CD実装
* ACAの各種設定
* 環境内でのアプリ通信
* その他諸々・・・・