専用エージェント プールで 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 でプールを作成する
次の例では、ネットワーク myvnet の mysubnet サブネットでエージェント プールが作成されます。
# 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 タスクのチュートリアル シリーズをご覧ください。