Azure Container Instances
サーバーを管理せずに ACI を使用してコンテナー化されたアプリケーションを数秒で起動し、環境変数とボリューム マウントを構成して、ACI の課金について理解します。
「Azure Container Instances」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
Azure Container Instances とは
Azure Container Instances (ACI) は、サーバーやオーケストレーターを管理せずに Azure でコンテナー化されたワークロードを実行する最も高速な方法です。コンテナー イメージを指定すると、Azure は共有されたマルチテナント インフラストラクチャ上で数秒以内にコンテナーを実行します。ACI は、短時間のタスク、バッチ ジョブ、ビルド エージェント、イベント駆動型ワークロードに適しています。このような用途では、完全な Kubernetes クラスターを起動するとオーバーヘッドが大きくなります。
コンテナー インスタンスの作成
単一の az container create コマンドで ACI コンテナーを起動できます。イメージ、リソース グループ、CPU、メモリを指定してください。ACI はイメージを取得してリソースを割り当て、通常 5~10 秒以内にコンテナーを起動します。DNS 名ラベルを割り当てると、各コンテナー インスタンスに一意の 完全修飾ドメイン名 (FQDN) が付与され、インターネットからすぐにアクセスできるようになります。
# Run an Nginx container accessible from the internet
az container create \
--name my-nginx \
--resource-group MyRG \
--image nginx:latest \
--cpu 1 \
--memory 1 \
--dns-name-label my-nginx-demo \
--ports 80
# Access at: http://my-nginx-demo.<region>.azurecontainer.io環境変数とセキュアな値
作成時に指定する 環境変数 を使用して、ACI コンテナーに構成を渡します。API キーやパスワードなどの機密性の高い値には、セキュアな環境変数 を使用してください。これらの値はデプロイ後に Azure portal や CLI の出力に表示されないため、ログや監査証跡への意図しない露出を防げます。セキュアな値も、実行時には通常の環境変数としてコンテナー内からアクセスできます。
# Pass regular and secure environment variables
az container create \
--name my-app \
--resource-group MyRG \
--image mycontainerregistry.azurecr.io/myapp:v1.0 \
--environment-variables APP_ENV=production \
--secure-environment-variables \
DATABASE_PASSWORD='super-secret-password' \
API_KEY='my-api-key'
# View logs from the running container
az container logs --name my-app --resource-group MyRGACI の課金とリソース割り当て
ACI は、割り当てた CPU コア数とメモリ (GB) に基づいて秒単位で課金され、最低課金期間はありません。料金が発生するのはコンテナーの実行中だけで、コンテナーが停止した時点で課金も停止します。そのため、ACI は短時間のワークロードに非常に適しています。サポートされている組み合わせで、コンテナー グループごとに 0.1~4 CPU コア、0.1~16 GB のメモリを割り当てられます。
# Small: 0.5 CPU, 0.5 GB memory
az container create --name small-task --resource-group MyRG \
--image my-batch-image:latest --cpu 0.5 --memory 0.5 \
--restart-policy Never # Don't restart after completion
# Large: 4 CPU, 16 GB memory for intensive tasks
az container create --name ml-inference --resource-group MyRG \
--image ml-model:latest --cpu 4 --memory 16再起動ポリシー
ACI では、コンテナー終了後の動作を制御する 3 つの再起動ポリシーがサポートされています。Always (既定値) は、コンテナーが終了するたびに再起動します。長時間稼働するサービスに適しています。Never はコンテナーを 1 回だけ実行し、終了状態のままにします。バッチ ジョブに適しています。OnFailure は、コンテナーがゼロ以外の終了コードで終了した場合にのみ再起動します。エラー時に再試行するパターンに役立ちます。
# Batch job: run once, never restart
az container create \
--name data-processor \
--resource-group MyRG \
--image my-batch-image:latest \
--restart-policy Never \
--environment-variables BATCH_DATE=2025-01-01
# Check the container's final state
az container show \
--name data-processor \
--resource-group MyRG \
--query '{state:instanceView.state, exitCode:instanceView.currentState.exitCode}'コンテナー グループ: 複数コンテナーのデプロイ
コンテナー グループは、ライフサイクル、ネットワーク、ストレージを共有するコンテナーの集合で、Kubernetes の Pod に似ています。同じグループ内のコンテナーはローカル IP アドレスとポート名前空間を共有するため、localhost を介して通信できます。一般的な構成では、YAML または ARM テンプレートで、メインのアプリケーション コンテナーと、同じグループ内のサイドカー コンテナー (ログ エージェントやプロキシなど) を定義します。
# multi-container.yaml
apiVersion: '2021-09-01'
location: eastus
name: my-container-group
properties:
containers:
- name: app
properties:
image: myapp:v1.0
ports: [{port: 80}]
resources: {requests: {cpu: 1, memoryInGb: 1}}
- name: log-forwarder
properties:
image: fluent-bit:latest
resources: {requests: {cpu: 0.5, memoryInGb: 0.5}}
osType: Linux
restartPolicy: Always
type: Microsoft.ContainerInstance/containerGroups
# Deploy from YAML
# az container create --resource-group MyRG --file multi-container.yamlボリューム マウント: Azure Files の統合
ACI コンテナーは既定ではステートレスです。コンテナーのファイル システムに書き込んだデータは、コンテナーの再起動時に失われます。Azure Files 共有をボリュームとしてマウントすると、コンテナーの再起動後もデータを保持したり、同じグループ内のコンテナー間でデータを共有したりできます。コンテナー インスタンスの作成時に、ストレージ アカウント名、キー、ファイル共有名を指定してください。
# Mount an Azure Files share for persistent storage
az container create \
--name stateful-app \
--resource-group MyRG \
--image myapp:v1.0 \
--azure-file-volume-account-name mystorageaccount \
--azure-file-volume-account-key '<storage-account-key>' \
--azure-file-volume-share-name myfileshare \
--azure-file-volume-mount-path /data
# Data written to /data persists in the Azure Files shareGPU コンテナー インスタンス
ACI は、ML 推論、動画処理、科学計算のワークロード向けに GPU コンテナー インスタンス (K80、V100) をサポートしています。GPU インスタンスは一部のリージョンで利用でき、Linux コンテナーが必要です。GPU 単位かつ秒単位で課金されるため、GPU コンテナーを起動してモデルを実行し、すぐに削除するバースト推論のシナリオで経済的です。24 時間 365 日稼働させる専用 GPU VM よりも大幅に低コストです。
# Create a GPU-enabled container instance
az container create \
--name gpu-inference \
--resource-group MyRG \
--image my-ml-model:latest \
--gpu-count 1 \
--gpu-sku V100 \
--cpu 4 \
--memory 16 \
--os-type Linux仮想ネットワークでの ACI
ACI コンテナー グループをVNet 内の専用サブネットにデプロイすると、プライベート IP アドレスを付与し、インターネットに公開せずに他の VNet 接続リソース (データベースや VM) にアクセスできるようになります。VNet 統合 ACI には、専用の委任済みサブネット (Microsoft.ContainerInstance/containerGroups に委任) が必要で、パブリック IP の割り当てはサポートされません。
# Create an ACI container in a VNet
az container create \
--name private-task \
--resource-group MyRG \
--image myapp:v1.0 \
--vnet MyVNet \
--subnet ContainerSubnet \
--restart-policy Never
# The container gets a private IP from the subnet CIDR
# It can reach VNet resources (SQL, Redis, VMs) on private IPs仮想 Kubelet ノードとしての ACI
ACI は、オープンソース プロジェクトである Virtual Kubelet を介して、AKS と仮想ノードとして統合できます。AKS クラスターで VM ノードの容量を超える突発的な需要が発生すると、Kubernetes は Pod を仮想 ACI ノードにスケジュールし、実際の ACI コンテナー インスタンスを起動できます。これにより、追加の VM ノードを事前にプロビジョニングせずに無制限のバースト スケーリングを実現でき、バースト期間中の ACI コンピューティングに対してのみ料金を支払います。
# Enable virtual nodes on an AKS cluster
az aks enable-addons \
--name myAKSCluster \
--resource-group MyRG \
--addons virtual-node \
--subnet-name VirtualNodeSubnet
# Schedule a burst pod on ACI via node selector
# spec:
# nodeSelector:
# kubernetes.io/role: agent
# beta.kubernetes.io/os: linux
# type: virtual-kubelet
# tolerations:
# - key: virtual-kubelet.io/provider
# operator: ExistsACI、AKS、App Service の使い分け
短時間のタスク、バッチ ジョブ、CI ビルド エージェント、Kubernetes のオーバーヘッドが不要な単発のコンテナーには ACI を選択してください。サービス検出、正常性チェック、ローリング アップデート、クラスター ネットワークを必要とする、長時間稼働する複数コンテナーのマイクロサービスには AKS を選択してください。コンテナー ネットワークを自分で管理せずに、デプロイ スロット、マネージド証明書、組み込み認証などの PaaS の利便性を利用したい場合は、App Service を選択してください。
クイックチェック
このレッスンで学んだ Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、Azure Container Instances がサーバー管理なしで数秒以内にコンテナーを実行し、CPU とメモリの使用量に応じて秒単位で課金されること、コンテナー グループによって複数のコンテナーが Kubernetes の Pod のようにネットワークとストレージを共有できること、そして再起動ポリシー (Always、Never、OnFailure) によって終了後のコンテナー ライフサイクルを制御できることを学びました。次は Azure の Kubernetes 概念について学びます。
よくある質問
「Azure Container Instances」レッスンは無料ですか?
はい。「Azure Container Instances」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「Azure Container Instances」で何を学びますか?
サーバーを管理せずに ACI を使用してコンテナー化されたアプリケーションを数秒で起動し、環境変数とボリューム マウントを構成して、ACI の課金について理解します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Azure Container Instances」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Azure Container Registry
- Azure Container Instances
- Azure 向け Kubernetes の概念
- AKS へのワークロードのデプロイ