マネージド DevOps プール イメージのプロビジョニング スクリプトを構成する

マネージド DevOps プールには、ジョブを実行するためにエージェントに割り当てる前に、プール内のイメージに対して PowerShell スクリプト (Windows) または Bash スクリプト (Linux) を実行するオプションが用意されています。 この機能により、信頼されたルート CA のインストールや環境変数の設定などのシナリオが可能になります。

Important

プロビジョニング スクリプトは現在プレビュー段階です。 この機能は、一般公開前に変更される可能性があります。

マネージド DevOps プールでは、プールに関連付けられているマネージド ID を使用して、Azure Blob Storageからエージェントにスクリプトをダウンロードし、トラブルシューティングのためにプロビジョニング スクリプト ログをアップロードします。 プロビジョニング スクリプトはエージェントの起動時に実行され、スクリプトの実行後に再起動するようにエージェントを構成できます。

プロビジョニング スクリプトを実行するように Managed DevOps プール イメージを構成するには、次の手順を実行します。

  1. Blob Storage アカウントに 2 つの BLOB コンテナーを作成します。1 つはプロビジョニング スクリプトとサポート ファイル用、1 つはプロビジョニング スクリプト ログのアップロード用です。 プロビジョニング スクリプトとサポート ファイルをスクリプト BLOB コンテナーにアップロードします。
  2. マネージド ID をマネージド DevOps プールに関連付け、エージェントがプロビジョニング スクリプトを読み取り、プロビジョニング スクリプト ログをアップロードできるように、必要なロールを適切なスコープでマネージド ID に割り当てます。
  3. 目的のプロビジョニング スクリプトを使用するようにイメージを構成します。

前提条件

  • Azure Blob Storage アカウント。 Managed DevOps Pools プロビジョニング スクリプトでサポートされているAzure Storage アカウントの種類は、Standard 汎用 v2 です。
  • マネージド ID が関連付けられたマネージド DevOps プール。 マネージド DevOps プールにマネージド ID がない場合は、「マネージド DevOps プールのマネージド ID を構成する」の手順に従って作成します。

BLOB コンテナーを作成する

マネージド DevOps プールは、プロビジョニング スクリプトとそのサポート ファイルを、Blob Storage アカウントのコンテナー内の BLOB からダウンロードします。 マネージド DevOps プールには、ストレージ アカウントに 2 つの BLOB コンテナーが必要です。1 つはプロビジョニング スクリプトとサポート ファイルをダウンロードするためのコンテナーで、1 つはプロビジョニング スクリプト ログをアップロードするためのコンテナーです。

Blob Storage アカウントに次の 2 つの BLOB コンテナーを作成します。

Blob Storage コンテナー Description
スクリプト BLOB コンテナー。 プロビジョニング スクリプトを実行するようにイメージを構成するときに 、エントリ ポイント (provisioningScriptEntryPoint) にカスタム名を指定しない場合、既定の名前は provisioningscript。 プロビジョニング スクリプトとサポート ファイルが含まれています。 プロビジョニング スクリプトには、Windows イメージの場合は Startup.ps1 という名前を付ける必要があります。Linux イメージの場合はStartup.shする必要があります。
プロビジョニング スクリプト ログ用コンテナー。 このコンテナー名は構成できません。 mdpprovisioningscriptlogsする必要があります。

マネージド DevOps プールでは、 mdpprovisioningscriptlogs BLOB コンテナーを自動的に作成できますが、最小限の特権でアクセスする場合は、 mdpprovisioningscriptlogs コンテナーを手動で作成することをお勧めします。 詳細については、「マネージド ID にAzureロールを割り当てる」を参照してください。
プロビジョニング スクリプトとスクリプトのコピーによって生成された stdout ログと stderr ログが含まれます。 BLOB 名では、エージェントのマシン名が仮想ディレクトリとして使用されます。

プロビジョニング スクリプトとサポート ファイルをスクリプト BLOB コンテナーにアップロードします。 プロビジョニング スクリプトには、Windows イメージの場合は Startup.ps1 という名前を付ける必要があります。Linux イメージの場合はStartup.shする必要があります。 スクリプトに必要なすべてのサポート ファイルを BLOB に含めることができます。 エージェントが起動すると、これらのファイルがエージェントの作業ディレクトリにダウンロードされ、プロビジョニング スクリプトがその場所から実行されます。

マネージド ID に Azure ロールを割り当てる

マネージド DevOps プールでは、マネージド ID を使用して、プロビジョニング スクリプトとプロビジョニング スクリプト ログの BLOB コンテナーにアクセスします。 マネージド ID をマネージド DevOps プールに関連付け、このセクションで説明するスコープで指定したロールをマネージド ID に割り当てる必要があります。 マネージド DevOps プールにマネージド ID がない場合は、「マネージド DevOps プールのマネージド ID を構成する」の手順に従って作成します。

  • マネージド DevOps プールに 1 つのマネージド ID が関連付けられている場合、その ID を使用してプロビジョニング スクリプトとプロビジョニング スクリプト ログ コンテナーにアクセスします。
  • マネージド DevOps プールに複数のマネージド ID が関連付けられている場合は、プロビジョニング スクリプトを使用するようにイメージを構成するときにマネージド ID クライアント ID (provisioningScriptManagedIdentityResourceId) プロパティを指定して、プロビジョニング スクリプトに使用する特定のマネージド ID を指定します。

次の表のロールを、指定したスコープの Managed DevOps プールの関連付けられたマネージド ID に割り当てて、エージェントがスクリプトをダウンロードし、プロビジョニング スクリプト ログをアップロードできるようにします。 Azureロールの割り当ての詳細については、「Azureロールを割り当てる手順」を参照してください。

Role Scope
ストレージブロブデータリーダー スクリプトの BLOB コンテナー スコープ。 プロビジョニング スクリプトを実行するようにイメージを構成するときに エントリ ポイント (provisioningScriptEntryPoint) に名前を指定しない場合、既定の名前は provisioningscript。
Storage Blob データ共同作成者 最小特権アクセスの場合は、プロビジョニング スクリプト ログ コンテナー (mdpprovisioningscriptlogs) を手動で作成し、その BLOB コンテナー スコープでマネージド ID にロールを割り当てます。

Managed DevOps プールでコンテナーを作成する場合は、ストレージ アカウント スコープでマネージド ID にロールを割り当てます。 ストレージ アカウント スコープでストレージ BLOB データ共同作成者ロールを割り当てる場合は、スクリプト コンテナー スコープでストレージ BLOB データ閲覧者ロールを割り当てる必要はありません。

プロビジョニング スクリプトを使用するようにイメージを構成する

イメージでプロビジョニング スクリプトを使用するには、次のイメージ プロパティを構成します。

財産 Description
ストレージ アカウントのリソース ID
provisioningScriptStorageAccountResourceId
必須。 スクリプト コンテナー (既定の名前 provisioningscript) と mdpprovisioningscriptlogs コンテナーを含むストレージ アカウントのリソース ID。
エントリ ポイント
provisioningScriptEntryPoint
プロビジョニング スクリプトとサポート ファイルを含む BLOB コンテナーの名前。 値を指定しない場合、既定値は provisioningscript になります。
マネージド ID クライアント ID
provisioningScriptManagedIdentityClientId
プールが複数のマネージド ID に関連付けられている場合は必須です。 スクリプト内の BLOB へのアクセスとスクリプト ログ コンテナーのプロビジョニングに使用するマネージド ID のクライアント ID。 Managed DevOps プールに複数のマネージド ID が関連付けられている場合は、ここで使用するマネージド ID を指定する必要があります。 プールに ID が 1 つしかない場合、このプロパティは省略可能です。
スクリプトの実行後に再起動する
provisioningScriptShouldRestart
プロビジョニング スクリプトを実行した後、エージェントにジョブを送信する前に、エージェントを再起動する必要があるかどうか。 値を指定しない場合、既定値は false になります。

スクリプトの実行後に再起動すると、プロビジョニング時間が長くなり、再起動を有効にする必要がある変更がプロビジョニング スクリプトによって行われる場合にのみ行う必要があります。

Note

プロビジョニング スクリプトは、API バージョン 2026-06-02 以降で使用できます。

プロビジョニング スクリプトの構成後に以前の API バージョンを使用してプールを更新した場合、プロビジョニング スクリプトの設定は保持されません。

イメージのプロビジョニング スクリプト設定を構成するには、プール設定の [イメージ ] セクションに移動し、 ...>プロビジョニング スクリプトを構成します。

[プロビジョニング スクリプトの構成] メニュー オプションを示すスクリーンショット。

イメージのプロビジョニング スクリプト設定を追加または更新し、[ 保存] を選択します。

[プロビジョニング スクリプトの構成] 設定を示すスクリーンショット。

プロビジョニングエラー

次の表に、プロビジョニング スクリプトのエラー コードと説明を示します。

エラー コード Description
ProvisioningScriptDownloadFailed プロビジョニング中に、プロビジョニング スクリプトをマシンにダウンロードできませんでした。
ProvisioningScriptAccessFailed プロビジョニング プロセスがプロビジョニング スクリプトにアクセスできませんでした。 通常、このエラーは、スクリプトを取得するときにアクセスまたはアクセス許可の問題が原因で発生します。
ProvisioningScriptExecutionFailed プロビジョニング スクリプトはダウンロードされましたが、マシンでの実行中に失敗しました。
ProvisioningScriptLogUploadFailed プロビジョニング プロセスによってプロビジョニング スクリプト ログが生成されましたが、アップロードできませんでした。

プロビジョニング スクリプトのログ

プロビジョニング スクリプト ログには、スクリプトによって生成された標準出力 (stdout) と標準エラー (stderr) が含まれます。 マネージド DevOps プールは、指定したストレージ アカウントの mdpprovisioningscriptlogs BLOB コンテナーにこれらのログを書き込みます。 BLOB は、 mdp-{poolName}-{agentMachineName}形式を使用する名前の仮想ディレクトリの下に編成されます。 この仮想ディレクトリには、stderr.logファイルとstdout.logファイルを含むoutput仮想ディレクトリと、実行されたスクリプトのコピーを含むscript仮想ディレクトリが含まれています。

マネージド DevOps プールではこれらのログは管理されないため、Azure Blob Storageライフサイクル管理ポリシーを使用してストレージ アカウント内の保持を管理する必要があります。 DeleteOldMDPLogsという名前の次のポリシー例では、ログ BLOB が最後に変更されてから 3 日後に削除されます。

{
  "rules": [
    {
      "enabled": true,
      "name": "DeleteOldMDPLogs",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "baseBlob": {
            "delete": {
              "daysAfterModificationGreaterThan": 3
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "mdpprovisioningscriptlogs/"
          ]
        }
      }
    }
  ]
}

GitHub Copilotから AI の支援を受けて、Azure Blob Storageライフサイクル管理ポリシーを構築できます。 次のプロンプトをカスタマイズして、Azure Blob Storageライフサイクル管理ポリシーを作成します。

Build an Azure Blob Storage lifecycle management policy named DeleteOldMDPLogs that deletes logs after three days.

Copilotによって生成されたポリシーの詳細を取得するには、プロンプトで生成されたポリシーの説明を提供するようにCopilotに依頼できます。

Copilot では AI を利用しているため、想定外のことや間違いが起こる可能性があります。 詳細については、「Copilot一般的な使用に関する FAQを参照してください。

詳細については、「Azure Blob Storageライフサイクル管理ポリシー」および「ライフサイクル管理ポリシーの構成」を参照してください。

こちらも参照ください