専用エージェント プールで ACR タスクを実行する

専用のコンピューティング環境で Azure Container Registry タスクを実行できるよう、Azure 管理 VM プール ("エージェント プール") を設定します。 レジストリで 1 つまたは複数のプールを構成したら、サービスの既定のコンピューティング環境の代わりにタスクを実行するプールを選択できます。

エージェント プールからは次のものが与えられます。

  • 仮想ネットワーク サポート - エージェント プールを Azure VNet に割り当てます。コンテナー レジストリ、キー コンテナー、またはストレージなど、VNet のリソースへのアクセスを提供します。
  • 必要に応じた拡大縮小 - 大量の計算処理能力を要求するタスクのためにエージェント プールでインスタンスの数を増やしたり、ゼロに縮小したりします。 課金はプール割り当てに基づきます。 詳細については、価格のページを参照してください。
  • 柔軟なオプション - タスク ワークロードのニーズに合わせ、さまざまなプール レベルやスケール オプションから選択します。
  • Azure 管理 - タスク プールには Azure によってパッチが適用され、保守管理されます。割当が予約され、個々の VM を保守管理する必要がありません。

この機能は、Premium コンテナー レジストリ サービス レベルで使用できます。 レジストリ サービスのレベルと制限については、「Azure Container Registry SKU」をご覧ください。

重要

この機能は現在プレビュー段階であり、一定の制限事項が適用されます。 プレビュー版は、追加使用条件に同意することを条件に使用できます。 この機能の一部の側面は、一般公開 (GA) 前に変更される可能性があります。

プレビューの制限事項

  • タスク エージェント プールでは現在、Linux ノードがサポートされています。 Windows ノードは現在、サポートされていません。
  • 次のリージョンでは、タスク エージェント プールをプレビューでご利用いただけます。米国西部 2、米国中南部、米国東部 2、米国東部、米国中部、西ヨーロッパ、北ヨーロッパ、カナダ中部、東アジア、スイス北部、USGov アリゾナ、USGov テキサス、USGov バージニア。
  • 各レジストリについて、既定の合計 vCPU (コア) クォータは、Standard エージェント プールの場合はすべて 16 で、分離エージェント プールの場合は 0 です。 追加で割り当てる場合、サポート リクエストを開始します。

前提条件

  • この記事の Azure CLI 手順を使用するには、Azure CLI バージョン 2.3.1 以降が必要です。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 または、Azure Cloud Shell で実行します。
  • コンテナー レジストリがまだない場合は、プレビュー リージョンで 1 つ作成します (Premium レベルが必要)。

プール レベル

エージェント プール レベルからは、プール内のインスタンスごとに次のリソースが提供されます。

レベル CPU メモリ (GB)
S1 standard 2 3
S2 standard 4 8
S3 standard 8 16
I6 分離 64 216

タスク エージェント プールの作成と管理

既定のレジストリを設定する (省略可能)

続く Azure CLI コマンドを簡略化するには、az config コマンドを実行して既定のレジストリを設定します。

az config set defaults.acr=<registryName>

次の例では、既定のレジストリを設定していることを前提としています。 設定していない場合、各 az acr コマンドで --registry <registryName> パラメーターを渡します。

エージェント プールの作成

az acr agentpool create コマンドを使用し、エージェント プールを作成します。 次の例では、レベル S2 プール (インスタンスあたり 4 CPU) が作成されます。 既定では、プールにはインスタンスが 1 つ含まれます。

az acr agentpool create \
    --registry MyRegistry \
    --name myagentpool \
    --tier S2

Note

エージェント プールとその他のプール管理操作の作成完了には数分かかります。

プールのスケーリング

az acr agentpool update コマンドでプール サイズを拡大縮小します。 次の例では、プールが 2 インスタンスに拡大されます。 0 インスタンスに縮小できます。

az acr agentpool update \
    --registry MyRegistry \
    --name myagentpool \
    --count 2

仮想ネットワーク内にプールを作成する

ファイアウォール規則を追加する

タスク エージェント プールでは、次の Azure サービスへのアクセスが要求されます。 次のファイアウォール規則を既存のネットワーク セキュリティ グループまたはユーザー定義の経路に追加する必要があります。

Direction Protocol source 発信元ポート 宛先 宛先ポート 番号 解説
送信 TCP VirtualNetwork Any AzureKeyVault 443 既定
送信 TCP VirtualNetwork Any 記憶域 443 既定
送信 TCP VirtualNetwork Any EventHub 443 既定
送信 TCP VirtualNetwork Any AzureActiveDirectory 443 既定
送信 TCP VirtualNetwork Any AzureMonitor 443、12000 既定値 ポート 12000 は、診断に使用される一意のポートです

Note

公共のインターネットからの追加リソースがタスクで必要になる場合、それに該当する規則を追加します。 たとえば、Docker Hub から基本イメージをプルするか、NuGet パッケージを復元する Docker ビルド タスクを実行する場合、こうした規則が必要になります。

MCR を使用してデプロイを行っているお客様は、MCR/MAR ファイアウォール規則に関するページを参照できます。

高度なネットワーク構成

標準のファイアウォール/NSG (ネットワーク セキュリティ グループ) のルールが寛容すぎると見なされ、送信接続に対してより細かい制御が必要な場合は、次の方法を検討してください。

  • エージェント プール サブネット上のサービス エンドポイントを有効にします。 これにより、セキュリティで保護されたネットワーク体制を維持しながら、サービスの依存関係に対するエージェント プールのアクセスが許可されます。
  • 送信ファイアウォール/NSG のルールは引き続き必要であることに注意することが重要です。 これらのルールにより、ソース IP をパブリックからプライベートに切り替える仮想ネットワークの機能が容易になります。これは、サービス エンドポイントの有効化を超える追加の手順です。

サービス エンドポイントの詳細については、こちらに記載されています。

少なくとも、次のサービス エンドポイントが必要です

  • Microsoft.AzureActiveDirectory
  • Microsoft.ContainerRegistry
  • Microsoft.EventHub
  • Microsoft.KeyVault
  • Microsoft.Storage (または geo を考慮した対応するストレージ リージョン)

Note

現在、Azure Monitor のサービス エンドポイントは存在しません。 Azure Monitor の送信トラフィックが構成されていない場合、エージェント プールは診断ログを生成できませんが、引き続き正常に動作しているように見える可能性があります。 この場合、ACR は発生した問題を完全にトラブルシューティングできないため、ネットワーク管理者がネットワーク構成を計画する際にこの事実を考慮することが重要です。

また、すべての ACR タスクには、より一般的なユース ケースの一部のイメージが事前にキャッシュされていることに注意することが重要です。 タスクは一度に 1 つのバージョンのみをキャッシュします。つまり、完全にタグ付けされたイメージ参照が使用されている場合、ビルド エージェントはイメージのプルを試みます。 たとえば、一般的なユース ケースは cmd: mcr.microsoft.com/acr/acr-cli:<tag> です。 ただし、事前にキャッシュされたバージョンは頻繁に更新されるため、マシン上の実際のバージョンの方が大きくなる可能性があります。 この場合、ネットワーク構成では、ターゲット レジストリ ホスト (上記の例では mcr.microsoft.com) への送信トラフィックのルートを構成する必要があります。 他の外部パブリック レジストリ (docker.io、quay.io、ghcr.io など) にも同じルールが適用されます。

VNet でプールを作成する

次の例では、ネットワーク myvnetmysubnet サブネットでエージェント プールが作成されます。

# Get the subnet ID
subnetId=$(az network vnet subnet show \
        --resource-group myresourcegroup \
        --vnet-name myvnet \
        --name mysubnetname \
        --query id --output tsv)

az acr agentpool create \
    --registry MyRegistry \
    --name myagentpool \
    --tier S2 \
    --subnet-id $subnetId

エージェント プールでタスクを実行する

次の例からは、タスクを待ち行列に入れるときのエージェント プールの指定方法がわかります。

Note

ACR タスクでエージェント プールを使用するには、プールにインスタンスが少なくとも 1 つは確実に含まれるようにします。

クイック タスク

az acr build コマンドを使用してエージェント プールでクイック タスクを待ち行列に入れ、--agent-pool パラメーターを渡します。

az acr build \
    --registry MyRegistry \
    --agent-pool myagentpool \
    --image myimage:mytag \
    --file Dockerfile \
    https://github.com/Azure-Samples/acr-build-helloworld-node.git#main

自動的にトリガーされたタスク

たとえば、az acr task create を使用してエージェント プールでタスクの日程を作成し、--agent-pool パラメーターを渡します。

az acr task create \
    --registry MyRegistry \
    --name mytask \
    --agent-pool myagentpool \
    --image myimage:mytag \
    --schedule "0 21 * * *" \
    --file Dockerfile \
    --context https://github.com/Azure-Samples/acr-build-helloworld-node.git#main \
    --commit-trigger-enabled false

タスク セットアップを確認するには、az acr task run を実行します。

az acr task run \
    --registry MyRegistry \
    --name mytask

プールの状態を照会する

エージェント プールで現在スケジュールされている実行数を確認するには、az acr agentpool show を実行します。

az acr agentpool show \
    --registry MyRegistry \
    --name myagentpool \
    --queue-count

次のステップ

クラウドのコンテナー イメージのビルドや保守管理について例がもっと必要であれば、ACR タスクのチュートリアル シリーズをご覧ください。