Azure Container Apps環境に仮想ネットワークを提供する

次の例では、既存の仮想ネットワーク (VNet) に Container Apps 環境を作成する方法について説明します。

まず、Azure ポータルにサインインします。

コンテナー アプリの作成

コンテナー アプリを作成するには、Azure ポータルのホーム ページから開始します。

  1. 上部の検索バーで「コンテナー アプリ」を検索します。
  2. 検索結果でコンテナー アプリを選択します。
  3. [作成] ボタンを選択します。

[基本] タブ

[基本] タブで、次の操作を行います。

  1. Project details セクションに次の値を入力します。

    設定 アクション
    サブスクリプション Azure サブスクリプションを選択します。
    リソースグループ [新規作成] を選択し、「my-container-apps」と入力します。
    コンテナー アプリ名 my-container-app」と入力します。
    デプロイ ソース [コンテナー イメージ] を選択します。

環境の作成

次に、コンテナー アプリの環境を作成します。

  1. 適切なリージョンを選択します。

    設定 価値
    リージョン [米国中部] を選択します。
  2. [ Container Apps 環境 ] フィールドで、[ 新しい環境の作成 ] リンクを選択します。

  3. [Container Apps 環境の作成] ページの [基本] タブで、次の値を入力します。

    設定 価値
    環境名 my-environment」と入力します。
    ゾーン冗長性 [無効] を選択します
  4. Monitoring タブを選択して、Log Analytics ワークスペースを作成します。

  5. Azure Log AnalyticsLogs Destination として選択します。

  6. Log Analytics ワークスペース フィールドの 新規作成 リンクを選択し、次の値を入力します。

    設定 価値
    名前 my-container-apps-logs」と入力します。

    [場所] フィールドには、[米国中部] があらかじめ入力されています。

  7. [OK] を選択します。

Container Apps 環境用にプライベート DNS をデプロイするオプションも使用できます。 詳細については、「Azure プライベート DNS ゾーンの作成と構成を参照してください。

仮想ネットワークの作成

コンテナー アプリで VNet を使用するには、VNet には専用サブネットが必要です。既定のワークロード プロファイル環境を使用する場合は /27 以上の CIDR 範囲が、従来の従量課金のみの環境を使用する場合は /23 以上の CIDR 範囲が必要です。 サブネットのサイズ設定の詳細については、「ネットワーク アーキテクチャの概要」を参照してください。

  1. [ネットワーク] タブを選択します。

  2. [自分の仮想ネットワークを使用する] の横にある [はい] を選択します。

  3. [ 仮想ネットワーク ] ボックスの横にある [ 新規作成 ] リンクを選択し、次の値を入力します。

    設定 価値
    名前 my-custom-vnet」と入力します。
  4. [OK] ボタンを選択します。

  5. [サブネット] ボックスの横にある [新規作成] リンクを選択し、次の値を入力します。

    設定 価値
    サブネット名 インフラストラクチャ サブネットを入力します。
    仮想ネットワークアドレスブロック 既定値のままにします。
    サブネット アドレス ブロック 既定値のままにします。
  6. [OK] ボタンを選択します。

  7. [仮想 IP] で、外部環境の場合は [外部] を選択し、内部環境の場合は [内部] を選択します。

  8. [作成] を選択します

コンテナー アプリをデプロイする

  1. ページの下部にある [ 確認と作成] を選択します。

    • エラーが見つからない場合は、[ 作成 ] ボタンを使用できます。
    • エラーがある場合、エラーを含むタブは赤いドットでマークされます。 これらの各タブに移動します。 エラーを含むフィールドは赤で強調表示されるか、赤い X でマークされます。すべてのエラーを修正し、[ 確認と作成 ] をもう一度選択します。
  2. [作成] を選択します

    "デプロイが進行中です" というメッセージを含むページが表示されます。 デプロイが正常に完了すると、 デプロイが完了 したというメッセージが表示されます。

デプロイメントを確認する

  1. [リソースに移動] を選択して、新しいコンテナー アプリを表示します。

  2. [ アプリケーション URL] の横にあるリンクを選択して、アプリケーションを表示します。

前提条件

  • アクティブなサブスクリプションを持つAzureアカウント。
  • Azure CLI バージョン 2.28.0 以降をインストールします。

セットアップ

CLI からAzureにサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。

az login

最新バージョンの CLI を実行していることを確認するには、upgrade コマンドを実行します。

az upgrade

次に、CLI のAzure Container Apps拡張機能をインストールまたは更新します。

powerShell の az containerapp モジュールから Azure CLI またはコマンドレットで Az.App コマンドを実行するときに、パラメーターの不足に関するエラーが発生した場合は、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。

az extension add --name containerapp --upgrade

2024 年 5 月以降、Azure CLI拡張機能では既定でプレビュー機能が有効にされなくなります。 Container Apps のプレビュー機能にアクセスするには、--allow-preview true を使用して Container Apps 拡張機能をインストールします。

az extension add --name containerapp --upgrade --allow-preview true

現在の拡張機能またはモジュールがインストールされたら、Microsoft.AppMicrosoft.OperationalInsights 名前空間を登録します。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

環境変数の設定

以下の環境変数を設定します。 <placeholders> を自分の値に置き換えてください。

RESOURCE_GROUP="<new-resource-group>"
LOCATION="<location>"
CONTAINERAPPS_ENVIRONMENT="<containerapps-environment>"

Azure リソース グループを作成する

コンテナー アプリのデプロイに関連するサービスを整理するためのリソース グループを作成します。

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

環境の作成

Azure Container Appsの環境では、コンテナー アプリのグループの周囲にセキュリティで保護された境界が作成されます。 同じ環境にデプロイされた Container Apps は、同じ仮想ネットワークにデプロイされ、同じLog Analytics ワークスペースにログを書き込みます。

Microsoft.ContainerService プロバイダーを登録します。

az provider register --namespace Microsoft.ContainerService

VNet 名を保持する変数を宣言します。

VNET_NAME="my-custom-vnet"

ここで、Container Apps 環境に関連付ける仮想ネットワークを作成します。 仮想ネットワークには、環境のデプロイに使用できるサブネットが必要です。

az network vnet create \
  --resource-group $RESOURCE_GROUP \
  --name $VNET_NAME \
  --location $LOCATION \
  --address-prefix 10.0.0.0/16
az network vnet subnet create \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name infrastructure-subnet \
  --address-prefixes 10.0.0.0/23

ワークロード プロファイル環境を使用する場合は、サブネットを Microsoft.App/environments に委任するように VNet を更新する必要があります。 従量課金専用環境を使用する場合は、サブネットを委任しないでください。

az network vnet subnet update \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name infrastructure-subnet \
  --delegations Microsoft.App/environments

仮想ネットワークが作成されたら、インフラストラクチャ サブネット ID のクエリを実行できるようになります。

INFRASTRUCTURE_SUBNET=`az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name $VNET_NAME --name infrastructure-subnet --query "id" -o tsv | tr -d '[:space:]'`

最後に、カスタム VNet を使用して Container Apps 環境を作成します。

環境を作成するために、次のコマンドを実行します。 内部環境を作成するには、--internal-only を追加します。

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --infrastructure-subnet-resource-id $INFRASTRUCTURE_SUBNET

次の表では、containerapp env create で使用されるパラメーターについて説明します。

パラメーター 説明
name コンテナー アプリ環境の名前。
resource-group リソース グループの名前。
logs-workspace-id (省略可能)既存のLog Analytics ワークスペースの ID。 省略すると、ワークスペースが作成されます。
logs-workspace-key Log Analytics クライアント シークレット。 既存のワークスペースを使用する場合は必須です。
location 環境をデプロイするAzureの場所。
infrastructure-subnet-resource-id インフラストラクチャ コンポーネントとユーザー アプリケーション コンテナーのサブネットのリソース ID。
internal-only (省略可能) この環境では、パブリック静的 IP は使用せず、カスタム VNet で使用できる内部 IP アドレスのみが使用されます。 (インフラストラクチャのサブネットリソースIDが必要です。)内部環境を作成した後、各アプリの入力を外部に設定し、仮想ネットワーク内のクライアントがアクセスできるようにします。 詳細については、「 アプリを仮想ネットワークのみに制限する」をご覧ください。

オプションの構成

コンテナー アプリ環境用にプライベート DNS をデプロイし、カスタム ネットワーク IP 範囲を定義するオプションも使用できます。

プライベート DNS を使用したデプロイ

プライベート DNS を使用してコンテナー アプリをデプロイする場合は、次のコマンドを実行します。

まず、識別可能な情報を環境から抽出します。

ENVIRONMENT_DEFAULT_DOMAIN=`az containerapp env show --name ${CONTAINERAPPS_ENVIRONMENT} --resource-group ${RESOURCE_GROUP} --query properties.defaultDomain --out json | tr -d '"'`
ENVIRONMENT_STATIC_IP=`az containerapp env show --name ${CONTAINERAPPS_ENVIRONMENT} --resource-group ${RESOURCE_GROUP} --query properties.staticIp --out json | tr -d '"'`
VNET_ID=`az network vnet show --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --query id --out json | tr -d '"'`

次に、プライベート DNS を設定します。

az network private-dns zone create \
  --resource-group $RESOURCE_GROUP \
  --name $ENVIRONMENT_DEFAULT_DOMAIN
az network private-dns link vnet create \
  --resource-group $RESOURCE_GROUP \
  --name $VNET_NAME \
  --virtual-network $VNET_ID \
  --zone-name $ENVIRONMENT_DEFAULT_DOMAIN -e true
az network private-dns record-set a add-record \
  --resource-group $RESOURCE_GROUP \
  --record-set-name "*" \
  --ipv4-address $ENVIRONMENT_STATIC_IP \
  --zone-name $ENVIRONMENT_DEFAULT_DOMAIN

ネットワーク パラメーター

従来の従量課金のみの環境を使用する場合、 containerapp env createを呼び出すときに定義できるオプションのネットワーク パラメーターが 3 つあります。 これらのオプションは、個別のアドレスの範囲を持つピアリングされた VNet がある場合に使用します。 これらの範囲を明示的に構成すると、Container Apps 環境で使用されるアドレスは、ネットワーク インフラストラクチャ内の他の範囲と競合しなくなります。

これらのパラメーターは、従来の従量課金のみの環境の種類にのみ適用されます。 既定のワークロード プロファイル環境の種類では、これらのパラメーターは必要ありません。

これらの 3 つのプロパティすべてに値を指定するか、いずれも指定しない必要があります。 指定されていない場合、値は自動的に生成されます。

パラメーター 説明
platform-reserved-cidr 環境インフラストラクチャ サービスで内部的に使用されるアドレス範囲。 /23を使用している場合、/12およびの間のサイズである必要があります。
platform-reserved-dns-ip 内部 DNS サーバーに使用される platform-reserved-cidr 範囲の IP アドレス。 このアドレスには、範囲内の最初のアドレス、またはネットワーク アドレスは指定できません。 たとえば、platform-reserved-cidr10.2.0.0/16 に設定されている場合、platform-reserved-dns-ip10.2.0.0 (ネットワーク アドレス)、または 10.2.0.1 (インフラストラクチャはこの IP の使用を予約します) に設定することはできません。 この場合、DNS に使用できる最初の IP は 10.2.0.2 になります。
docker-bridge-cidr Docker ブリッジ ネットワークに割り当てられたアドレス範囲。 この範囲は、/28 から /12 までのサイズである必要があります。
  • platform-reserved-cidrアドレス範囲とdocker-bridge-cidrアドレス範囲は、互いに競合したり、指定されたサブネットの範囲と競合したりすることはできません。 さらに、これらの範囲が VNet 内の他のアドレスの範囲と競合しないようにしてください。

  • これらのプロパティが指定されていない場合、範囲の競合を避けるために、VNet のアドレスの範囲に基づいて CLI によって範囲の値が生成されます。

リソースをクリーンアップする

このアプリケーションを引き続き使用しない場合は、my-container-apps リソース グループを削除できます。 これにより、Azure Container Apps インスタンスと関連するすべてのサービスが削除されます。 また、Container Apps サービスによって自動的に作成され、カスタム ネットワーク コンポーネントを含むリソース グループも削除されます。

注意事項

次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 このガイドの範囲外のリソースが指定されたリソース グループに存在する場合は、それらのリソースも削除されます。

az group delete --name $RESOURCE_GROUP

その他のリソース

  • VNet スコープのイングレスを使用するには、DNS を設定する必要があります。

次のステップ