Azure 仮想マシンスケールセットのエージェントAzure virtual machine scale set agents

Azure PipelinesAzure Pipelines

"スケールセットエージェント" と呼ばれる Azure 仮想マシンスケールセットエージェントは、要求に合わせて自動スケールできる自己ホスト型エージェントの一種です。Azure virtual machine scale set agents, hereafter referred to as scale set agents, are a form of self-hosted agents that can be autoscaled to meet your demands. この弾力性によって、専用エージェントを常に実行する必要性が軽減されます。This elasticity reduces your need to run dedicated agents all the time. Microsoft がホストするエージェントとは異なり、エージェントが実行されるマシンのサイズとイメージの柔軟性を高めることができます。Unlike Microsoft-hosted agents, you have flexibility over the size and the image of machines on which agents run.

Microsoft がホストするエージェントを使用する場合は、そのエージェントが提供する機能によって制限されます。スケールセットのエージェントを検討してください。If you like Microsoft-hosted agents but are limited by what they offer, you should consider scale set agents. 次に例をいくつか示します。Here are some examples:

  • ネイティブの Microsoft ホストエージェントで提供されるものよりも多くのメモリ、プロセッサ、ストレージ、または IO が必要です。You need more memory, more processor, more storage, or more IO than what we offer in native Microsoft-hosted agents.
  • Machine learning の特定の命令セットを含む NCv2 VM が必要です。You need NCv2 VM with particular instruction sets for machine learning.
  • 受信接続を使用せずにプライベート VNET 内のプライベート Azure App Service にデプロイする必要があります。You need to deploy to a private Azure App Service in a private VNET with no inbound connectivity.
  • Microsoft がホストするエージェントがサーバーと通信できるように、特定の IP アドレスに対して企業のファイアウォールを開く必要があります。You need to open corporate firewall to specific IP addresses so that Microsoft-hosted agents can communicate with your servers.
  • エージェントコンピューターのネットワーク接続を制限し、承認済みサイトにのみ接続できるようにする必要があります。You need to restrict network connectivity of agent machines and allow them to reach only approved sites.
  • お客様のニーズを満たすのに十分な数のエージェントを Microsoft から取得することはできません。You can't get enough agents from Microsoft to meet your needs.
  • ジョブは、Microsoft がホストするエージェントのタイムアウトを超えています。Your jobs exceed the Microsoft-hosted agent timeout.
  • Microsoft がホストする並列ジョブを、組織内の個々のプロジェクトまたはチームにパーティション分割することはできません。You can't partition Microsoft-hosted parallel jobs to individual projects or teams in your organization.
  • エージェントで複数の連続したジョブを実行して、増分ソースとマシンレベルのパッケージキャッシュを活用します。You want to run several consecutive jobs on an agent to take advantage of incremental source and machine-level package caches.
  • エージェントがジョブの受け入れを開始する前に、追加の構成またはキャッシュのウォームアップを実行します。You want to run additional configuration or cache warmup before an agent begins accepting jobs.

自己ホスト型エージェントを使用していても、管理を簡略化できるようにするには、スケールセットエージェントを検討する必要があります。If you like self-hosted agents but wish that you could simplify managing them, you should consider scale set agents. 次に例をいくつか示します。Here are some examples:

  • クロックの周囲で専用のエージェントを実行する必要はありません。You don't want to run dedicated agents around the clock. ジョブの実行に使用されていないエージェントコンピューターのプロビジョニングを解除します。You want to de-provision agent machines that are not being used to run jobs.
  • パイプラインで信頼できないコードを実行し、各ジョブの後にエージェントコンピューターを再イメージ化する場合。You run untrusted code in your pipeline and want to re-image agent machines after each job.
  • エージェントの基本イメージを定期的に更新することをお勧めします。You want to simplify periodically updating the base image for your agents.


スケールセットを使用して Mac エージェントを実行することはできません。You cannot run Mac agents using scale sets. この方法では、Windows または Linux エージェントのみを実行できます。You can only run Windows or Linux agents this way.

スケール セットを作成するCreate the scale set

スケールセットエージェントを作成する準備として、まず、Azure portal に仮想マシンスケールセットを作成する必要があります。In preparation for creating scale set agents, you must first create a virtual machine scale set in the Azure portal. 仮想マシンスケールセットは、Azure Pipelines が管理できるように、特定の方法で作成する必要があります。You must create the virtual machine scale set in a certain way so that Azure Pipelines can manage it. 特に、受信パイプラインジョブの数に基づいてスケーリングを実行する方法を Azure Pipelines が判断できるように、Azure の自動スケールを無効にする必要があります。In particular, you must disable Azure's autoscaling so that Azure Pipelines can determine how to perform scaling based on number of incoming pipeline jobs. スケールセットを作成するには、次の手順を使用することをお勧めします。We recommend that you use the following steps to create the scale set.

次の例では、新しいリソースグループと仮想マシンスケールセットが、UbuntuLTS VM イメージを使用して Azure Cloud Shell で作成されます。In the following example, a new resource group and virtual machine scale set are created with Azure Cloud Shell using the UbuntuLTS VM image.


この例では、スケールセットに対して UbuntuLTS VM イメージが使用されます。In this example, the UbuntuLTS VM image is used for the scale set. カスタマイズされた VM イメージがエージェントのベースとして必要な場合は、スケールセットを作成する前にカスタマイズされたイメージを作成します。「 カスタムイメージ、ソフトウェア、またはディスクサイズを使用してスケールセットを作成する」の手順に従ってください。If you require a customized VM image as the basis for your agent, create the customized image before creating the scale set, by following the steps in Create a scale set with custom image, software, or disk size.

  1. Azure Cloud Shellを参照 します。Browse to Azure Cloud Shell at

  2. 次のコマンドを実行して、既定の Azure サブスクリプションを確認します。Run the following command to verify your default Azure subscription.

    az account list -o table

    目的のサブスクリプションが既定値として表示されていない場合は、目的のサブスクリプションを選択します。If your desired subscription isn't listed as the default, select your desired subscription.

    az account set -s <your subscription ID>
  3. 仮想マシンスケールセットのリソースグループを作成します。Create a resource group for your virtual machine scale set.

    az group create \
    --location westus \
    --name vmssagents
  4. リソースグループに仮想マシンスケールセットを作成します。Create a virtual machine scale set in your resource group. この例では、UbuntuLTS VM イメージが指定されています。In this example the UbuntuLTS VM image is specified.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image UbuntuLTS \
    --vm-sku Standard_D2_v3 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer ""

    Azure Pipelines はスケールセットを管理するため、次の設定が必要または推奨されます。Because Azure Pipelines manages the scale set, the following settings are required or recommended:

    • --disable-overprovision -必須--disable-overprovision - required
    • --upgrade-policy-mode manual -必須--upgrade-policy-mode manual - required
    • --load-balancer "" -Azure パイプラインは、スケールセットエージェントプール内のエージェントにジョブをルーティングするためにロードバランサーを必要としませんが、ロードバランサーの構成は、ファイアウォールルールに使用できるスケールセットエージェントの IP アドレスを取得するための1つの方法です。--load-balancer "" - Azure pipelines doesn't require a load balancer to route jobs to the agents in the scale set agent pool, but configuring a load balancer is one way to get an IP address for your scale set agents that you could use for firewall rules. スケールセットエージェントの IP アドレスを取得するもう1つのオプションは、オプションを使用してスケールセットを作成することです --public-ip-addressAnother option for getting an IP address for your scale set agents is to create your scale set using the --public-ip-address options. ロードバランサーまたはパブリック IP アドレスを使用してスケールセットを構成する方法の詳細については、 Virtual Machine Scale Sets のドキュメントaz vmss createを参照してください。For more information about configuring your scale set with a load balancer or public IP address, see the Virtual Machine Scale Sets documentation and az vmss create.
    • --instance-count 2 -この設定は必須ではありませんが、エージェントプールを作成する前に、スケールセットが完全に機能していることを確認する機会が与えられます。--instance-count 2 - this setting is not required, but it will give you an opportunity to verify that the scale set is fully functional before you create an agent pool. 2つの Vm の作成には数分かかることがあります。Creation of the two VMs can take several minutes. 後でエージェントプールを作成すると、Azure Pipelines によってこれら2つの Vm が削除され、新しい Vm が作成されます。Later, when you create the agent pool, Azure Pipelines will delete these two VMs and create new ones.


    Windows で Azure CLI を使用してこのスクリプトを実行する場合は、次のようにを単一引用符で囲む必要があり "" --load-balancer "" ます。 --load-balancer '""'If you run this script using Azure CLI on Windows, you must enclose the "" in --load-balancer "" with single quotes like this: --load-balancer '""'

    VM サイズで 一時 os ディスクがサポートされている場合、一時 os ディスクを有効にするための次のパラメーターは省略可能ですが、仮想マシンの再イメージ化時間を短縮するためにお勧めします。If your VM size supports Ephemeral OS disks, the following parameters to enable Ephemeral OS disks are optional but recommended to improve virtual machine reimage times.

    • --ephemeral-os-disk true
    • --os-disk-caching readonly


    一時 OS ディスクは、すべての VM サイズでサポートされていません。Ephemeral OS disks are not supported on all VM sizes. サポートされている VM サイズの一覧については、「 Azure vm の一時 OS ディスク」を参照してください。For list of supported VM sizes, see Ephemeral OS disks for Azure VMs.

    Azure Marketplace または独自のカスタムイメージから、任意の Linux または Windows イメージを選択して、スケールセットを作成します。Select any Linux or Windows image - either from Azure Marketplace or your own custom image - to create the scale set. イメージに Azure Pipelines エージェントを事前にインストールしないでください。Do not pre-install Azure Pipelines agent in the image. 新しいバーチャルマシンをプロビジョニングするときに、Azure Pipelines によってエージェントが自動的にインストールされます。Azure Pipelines automatically installs the agent as it provisions new virtual machines. 上の例では、プレーンイメージを使用して UbuntuLTS います。In the above example, we used a plain UbuntuLTS image. カスタムイメージを作成して使用する方法については、「 FAQ」を参照してください。For instructions on creating and using a custom image, see FAQ.

    任意の VM SKU とストレージ SKU を選択します。Select any VM SKU and storage SKU.


    ライセンスに関する考慮事項では、Microsoft がホストするイメージの配布を制限します。Licensing considerations limit us from distributing Microsoft-hosted images. これらのイメージをスケールセットのエージェントで使用することはできません。We are unable to provide these images for you to use in your scale set agents. ただし、これらのイメージを生成するために使用する スクリプト はオープンソースです。But, the scripts that we use to generate these images are open source. これらのスクリプトを自由に使用して、独自のカスタムイメージを作成できます。You are free to use these scripts and create your own custom images.

  5. スケールセットを作成したら、Azure portal のスケールセットに移動し、次の設定を確認します。After creating your scale set, navigate to your scale set in the Azure portal and verify the following settings:

    • アップグレードポリシー-手動Upgrade policy - Manual


      この設定は、次の Azure CLI コマンドを実行して確認することもできます。You can also verify this setting by running the following Azure CLI command.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
    • スケール-手動スケールScaling - Manual scale


スケールセットエージェントプールの作成Create the scale set agent pool

  1. Azure DevOps プロジェクトの設定 に移動し、[パイプライン] の下にある [エージェントプール] を選択し、[プールの追加] を選択して新しいエージェントプールを作成します。Navigate to your Azure DevOps Project settings, select Agent pools under Pipelines, and select Add pool to create a new agent pool.



    スケールセットプールは、プロジェクト の設定または 組織の設定 で作成できますが、スケールセットプールを削除する場合は、プロジェクト の設定ではなく、組織の設定 から削除する必要があります。You may create your scale set pool in Project settings or Organization settings, but when you delete a scale set pool, you must delete it from Organization settings, and not Project settings.

  2. プールの種類として [ Azure 仮想マシンスケールセット ] を選択します。Select Azure virtual machine scale set for the pool type. スケールセットが含まれている Azure サブスクリプション を選択し、[ 承認] を選択して、そのサブスクリプションから目的の仮想マシンスケールセットを選択します。Select the Azure subscription that contains the scale set, choose Authorize, and choose the desired virtual machine scale set from that subscription. 既存の サービス接続 がある場合は、サブスクリプションではなく、一覧から選択できます。If you have an existing service connection you can choose that from the list instead of the subscription.


    • スケールセットエージェントプールを構成するには、選択したサブスクリプションに対する 所有 者または ユーザーアクセス管理者 のアクセス許可が必要です。To configure a scale set agent pool, you must have either Owner or User Access Administrator permissions on the selected subscription. これらのアクセス許可のいずれかがあるが、[ 承認] を選択したときにエラーが発生する場合は、「 トラブルシューティング」を参照してください。If you have one of these permissions but get an error when you choose Authorize, see troubleshooting.

    • 現在サポートされているサービス接続は、サービスプリンシパルキーに基づく Azure Resource Manager (ARM) サービス接続のみです。The only service connection currently supported is an Azure Resource Manager (ARM) service connection based on a service principal key. 証明書資格情報または管理対象 Id に基づく ARM サービス接続は失敗します。ARM service connections based on a certificate credential or a Managed Identity will fail. サブスクリプション内の既存のスケールセットを一覧表示しようとすると、次のようなエラーが表示されます。When you attempt to list the existing scale sets in your subscription, you'll see an error like this:

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. そのサブスクリプションから目的の仮想マシンスケールセットを選択します。Choose the desired virtual machine scale set from that subscription.

  4. エージェントプールの名前を指定します。Specify a name for your agent pool.

  5. 次のオプションを構成します。Configure the following options:

    • すべての使用後に仮想マシンを自動的に破棄 する-すべてのジョブに新しい VM インスタンスが使用されます。Automatically tear down virtual machines after every use - A new VM instance is used for every job. ジョブを実行すると、VM がオフラインになり、別のジョブを取得する前に再イメージ化されます。After running a job, the VM will go offline and be reimaged before it picks up another job.
    • 問題のあるエージェントを調査用に保存 する-問題のある エージェント vm を削除するのではなく、トラブルシューティングのために保存するかどうかを指定します。Save an unhealthy agent for investigation - Whether to save unhealthy agent VMs for troubleshooting instead of deleting them.
    • スケールセット内の仮想マシンの最大数 -Azure Pipelines はエージェントの数を自動的にスケールアップしますが、この制限を超えることはありません。Maximum number of virtual machines in the scale set - Azure Pipelines will automatically scale-up the number of agents, but won't exceed this limit.
    • スタンバイ Azure Pipelines に保持するエージェントの数 によって、エージェントの数が自動的にスケールダウンされますが、常にこの多数のエージェントが新しいジョブを実行できるようになります。Number of agents to keep on standby - Azure Pipelines will automatically scale-down the number of agents, but will ensure that there are always this many agents available to run new jobs. これを 0 に設定すると、たとえば、ジョブの少ないボリュームのコストを節約できます。 Azure Pipelines は、ジョブがある場合にのみ VM を起動します。If you set this to 0, for example to conserve cost for a low volume of jobs, Azure Pipelines will start a VM only when it has a job.
    • 過剰なアイドル状態のエージェントを削除するまでの遅延時間 (分) -1 日を通してビルドの負荷の変動に対応するために、過剰なアイドル状態のエージェントを削除する前に、Azure Pipelines はこの時間待機します。Delay in minutes before deleting excess idle agents - To account for the variability in build load throughout the day, Azure Pipelines will wait this long before deleting an excess idle agent.
    • 対話型のテストを実行するように vm を構成 する (WINDOWS Server OS のみ)-windows エージェントは、自動ログオンと対話型 UI を使用して、管理者特権で実行するように構成することも、昇格したアクセス許可で実行するように構成することもできます。Configure VMs to run interactive tests (Windows Server OS Only) - Windows agents can either be configured to run unelevated with autologon and with interactive UI, or they can be configured to run with elevated permissions. このボックスをオンにすると、対話的な UI で管理者特権で実行されません。Check this box to run unelevated with interactive UI. どちらの場合も、エージェントユーザーは Administrators グループのメンバーです。In either case, the agent user is a member of the Administrators group.
  6. 設定が構成されたら、[ 作成 ] を選択してエージェントプールを作成します。When your settings are configured, choose Create to create the agent pool.

スケールセットエージェントプールを使用するUse scale set agent pool

スケールセットエージェントプールの使用は、他のエージェントプールに似ています。Using a scale set agent pool is similar to any other agent pool. これは、従来のビルド、リリース、または YAML パイプラインで使用できます。You can use it in classic build, release, or YAML pipelines. ユーザーのアクセス許可、パイプラインのアクセス許可、承認、およびその他のチェックは、他のエージェントプールと同じように動作します。User permissions, pipeline permissions, approvals, and other checks work the same way as in any other agent pool. 詳細については、「 エージェントプール」を参照してください。For more information, see Agent pools.


Azure portal のスケールセットに直接変更を加える場合は、注意が必要です。Caution must be exercised when making changes directly to the scale set in the Azure portal.

  • Azure portal では、スケールセットの構成設定の多くを変更することはできません。You may not change many of the the scale set configuration settings in the Azure portal. Azure Pipelines によって、スケールセットの構成が更新されます。Azure Pipelines updates the configuration of the scale set. スケールセットに手動で変更を加えると、Azure Pipelines の操作が妨げられる可能性があります。Any manual changes you make to the scale set may interfere with the operation of Azure Pipelines.
  • Azure Pipelines のスケールセットプールを最初に削除せずに、スケールセットの名前を変更したり削除したりすることはできません。You may not rename or delete a scale set without first deleting the scale set pool in Azure Pipelines.

Azure Pipelines がスケールセットを管理する方法How Azure Pipelines manages the scale set

スケールセットエージェントプールが作成されると、Azure Pipelines によってエージェントコンピューターが自動的にスケーリングされます。Once the scale set agent pool is created, Azure Pipelines automatically scales the agent machines.

Azure Pipelines は、プール内のエージェントの状態とスケールセット内の仮想マシンの状態を5分ごとにサンプリングします。Azure Pipelines samples the state of the agents in the pool and virtual machines in the scale set every 5 minutes. スケールアップまたはスケールダウンは、その時点でのアイドル状態のエージェントの数に基づいて決定されます。The decision to scale up or down is based on the number of idle agents at that time. エージェントがオンラインで、パイプラインジョブを実行していない場合、エージェントはアイドル状態と見なされます。An agent is considered idle if it is online and is not running a pipeline job. 次のいずれかの条件が満たされた場合、Azure Pipelines はスケールアップ操作を実行します。Azure Pipelines performs a scale up operation if either of the following conditions is satisfied:

  • アイドル状態のエージェントの数が、指定したスタンバイエージェントの数を下回っていますThe number of idle agents falls below the number of standby agents you specify
  • キューで待機している service pipeline ジョブに対するアイドル状態のエージェントはありませんThere are no idle agents to service pipeline jobs waiting in the queue

これらの条件のいずれかが満たされると、Azure Pipelines によって Vm の数が増えます。If one of these conditions is met, Azure Pipelines grows the number of VMs. スケールアップは、最大プールサイズに対して一定の割合で実行されます。Scaling up is done in increments of a certain percentage of the maximum pool size. 各ステップに対してマシンが作成されるまで20分かかります。Allow 20 minutes for machines to be created for each step.

アイドル状態のエージェントの数が30分以上経過した場合にエージェントをスケールダウンする Azure Pipelines ます ( 超過したエージェントを削除する前に、分単位の遅延 を使用して構成できます)。Azure Pipelines scales down the agents when the number of idle agents exceeds the standby count for more than 30 minutes (configurable using Delay in minutes before deleting excess idle agents).

これらをすべて例にまとめるには、2つのスタンバイエージェントと4つの最大エージェントで構成されたスケールセットエージェントプールについて考えてみます。To put all of this into an example, consider a scale set agent pool that is configured with 2 standby agents and 4 maximum agents. 各使用後に VM を破棄するとします。Let us say that you want to tear down the VM after each use. また、スケールセットで開始する Vm がないとします。Also, let us assume that there are no VMs to start with in the scale set.

  • アイドル状態のエージェントの数は0であり、アイドル状態のエージェントの数がスタンバイの数が2未満であるため、Azure Pipelines スケールアップして2つの Vm をスケールセットに追加します。Since the number of idle agents is 0, and since the number of idle agents is below the standby count of 2, Azure Pipelines scales up and adds two VMs to the scale set. これらのエージェントがオンラインになると、アイドル状態のエージェントが2つ表示されます。Once these agents come online, there will be 2 idle agents.

  • 1つのパイプラインジョブが到着し、いずれかのエージェントに割り当てられているとします。Let us say that 1 pipeline job arrives and is allocated to one of the agents.

  • 現時点では、アイドル状態のエージェントの数は1で、スタンバイの数は2です。At this time, the number of idle agents is 1, and that is less than the standby count of 2. そのため、Azure Pipelines スケールアップし、2つ以上の Vm (この例で使用されるインクリメントサイズ) を追加します。So, Azure Pipelines scales up and adds 2 more VMs (the increment size used in this example). この時点で、プールには3つのアイドル状態のエージェントと1つのビジー状態のエージェントがあります。At this time, the pool has 3 idle agents and 1 busy agent.

  • 最初のエージェントのジョブが完了したとします。Let us say that the job on the first agent completes. Azure パイプラインは、そのマシンを再イメージ化するために、そのエージェントをオフラインにします。Azure Pipeline takes that agent offline to re-image that machine. 数分後に、新しいイメージが返されます。After a few minutes, it comes back with a fresh image. 現時点では、4つのアイドル状態のエージェントがあります。At this time, we'll have 4 idle agents.

  • 他のジョブが30分間到着しなかった場合 (超過した エージェントを削除する前に遅延時間 を使用して構成可能)、Azure Pipelines は必要以上にアイドル状態のエージェントがあると判断します。If no other jobs arrive for 30 minutes (configurable using Delay in minutes before deleting excess idle agents), Azure Pipelines determines that there are more idle agents than are necessary. そのため、プールは2つのエージェントにスケールダウンされます。So, it scales down the pool to two agents.

この操作全体を通じて、Azure Pipelines の目標は、必要な数のアイドル状態のエージェントをスタンバイ状態にすることです。Throughout this operation, the goal for Azure Pipelines is to reach the desired number of idle agents on standby. プールのスケールアップとスケールダウンが低速になります。Pools scale up and down slowly. 1日のうちに、要求が朝にキューに置かれ、夜間に負荷がかかると、プールがスケールアップされます。Over the course of a day, the pool will scale up as requests are queued in the morning and scale down as the load subsides in the evening. さまざまなタイミングで、必要以上に多くのアイドルエージェントを観察することができます。You may observe more idle agents than you desire at various times. これは、指定した制約に徐々に収束 Azure Pipelines と想定されます。This is expected as Azure Pipelines converges gradually to the constraints that you specify.


Azure Pipelines が仮想マシンをスケールアップまたはスケールダウンするのに1時間以上かかることがあります。It can take an hour or more for Azure Pipelines to scale up or scale down the virtual machines. Azure Pipelines は、手順をスケールアップし、エラーの操作を監視し、使用できないマシンを削除して、時間の経過と共に新しいコンピューターを作成することによって対処します。Azure Pipelines will scale up in steps, monitor the operations for errors, and react by deleting unusable machines and by creating new ones in the course of time. この修正操作には1時間以上かかることがあります。This corrective operation can take over an hour.

最大の安定性を実現するために、スケールセットの操作は順番に実行されます。To achieve maximum stability, scale set operations are done sequentially. たとえば、プールをスケールアップする必要があり、異常なマシンも削除する必要がある場合、Azure Pipelines はまずプールをスケールアップします。For example if the pool needs to scale up and there are also unhealthy machines to delete, Azure Pipelines will first scale up the pool. 必要な数のアイドル状態のエージェントがスタンバイ状態になるようにプールがスケールアップされると、[ 問題のあるエージェントを調査用に保存 する] 設定に応じて、異常なコンピューターが削除されます。Once the pool has scaled up to reach the desired number of idle agents on standby, the unhealthy machines will be deleted, depending on the Save an unhealthy agent for investigation setting. 詳細については、「 異常なエージェント」を参照してください。For more information, see Unhealthy agents.

サンプリングサイズが5分の場合、すべてのエージェントが短時間にパイプラインを実行していて、スケールアップが行われない可能性があります。Due to the sampling size of 5 minutes, it is possible that all agents can be running pipelines for a short period of time and no scaling up will occur.

パイプラインエージェントの構成のカスタマイズCustomizing Pipeline Agent Configuration

スケールセットのオペレーティングシステムのカスタムイメージで環境変数を定義することで、Azure パイプラインエージェントの構成をカスタマイズできます。You can customize the configuration of the Azure Pipeline Agent by defining environment variables in your operating system custom image for your scale set. たとえば、スケールセットエージェントの作業ディレクトリの既定値は、Windows の場合は C:\、Linux の場合は/agent/_work になります。For example, the scale set agent working directory defaults to C:\a for Windows and /agent/_work for Linux. 作業ディレクトリを変更する場合は、目的の作業ディレクトリを使用して、VSTS_AGENT_INPUT_WORK という名前の環境変数を設定します。If you want to change the working directory, set an environment variable named VSTS_AGENT_INPUT_WORK with the desired working directory. 詳細については、 パイプラインエージェントの無人構成 に関するドキュメントを参照してください。More information can be found in the Pipelines Agent Unattended Configuration documentation. 次に例をいくつか示します。Some examples include:



パイプラインエージェントをカスタマイズするときは注意が必要です。Caution must be exercised when customizing the Pipelines agent. 設定の中には、他の必要な設定と競合しているものがあります。これにより、エージェントの登録が失敗し、VM が削除されます。Some settings will conflict with other required settings, causing the agent to fail to register, and the VM to be deleted. これらの設定は、設定も変更もできません。These settings should not be set or altered:

  • ...配置グループに関連するものがあります。... and anything related to Deployment Groups.

カスタムスクリプト拡張機能を使用した仮想マシンの起動のカスタマイズCustomizing Virtual Machine Startup via the Custom Script Extension

ユーザーは、これらのマシンがパイプラインジョブの実行を開始する前に、そのスケールセットエージェントコンピューターでスタートアップスクリプトを実行することをお勧めします。Users may want to execute startup scripts on their scaleset agent machines before those machines start running pipeline jobs. スタートアップスクリプトの一般的なユースケースには、ソフトウェアのインストール、キャッシュの準備、リポジトリのフェッチなどがあります。Some common use cases for startup scripts include installing software, warming caches, or fetching repos. Windows 用のカスタムスクリプト拡張機能またはLinux 用カスタムスクリプト拡張機能をインストールすることにより、スタートアップスクリプトを実行できます。You can execute startup scripts by installing the Custom Script Extension for Windows or Custom Script Extension for Linux. この拡張機能は、作成または再イメージ化されるとすぐに、スケールセット内のすべての仮想マシンで実行されます。This extension will be executed on every virtual machine in the scaleset immediately after it is created or reimaged. Azure Pipelines エージェント拡張機能が実行される前に、カスタムスクリプト拡張機能が実行されます。The custom script extension will be executed before the Azure Pipelines agent extension is executed.

Linux 用のカスタムスクリプト拡張機能を作成する例を次に示します。Here is an example to create a custom script extension for Linux.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/\"], \"commandToExecute\": \"bash / /myArgs \" }'

Windows 用のカスタムスクリプト拡張機能を作成する例を次に示します。Here is an example to create a custom script extension for Windows.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'


Vm が VM の作成プロセスを完了するためには、カスタムスクリプト拡張機能で実行されるスクリプトが終了コード0で返される必要があります。The scripts executed in the Custom Script Extension must return with exit code 0 in order for the VM to finish the VM creation process. カスタムスクリプト拡張機能が例外をスローした場合、またはゼロ以外の終了コードを返した場合、Azure パイプライン拡張機能は実行されず、VM は Azure DevOps エージェントプールに登録されません。If the custom script extension throws an exception or returns a non-zero exit code, the Azure Pipeline extension will not be executed and the VM will not register with Azure DevOps agent pool.

スケールセットエージェントのライフサイクルLifecycle of a Scale Set Agent

Azure Pipelines 仮想マシンスケールセットエージェントの操作のフローを次に示します。Here is the flow of operations for an Azure Pipelines Virtual Machine Scale Set Agent

  1. Azure DevOps Scale Set エージェントプールのサイズ変更ジョブによって、プールのアイドル状態のエージェントが少なすぎ、スケールアップする必要があると判断されます。The Azure DevOps Scale Set Agent Pool sizing job determines the pool has too few idle agents and needs to scale up. Azure Pipelines は、スケールセットの容量を増やすために Azure スケールセットを呼び出します。Azure Pipelines makes a call to Azure Scale Sets to increase the scale set capacity.

  2. Azure スケールセットによって、新しい仮想マシンの作成が開始されます。The Azure Scale Set begins creating the new virtual machines. 仮想マシンが実行されると、Azure Scale Sets は、インストールされているすべての VM 拡張機能を順番に実行します。Once the virtual machines are running, Azure Scale Sets sequentially executes any installed VM extensions.

  3. カスタムスクリプト拡張機能がインストールされている場合は、Azure Pipelines エージェント拡張機能の前に実行されます。If the Custom Script Extension is installed, it is executed before the Azure Pipelines Agent extension. カスタムスクリプト拡張機能からゼロ以外の終了コードが返された場合、VM の作成プロセスは中止され、削除されます。If the Custom Script Extension returns a non-zero exit code, the VM creation process is aborted and will be deleted.

  4. Azure Pipelines エージェント拡張機能が実行されます。The Azure Pipelines Agent extension is executed. この拡張機能により、Azure Pipelines エージェントの最新バージョンと構成スクリプトがダウンロードされます。これについては、こちらを参照してください。This extension downloads the latest version of the Azure Pipelines Agent along with a configuration script which can be found here.


    これらの Url は変更される可能性があります。These URLs may change.

  5. AzDevOpsオペレーティングシステムが Windows Server または Linux の場合、構成スクリプトによってという名前のローカルユーザーが作成されます。The configuration script creates a local user named AzDevOps if the operating system is Windows Server or Linux. Windows 10 クライアント OS の場合、エージェントは LocalSystem として実行されます。For Windows 10 Client OS, the agent runs as LocalSystem. その後、スクリプトによって、Azure Pipelines エージェントの解凍、インストール、および構成が行われます。The script then unzips, installs, and configures the Azure Pipelines Agent. 構成の一部として、エージェントは Azure DevOps エージェントプールに登録され、[オフライン] 状態の [エージェントプール] ボックスの一覧に表示されます。As part of configuration, the agent registers with the Azure DevOps agent pool and appears in the agent pool list in the Offline state.

  6. ほとんどの場合、構成スクリプトは、ローカルユーザーとして実行するエージェントを直ちに開始し AzDevOps ます。For most scenarios, the configuration script then immediately starts the agent to run as the local user AzDevOps. エージェントがオンラインになり、パイプラインジョブを実行する準備が整いました。The agent goes Online and is ready to run pipeline jobs.

    プールが対話型 UI 用に構成されている場合は、エージェントの構成後に仮想マシンが再起動されます。If the pool is configured for interactive UI, the virtual machine reboots after the agent is configured. 再起動後、ローカルユーザーは自動ログインし、パイプラインエージェントを直ちに開始します。After reboot, the local user will auto-login and immediately start the pipelines agent. エージェントはオンラインになり、パイプラインジョブを実行する準備が整います。The agent then goes Online and is ready to run pipeline jobs.

カスタムイメージ、ソフトウェア、またはディスクサイズを使用してスケールセットを作成するCreate a scale set with custom image, software, or disk size

一般公開されている Azure イメージを使用して既定の 128 GB OS ディスクでスケールセットを作成するだけの場合は、手順6に進み、パブリックイメージ名 (UbuntuLTS、Win2019DataCenter など) を使用してスケールセットを作成します。If you just want to create a scale set with the default 128 GB OS disk using a publicly available Azure image, then skip straight to step 6 and use the public image name (UbuntuLTS, Win2019DataCenter, etc.) to create the scale set. それ以外の場合は、次の手順に従って VM イメージをカスタマイズします。Otherwise follow these steps to customize your VM image.

  1. 目的の OS イメージを使用して VM を作成し、必要に応じて、OS ディスクのサイズを 128 GB からに拡張し <myDiskSizeGb> ます。Create a VM with your desired OS image and optionally expand the OS disk size from 128 GB to <myDiskSizeGb>.

    • 使用可能な Azure イメージで始まる場合 (例 : = (Win2019DataCenter, UbuntuLTS)):If starting with an available Azure Image, for example = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
    • 一般化された VHD で開始する場合:If starting with a generalized VHD:

      1. まず、目的のサイズの非管理対象ディスクを使用して VM を作成し、次に管理ディスクに変換します。First create the VM with an unmanaged disk of the desired size and then convert to a managed disk:

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
      2. VM のシャット ダウンShut down the VM

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
      3. VM の割り当てを解除するDeallocate the VM

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
      4. 管理ディスクに変換するConvert to a managed disk

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
      5. VM を再起動するRestart the VM

        az vm start --resource-group <myResourceGroup> --name <MyVM>
  2. イメージをカスタマイズするための VM のパブリック IP アドレスへのリモートデスクトップ (または SSH)。Remote Desktop (or SSH) to the VM's public IP address to customize the image. 場合によっては、RDP (3389) ポートまたは SSH (22) ポートのブロックを解除するために、ファイアウォールでポートを開く必要があります。You may need to open ports in the firewall to unblock the RDP (3389) or SSH (22) ports.

    1. Windows - <MyDiskSizeGb> が 128 GB を超える場合は、前に宣言したディスクサイズに合わせて OS ディスクサイズを拡張します。Windows - If <MyDiskSizeGb> is greater than 128 GB, extend the OS disk size to fill the disk size you declared above.

      DiskPart ツールを管理者として開き、次の DiskPart コマンドを実行します。Open DiskPart tool as administrator and run these DiskPart commands:

      1. list volume (ボリュームを確認するには)list volume (to see the volumes)
      2. select volume 2 (どのボリュームが OS ドライブであるかによって異なります)select volume 2 (depends on which volume is the OS drive)
      3. extend size 72000 (ドライブの容量を 72 GB、128 GB から 200 GB に拡張する場合)extend size 72000 (to extend the drive by 72 GB, from 128 GB to 200 GB)
  3. VM に追加のソフトウェアをインストールします。Install any additional software on the VM.

  4. パイプラインエージェントユーザーのアクセス許可をカスタマイズするには、という名前のユーザーを作成 AzDevOps し、必要なアクセス許可をそのユーザーに付与します。To customize the permissions of the pipeline agent user, you can create a user named AzDevOps, and grant that user the permissions you require. このユーザーは、まだ存在しない場合は、スケールセットエージェントのスタートアップスクリプトによって作成されます。This user will be created by the scaleset agent startup script if it does not already exist.

  5. カスタマイズの完了後に VM を再起動するReboot the VM when finished with customizations

  6. VM を一般化します。Generalize the VM.

    • Windows -管理コンソールウィンドウから:Windows - From an admin console window:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
    • Linux:Linux:
      sudo waagent -deprovision+user -force


    VM の一般化とシャットダウンが完了するまで待ちます。Wait for the VM to finish generalization and shutdown. VM が停止するまで続行しないでください。Do not proceed until the VM has stopped. 60分を許可します。Allow 60 minutes.

  7. VM の割り当てを解除するDeallocate the VM

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
  8. VM を一般化済みとしてマークするMark the VM as Generalized

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
  9. 一般化されたイメージに基づいて VM イメージを作成します。Create a VM Image based on the generalized image. これらの手順を実行して既存のスケールセットイメージを更新する場合は、出力のイメージ ID url をメモしておきます。When performing these steps to update an existing scaleset image, make note of the image ID url in the output.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
  10. カスタム VM イメージに基づいてスケールセットを作成するCreate the scale set based on the custom VM image

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
  11. スケールセット内に作成された両方の Vm がオンラインになっていること、名前が異なること、および成功状態になっていることを確認します。Verify that both VMs created in the scale set come online, have different names, and reach the Succeeded state

これで、このスケールセットを使用してエージェントプールを作成する準備が整いました。You are now ready to create an agent pool using this scale set.

新しいカスタムイメージを使用して既存のスケールセットを更新するUpdate an existing scale set with a new custom image

既存の scaleset のイメージを更新するには、前の「 カスタムイメージ、ソフトウェア、またはディスクサイズを使用したスケールセットの作成 」セクションの手順に従って、 az image create カスタム OS イメージを生成します。To update the image on an existing scaleset, follow the steps in the previous Create a scale set with custom image, software, or disk size section up through the az image create step to generate the custom OS image. コマンドからの出力である ID プロパティの URL をメモしておき az image create ます。Make note of the ID property URL that is output from the az image create command. 次の例に示すように、新しいイメージでスケールセットを更新します。Then update the scaleset with the new image as shown in the following example. スケールセットイメージが更新された後、スケールセット内の今後のすべての vm が新しいイメージで作成されます。After the scaleset image has been updated, all future VMs in the scaleset will be created with the new image.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set<id url>

サポートされるオペレーティング システムSupported Operating Systems

スケールセットエージェントでは、現在、Ubuntu Linux、Windows Server/DataCenter 2016/2019、および Windows 10 クライアントがサポートされています。Scale set agents currently supports Ubuntu Linux, Windows Server/DataCenter 2016/2019, and Windows 10 client.

既知の問題Known issues

  • Debian または RedHat Linux はサポートされていません。Debian or RedHat Linux are not supported. Ubuntu のみがです。Only Ubuntu is.
  • Windows 10 クライアントでは、パイプラインエージェントをローカルユーザーとして実行することはサポートされていないため、エージェントは UI と対話できません。Windows 10 client does not support running the pipeline agent as a local user and therefore the agent cannot interact with the UI. 代わりに、エージェントはローカルサービスとして実行されます。The agent will run as Local Service instead.

問題のトラブルシューティングTroubleshooting issues

Azure DevOps プロジェクトの設定 に移動し、[パイプライン] で [エージェントプール] を選択して、エージェントプールを選択します。Navigate to your Azure DevOps Project settings, select Agent pools under Pipelines, and select your agent pool. [ 診断] というラベルのタブをクリックします。Click the tab labeled Diagnostics.

[診断] タブには、azure DevOps によって実行されるすべてのアクションが表示され、Azure スケールセットで Vm を作成、削除、または再イメージ化できます。The Diagnostic tab shows all actions executed by Azure DevOps to Create, Delete, or Reimage VMs in your Azure Scale Set. また、これらの操作を実行しようとしたときに発生したすべてのエラーもログに記録されます。Diagnostics also logs any errors encountered while trying to perform these actions. エラーを確認して、スケールセットに十分な数のリソースがあることを確認してください。Review the errors to make sure your scaleset has sufficient resources to scale up. Azure サブスクリプションが Vm、CPU コア、ディスク、または IP アドレスのリソースの上限に達した場合、これらのエラーはここに表示されます。If your Azure subscription has reached the resource limit in VMs, CPU cores, disks, or IP Addresses, those errors will show up here.

異常なエージェントUnhealthy Agents

エージェントまたは仮想マシンが起動に失敗した場合、Azure DevOps に接続していない場合、または予期せずオフラインになった場合、Azure DevOps は障害をエージェントプールの [ 診断 ] タブに記録し、関連付けられている仮想マシンを削除しようとします。When agents or virtual machines are failing to start, not connecting to Azure DevOps, or going offline unexpectedly, Azure DevOps logs the failures to the Agent Pool's Diagnostics tab and tries to delete the associated virtual machine. ネットワークの構成、イメージのカスタマイズ、および再起動の保留によって、これらの問題が発生する可能性があります。Networking configuration, image customization, and pending reboots can cause these issues. VM に接続してログをデバッグおよび収集すると、調査に役立ちます。Connecting to the VM to debug and gather logs can help with the investigation.

Azure DevOps で、問題のあるエージェント VM を調査用に保存し、異常な状態を検出したときに自動的に削除しないようにする場合は、Azure DevOps プロジェクトの設定 に移動し、[パイプライン] で [エージェントプール] を選択して、エージェントプールを選択します。If you would like Azure DevOps to save an unhealthy agent VM for investigation and not automatically delete it when it detects the unhealthy state, navigate to your Azure DevOps Project settings, select Agent pools under Pipelines, and select your agent pool. [ 設定] を選択し、[ 問題のあるエージェントを調査用に保存する] オプションを選択し、[ 保存] を選択します。Choose Settings, select the option Save an unhealthy agent for investigation, and choose Save.


これで、スケールセットで異常なエージェントが検出されると、Azure DevOps はそのエージェントと関連付けられた仮想マシンを保存します。Now, when an unhealthy agent is detected in the scale set, Azure DevOps saves that agent and associated virtual machine. 保存されたエージェントは、エージェントプール UI の [ 診断 ] タブに表示されます。The saved agent will be visible on the Diagnostics tab of the Agent pool UI. Azure DevOps プロジェクトの設定 に移動し、[パイプライン] の下にある [エージェントプール] を選択します。エージェントプールを選択し、[診断] を選択し、エージェント名をメモしておきます。Navigate to your Azure DevOps Project settings, select Agent pools under Pipelines, select your agent pool, choose Diagnostics, and make note of the agent name.


[ インスタンス ] ボックスの一覧で、Azure portal を使用して、Azure 仮想マシンスケールセット内の関連付けられている仮想マシンを検索します。Find the associated virtual machine in your Azure virtual machine scale set via the Azure portal, in the Instances list.

仮想マシンスケールセットのインスタンスを Azure portal します。

インスタンスを選択し、[ 接続] を選択して、調査を実行します。Select the instance, choose Connect, and perform your investigation.


調査の完了後に保存されたエージェントを削除するには、Azure DevOps プロジェクトの設定 に移動し、[パイプライン] で [エージェントプール] を選択して、エージェントプールを選択します。To delete the saved agent when you are done with your investigation, navigate to your Azure DevOps Project settings, select Agent pools under Pipelines, and select your agent pool. [ 診断] タブを選択します。Choose the tab labeled Diagnostics. [ 調査用に保存されたエージェント ] カードでエージェントを見つけ、[ 削除] を選択します。Find the agent on the Agents saved for investigation card, and choose Delete. これにより、プールからエージェントが削除され、関連付けられている仮想マシンが削除されます。This removes the agent from the pool and deletes the associated virtual machine.

保存されたエージェントカードの [削除] ボタン。


Microsoft がホストするエージェントに使用されているイメージはどこで入手できますか。Where can I find the images used for Microsoft-hosted agents?

ライセンスに関する考慮事項では、Microsoft がホストするイメージの配布を制限します。Licensing considerations limit us from distributing Microsoft-hosted images. これらのイメージをスケールセットのエージェントで使用することはできません。We are unable to provide these images for you to use in your scale set agents. ただし、これらのイメージを生成するために使用する スクリプト はオープンソースです。But, the scripts that we use to generate these images are open source. これらのスクリプトを自由に使用して、独自のカスタムイメージを作成できます。You are free to use these scripts and create your own custom images.

UI テストを実行するようにスケールセットエージェントを構成操作方法にはHow do I configure scale set agents to run UI tests?

Windows Server OS を使用してスケールセットを作成し、エージェントプールを作成するときに、[対話型テストを実行するように Vm を構成する] オプションを選択します。Create a Scale Set with a Windows Server OS and when creating the Agent Pool select the "Configure VMs to run interactive tests" option.

エージェントを削除するにはどうすればよいですか。How can I delete agents?

Azure DevOps プロジェクトの設定 に移動し、[パイプライン] で [エージェントプール] を選択して、エージェントプールを選択します。Navigate to your Azure DevOps Project settings, select Agent pools under Pipelines, and select your agent pool. [ エージェント] というラベルのタブをクリックします。Click the tab labeled Agents. [有効] トグルボタンをクリックして、エージェントを無効にします。Click the 'Enabled' toggle button to disable the agent. 無効になっているエージェントは、現在実行されているパイプラインを完了し、追加の作業を取得しません。The disabled agent will complete the pipeline it is currently running and will not pick up additional work. 現在のパイプラインジョブを完了してから数分以内に、エージェントが削除されます。Within a few minutes after completing its current pipeline job, the agent will be deleted.

スケールセットエージェントプールを、スタンバイにゼロエージェントを設定できますか。Can I configure the scale set agent pool to have zero agents on standby?

はい。 スタンバイ状態のままにするエージェントの数 を0に設定した場合 (たとえば、ジョブの少ないボリュームのコストを節約する場合)、Azure Pipelines は、ジョブがある場合にのみ VM を起動します。Yes, if you set Number of agents to keep on standby to zero, for example to conserve cost for a low volume of jobs, Azure Pipelines starts a VM only when it has a job.