Container Apps とは?コンテナーレジストリと連携したデプロイ手順を解説

Uncategorized

クラウドネイティブな開発が主流となりつつある今、アプリケーションを素早く、安全に、そしてスケーラブルに動かす仕組みとして「コンテナー技術」が注目されています。その中でも、Azure が提供する Container Apps は、インフラの煩雑さを意識することなく、コンテナーアプリケーションをデプロイ・実行・スケーリングできる便利な選択肢です。

本記事では、まず「Container Appsとは何か?」という基本から丁寧に解説し、後半では コンテナーレジストリと連携して、実際にアプリをデプロイする手順を詳しく紹介します。

コンテナーに興味はあるけど、Kubernetesはちょっと難しそう…。そんな方にこそ読んでほしい、シンプルで実践的なガイドです。

Azure Container Apps とは?

Azure Container Apps は、Microsoft Azure が提供する マネージドなコンテナー実行環境 です。Kubernetes のような複雑なインフラを意識せずに、コンテナーアプリケーションを簡単にデプロイ・スケーリング・管理 できるサービスです。

Azure Container Apps は、コンテナ化されたアプリケーションを簡単にデプロイ・スケーリングできるマネージドサービスです。

Kubernetesのような複雑なインフラ管理なしに、APIやバッチ処理、マイクロサービスをサクッと運用できます。

Azure Container Apps の主な特徴

Azure Container Appsの主な特徴は以下の通りです。

  • インフラ管理不要(Kubernetesの知識がなくてもOK)
  • マイクロサービスやAPIバックエンドに最適
  • トラフィックに応じて自動スケーリング(KEDAベース)
  • 複数のリビジョン(バージョン)を同時にデプロイ可能
  • Dapr(分散アプリ向けランタイム)との統合サポート

開発者目線で見るとどう便利か?

通常、Kubernetes を使ってコンテナーを動かそうとすると、YAMLファイルの定義、クラスターの構築、PodやServiceの設定…など多くの作業が発生します。しかし、Azure Container Apps ではそれらの設定が大幅に簡略化されています。

具体的には、Docker コンテナーをビルドし、それを ACR(Azure Container Registry)や Docker Hub にプッシュしておけば、az containerapp コマンドや Azure ポータルから簡単にデプロイできます。

オートスケーリングも標準装備

Azure Container Apps は KEDA(Kubernetes-based Event Driven Autoscaling) を内部的に利用しており、HTTPリクエスト数、キューの長さ、CPU使用率などのイベントに基づいて自動でスケーリングします。しかも、ゼロスケーリング(完全停止) にも対応しているので、アイドル時のコストを最小化できます。

Azure Container Apps は「Kubernetesの手間は避けたいけど、クラウドネイティブなアプリを動かしたい」人向けの理想的な選択肢です。小規模なアプリから、スケーラブルなマイクロサービスまで、幅広く対応できる柔軟なプラットフォームとして、注目されています。

Container Apps と App Service の違い

Azureでアプリケーションをホストする際、よく候補にあがるのが App ServiceContainer Apps です。どちらも優れたサービスですが、用途によって得意分野が異なります。

項目Container AppsApp Service
デプロイ形式コンテナ(Docker)コード or コンテナ
スケーリングイベント駆動・ゼロスケール対応オートスケール(最小1インスタンス)
柔軟性・自由度高い(Kubernetes基盤、マイクロサービス向け)比較的制限あり(シンプルなWebに最適)
主な用途API・バッチ処理・マイクロサービスWebサイト・業務アプリ・CMS など
無料枠あり(vCPU秒/GiB秒)一部プランにあり(Always Free プラン)

App Serviceは、HTMLやPHP、.NET、Node.jsなどのWebアプリをそのままホストできる手軽さが魅力。インフラの知識がなくても、数クリックでアプリをデプロイできます。

こんなシナリオに最適:

  • 企業サイトやブログのホスティング
  • 社内向けの業務アプリ(予約システムなど)
  • WordPressなどCMSのホスティング(App Service for Linux)

とにかく「すぐに公開したいWebアプリがある」という場合にピッタリです。

一方でContainer Appsは、名前の通りコンテナ化されたアプリケーションをスムーズにデプロイ・実行できるサービスで、Kubernetesの複雑さを意識せずに、イベント駆動やスケーリングまでお任せできるのが特徴です。

  • REST APIやバックエンド処理をコンテナで動かしたい
  • コンテナベースのバッチ処理やデータパイプライン
  • 複数のマイクロサービスで構成されたアプリを段階的にスケールさせたい
  • GitHub ActionsなどCI/CDパイプラインと連携したDevOps運用

アクセスがないときはゼロスケール(自動停止)されるため、コストも最小限に抑えられます。

Container Apps の利用料金

Azure Container Apps(ACA)の料金は、使った分だけ支払う「従量課金制」で、以下の3つが主な課金対象です。

項目説明課金単位
CPU使用量コンテナ実行中に使ったCPU時間。vCPU 秒(秒単位)
メモリ使用量コンテナが使ったメモリの量。GiB 秒(秒単位)
リクエスト数(オプション)HTTPリクエストなどのトリガー数(特定の構成時のみ)リクエスト数

Azure Container Appsの大きな魅力のひとつが「ゼロスケール」に対応していることです。これは、アプリにアクセスがないとき、自動でコンテナを停止し、リソースの使用量がゼロになれば料金もゼロになるという仕組みです。常時稼働する必要がないAPIやバッチ処理などにピッタリです。

さらに、AzureではContainer Appsに対して無料枠が用意されています。毎月なんと以下のリソース量まで無料で使うことができます。

  • 180,000 vCPU秒
  • 360,000 GiB秒

これにより、ちょっとしたアプリやマイクロサービスなら、完全無料で運用することも可能です。「ちょっと試してみたい」「小さなサービスを立ち上げたい」という方にとって、非常に始めやすいサービスとなっています。

Container Apps 環境の役割

Container Apps 環境(Environment)は、複数のアプリ(Container App)をネットワーク的・セキュリティ的にまとめる単位です。

つまり、「アプリそのもの」ではなく、その土台・入れ物として重要な役割を持つのが「Container Apps 環境」です。

Container Apps の環境は、次の3つの主な役割を持っています。

① 仮想ネットワークの共有

環境内のContainer Appは、同じ仮想ネットワーク(VNet)に参加することができます。これにより、アプリ間の内部通信が可能になり、API同士の連携やバックエンドとフロントエンドの安全なやり取りなど、セキュアでスムーズな構成が実現できます。

② ログや監視の一元化

環境ごとに Application Insights や Log Analytics との連携が可能。すべてのアプリのログやパフォーマンスデータをまとめて収集・分析できるため、運用監視の効率化障害対応の迅速化に役立ちます。

③ 分離・管理単位としての利用

「開発」「検証」「本番」など、用途に応じて環境を分けることで、アプリ同士の設定やネットワーク、セキュリティを分離できます。これにより、本番環境への影響を防ぎつつ、柔軟な運用が可能になります。

実務で Azure Container Apps を使いこなせるようになると、クラウドインフラやマイクロサービス開発の領域でより高度な案件にも携われるようになります。
実際、こうしたスキルが評価され、キャリアアップや年収アップに繋がるケースも増えています。

年収アップが見込めるIT転職エージェントはこちらもご確認ください

Container Appsのデプロイ手順を解説

1.  dockerイメージを作成する

次のコマンドでhello-world-appフォルダを作成し、作成したフォルダの階層に移動する。

mkdir hello-world-app
cd hello-world-app

階層が移動したことを確認したら、次のコマンドでindex.htmlファイルを作成します。

cat <<EOF > index.html
<!DOCTYPE html>
<html>
<head><title>Hello</title></head>
<body>
  <h1>Hello World from ACR!</h1>
</body>
</html>
EOF

合わせて以下のコマンドでDockerfileも作成しましょう。

cat <<EOF > Dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EOF

Docerfileまで作成が完了したら、次のコマンドで dockerファイルをビルドします。

docker build -t hello-world-app .

画像のように出力されていれば成功です。

Screenshot

ここでエラーが出る場合は、Dockerアプリを起動して再度実行してください。

Docerがインストールされていない場合は、インストールを行ってください。

2. Azure にログイン

Azure CLIがインストールされているか確認のため「az version 」でバージョン確認をする。

az version

下記コマンドでazure環境にログインする。

az login

3. リソースグループを作成

下記コマンドでAIT-container-app-create-rg という名前のリソースグループを東京リージョンに作成します。(リージョンと名前は任意の値に変更してもよい)

az group create --name AIT-container-app-create-rg --location japaneast

コマンド実行後にリソースグループが作成されたことを確認する。

4. コンテナーレジストリにdockerイメージをアップロード

下記コマンドで、acr(作成済みのコンテナーレジストリ)にログインします。

az acr login --name aitforcontainerappsacr

「Login Succeeded」が出力されていればログイン成功です。

5. イメージにタグをつけて ACR にプッシュ

次のコマンドで、dockerイメージにタグをつけて、コンテナーレジストリにイメージをプッシュします。

# イメージに ACR 用のタグを付ける
docker tag hello-world-app aitforcontainerappsacr.azurecr.io/hello-world-app:1.0

# ACR(コンテナーレジストリ) にプッシュ
docker push aitforcontainerappsacr.azurecr.io/hello-world-app:1.0

aitforcontainerappsacr.azurecr.io の部分は、Azureポータルで画像の部分をコピーし、貼り付けてください。

プッシュコマンドまで実行したらコンテナーレジストリのリポジトリにhello-world-appがアップロードされていることを確認します。

6. Container Apps 環境を作成

az containerapp env create \
  --name AIT-container-env \
  --resource-group AIT-container-app-create-rg \
  --location japaneast

先ほど作成したリソースグループ内に、「AIT-container-env」という名前のContainer Apps 環境を作成します。

数分待って、「Container Apps environment created」と表示されたらContainer Apps 環境が作成されたことを確認します。

7. Container Appsを作成

ACR のユーザー名とパスワードを以下で取得します。

az acr credential show --name aitforcontainerappsacr

下記コマンドで、コンテナーアプリを作成します。取得したユーザー名とパスワードは、直前のコマンドで取得したものを入力してください。

az containerapp create \
  --name ait-ca01 \ #作成するコンテナーアプリの名前
  --resource-group AIT-container-app-create-rg \
  --environment AIT-container-env \
  --image aitforcontainerappsacr.azurecr.io/hello-world-app:1.0 \
  --target-port 80 \
  --ingress external \
  --registry-server aitforcontainerappsacr.azurecr.io \
  --registry-username <username> \
  --registry-password <password>

コンテナーアプリが作成できたら、Azureポータルでコンテナーアプリのページを開きます。
アプリケーションURLに記載されているURLをクリックします。

別タブが開かれるため下記のように「Hello World from ACR!」が表示されることを確認します。
表示されていればコンテナーアプリは正しく作成されています。

システム割り当てマネージドIDを使用してコンテナーアプリを作成

ユーザー名とパスワードを利用して、コンテナーレジストリからの情報を取得し、コンテナーアプリを作成する方法について解説しました。

実際のプロジェクトでは、セキュリティ強化のため、ユーザー名とパスワードを使用する方法ではなく、システム割り当てマネージドIDを使用することが一般的です。

そこで、システム割り当てマネージドIDを使用したデプロイ方法を最後に解説します。

1. ユーザー割り当てマネージドIDを作成

下記コマンドでマネージドIDを作成します。

az identity create \
  --name ait-containerapp-identity \
  --resource-group AIT-container-app-create-rg \
  --location japaneast

2. マネージドIDに ACR Pull 権限を付与

1. で作成したマネージドIDにコンテナーレジストリ(ACR)のPull権限を付与します。
<identity-client-id>の部分は、マネージドID作成時の結果出力欄に記載されているため、その値をコピペする。

az role assignment create \
  --assignee <identity-client-id> \
  --scope $(az acr show --name aitforcontainerappsacr --query id --output tsv) \
  --role AcrPull

client-id は以下のコマンドでも確認可能です。

az identity show \
  --name ait-containerapp-identity \
  --resource-group AIT-container-app-create-rg \
  --query clientId \
  --output tsv

Container App 作成時にマネージドIDを使用する

マネージドIDを使用して、Container App を作成する際は以下のコマンドを使用します。

az containerapp create \
  --name ait-ca02 \
  --resource-group AIT-container-app-create-rg \
  --environment AIT-container-env \
  --image aitforcontainerappsacr.azurecr.io/hello-world-app:1.0 \
  --target-port 80 \
  --ingress external \
  --registry-server aitforcontainerappsacr.azurecr.io \
  --registry-identity <マネージドIDのリソースID>

<マネージドIDのリソースID>は以下のコマンドで確認できます。

az identity show \
  --name ait-containerapp-identity \
  --resource-group AIT-container-app-create-rg \
  --query id \
  --output tsv

このコマンドで出力される結果が<マネージドIDのリソースID>です。

まとめ

Azure Container Apps は、Kubernetes のような高度な設定を必要とせず、コンテナーアプリケーションをスムーズにデプロイ・実行できる非常に強力なサービスです。特に、コンテナーレジストリと連携することで、ビルドしたアプリケーションをそのままクラウドに展開し、自動スケーリングやバージョン管理といったクラウドネイティブな機能をすぐに活用できます。

これからクラウド上でのアプリ運用を考えている方や、より効率的なデプロイ環境を求めている方にとって、Azure Container Apps は非常に魅力的な選択肢になるはずです。

プロフィール
tanat

「株式会社あいてぃ」に所属。
主にAWSとAzureなどのクラウドインフラを管理するクラウドエンジニアとして活動中。
スマホアプリやフロント部分の構築も可能なフルスタックエンジニアとして活躍できるように日々勉強中です。

tanatをフォローする
UncategorizedAzure
tanatをフォローする

コメント

タイトルとURLをコピーしました
function cocoon_custom_code_copy_script() { ?>   } add_action('wp_footer', 'cocoon_custom_code_copy_script');