はじめに
非常に魅力的なプラットフォームであるAzure Container Apps(以降、ACA)についてMS公式のチュートリアルを通して概要を整理していきます。
ACAとは
- 2022年5月にGAした、コンテナベースのアプリケーションを簡単にデプロイ、管理、スケールできるサービス
- フルマネージドk8sベースのアプリケーションプラットフォーム
- k8sが提供する高い可用性、セキュリティ、スケーラビリティの恩恵を受けつつ、k8sの管理は不要
- KEDA、Dapr、EnvoyといったCNCFプロジェクトの成果物をマネージドサービスとして提供する
- 内部的にはAzure Kubernetes Service (AKS) を使用している
※AKSについては以前の記事を参照。
AKSとの違い
AKS:k8sAPI使いたい、k8sの設定自由度を確保したいならAKSを使うべき。
ACA:k8sAPIは意識しない。k8sの機能は使いたいけどクラスターの管理とかはしたくない人向けの便利なプラットフォーム。
なので、k8sが提供する高い可用性、セキュリティ、スケーラビリティの恩恵を受けたいがk8sの管理が大変、そもそもk8sを勉強するのが難しい、k8s開発スピード早すぎてついていけないという人にACAがおすすめ。
参考
用語
Azure Container Apps Environment
Azure Container Apps Environment(以降、ACAE)は、ACAのインスタンスをホストするための論理的な境界。
ACAEは、アプリケーションが実行されるネットワーク、セキュリティ、およびリソースの設定を提供する。
ACAE内のアプリケーションは、同じリージョン内で物理的に近い場所に配置され、低遅延の通信を実現する。
内部的には、AKSのAKSクラスターに該当する。
ちなみに、Azure portalから作成する場合、ACAEの画面からACAEのみを新規作成することはできない(2024年7月初時点)。なので、ACAの作成画面にてACAEの「新規作成」を選択することでACAEの設定が可能になる。
Revision
ACAの特定のバージョン(断面)のこと。
構成管理のための概念。
利用シナリオ
- ウェブアプリケーション、API、バックエンドサービスなど、幅広いアプリケーションに適用可能
- イベントドリブンな処理や、マイクロサービスアーキテクチャを採用したアプリケーションの開発に適している
価格モデル
- 従量課金モデルとインスタンス専有モデル(ハードウェア単位の課金体系)がある
- インスタンス専有モデルの場合、 ACAEの作成時に以下のような画面にてホストのサイズを選択可能となる
多様なユースケースに対応したチュートリアル
Azure CLIからcontainer upコマンドで簡単デプロイ
Azure CLIを使ったチュートリアルは、ただ試すだけなら、Azure portalのCloud Shellから実施するのが環境設定等がほとんど不要なのでおすすめ。
Dapr統合されたアプリの簡単デプロイ
Quarkusアプリの簡単デプロイ
ACAにおけるコンテナのライフサイクル
- ACAではコンテナはRevisionを基に管理される
- コンテナにはdeployment、update、deactive、shutdownの4つのフェーズがある
Deployment
コンテナアプリがデプロイされると最初のrevisionが自動的に作成される。
Update
コンテナアプリがRevision scopeで更新された場合、新しいrevisionが作成される。
古いrevisionを自動的に非アクティブにするモード(単一revisionモード)と使用可能なままにする複数revisionモードを選択できる(画像の例は複数revisionモード)。
※Revision Scopeとapplication scope
コンテナアプリに対する変更の内容によって、新規にRevisionが作成されるのか、既存revisionへの変更のみ(新規でRevisionの作成はされない)なのがか決まっており、それぞれRevision Scopeとapplication scopeという。
Revision Scope:containerイメージや設定の変更など
application scope:secretの変更やIngress設定、Daprの設定など
Deactive
Shutdown
シャットダウンが開始されると、コンテナー ホストは SIGTERM メッセージをコンテナーに送信します。 コンテナーに実装されているコードでは、このオペレーティング システム レベルのメッセージに応答して終了処理をすることができます。
アプリケーションが 30 秒以内に
SIGTERM
メッセージに応答しない場合、SIGKILL でコンテナーが終了します。
ACAでHelloworldアプリをデプロイする
こういうチュートリアルをやるときまずどんなアプリケーションを載せるんだろうというのが最初に気になるので、見ていくと以下のコマンドに書いてあった。
—image mcr.microsoft.com/azuredocs/containerapps-helloworld:latest \
デフォルトではDockerHubからプルされるが、いまはMCR(MS公式のコンテナーレジストリ)から持ってくる設定であった。
Microsoft Artifact Registry(MCR)
デプロイ準備
HelloworldアプリをAzure potralのcloudshellで作ってみる。
CLI 用の Azure Container Apps 拡張機能をインストールまたは更新
az extension add --name containerapp --upgrade
名前空間の登録
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Microsoft.App:ACAの名前空間
Microsoft.OperationalInsights:Log Analyticsワークスペースの名前空間
ContainerAppsのデプロイ
もうデプロイできちゃうの!?
az containerapp up \
--name az-foo-container-app01 \
--resource-group AZ-foo \
--location japaneast \
--environment 'AZ-foo-container-app' \
--image mcr.microsoft.com/azuredocs/containerapps-helloworld:latest \
--target-port 80 \
--ingress external \
--query properties.configuration.ingress.fqdn
オプションの意味(ChatGPT)
containerappsのnameオプションでは大文字指定してはいけない。
-environment 'my-container-apps'
: Azure Container Appsの環境(Environment)を指定します。これはアプリケーションを実行するためのコンテナ化された環境を示します。**my-container-apps
**は独自の環境名です。-target-port 80
: コンテナがリッスンするポート番号を指定します。この場合、ポート80が指定されています。-ingress external
: Ingress(トラフィックの入口)の設定を指定します。**external
**を指定すると、外部からのトラフィックを受け入れるように設定されます。-query properties.configuration.ingress.fqdn
: コマンドの出力結果から特定の情報をクエリして取得するためのオプションです。この場合、コンテナアプリのIngressの完全修飾ドメイン名(FQDN)を取得し、出力として返します。
実行結果
MSLearnに書いてある通りの順番で作成されている。あれば使って、なければ作るという仕様のようだ。
- リソース グループの作成
- Container Apps 環境を作成する
- Log Analytics ワークスペースの作成
- パブリック コンテナー イメージを使用してコンテナー アプリを作成してデプロイする
environment, Log Analytics workspace, container appsが作成されている。
ACAE
Log Analytics
ACA
おわりに
今回は非常に便利なACAについてまとめてみました。
カンタンにマイクロサービスの基盤を構築できるので、皆さんも是非使ってみてください!