Azure Compute Gallery を使用してカスタム イメージ プールを作成する

仮想マシンの構成を使用して Azure Batch プールを作成するときは、プールの各コンピューティング ノードにオペレーティング システムを提供する VM イメージを指定します。 サポートされている Azure Marketplace イメージを使用するか、Azure Compute Gallery のイメージを使用してカスタム イメージを作成するかのいずれかの方法で、仮想マシンのプールを作成することができます。

カスタム イメージのために Azure Compute Gallery を使用すると、データ ディスクの種類に加えて、オペレーティング システムの種類と構成を制御できます。 共有イメージには、Batch プール ノードがプロビジョニングされると、そのすべてのノードですぐに使用可能になるアプリケーションと参照データを含めることができます。

お使いの環境に必要な複数のイメージ バージョンも保持できます。 イメージ バージョンを使用して VM を作成する場合、イメージ バージョンは VM 用の新しいディスクを作成するために使用されます。

共有イメージを使用すると、Batch ワークロードを実行できるように、プールのコンピューティング ノードを準備する時間を短縮できます。 プロビジョニング後、Azure Marketplace イメージを使用して各コンピューティング ノードにソフトウェアをインストールすることは可能ですが、通常は共有イメージを使用する方が効率的です。 また、共有イメージに複数のレプリカを指定できるため、多数の VM がある (VM が 600 個より多い) プールを作成するときに、プールの作成にかかる時間を節約できます。

シナリオに合わせて構成された共有イメージを使用すると、次のようなメリットがあります。

  • リージョン間で同じイメージを使用します。 すべてのプールが同じイメージを利用するよう、異なるリージョン間で共有イメージのレプリカを作成できます。
  • オペレーティング システム (OS) の構成。 イメージのオペレーティング システム ディスクの構成をカスタマイズできます。
  • アプリケーションの事前インストール。 OS ディスクにアプリケーションを事前インストールすると、開始タスクを使用してコンピューティング ノードをプロビジョニングしてからアプリケーションをインストールするよりも、効率的で、エラーが発生しにくくなります。
  • 大量のデータを一度にコピー。 マネージド共有イメージの静的データの部分を、マネージド イメージのデータ ディスクにコピーすることで作成できます。 この作業は 1 回行うだけで、プールの各ノードでデータを使用できるようになります。
  • プールのサイズを拡張する。 Azure Compute Gallery を使用すれば、より多くの共有イメージ レプリカに加えてカスタマイズされたイメージを使用して、より大きなプールを作成できます。
  • マネージド イメージだけをカスタム イメージとして使用するよりもパフォーマンスが向上します。 Shared Image のカスタム イメージ プールの場合、安定状態になるまでの時間は最大 25% 速くなり、VM のアイドル待機時間は最大で 30% 短くなります。
  • 管理を容易にするイメージのバージョン管理とグループ化。 イメージのグループ化の定義には、イメージが作成された理由、対象の OS、イメージの使用に関する情報などの情報が含まれます。 イメージをグループ化すると、イメージを簡単に管理できるようになります。 詳細については、「イメージ定義」を参照してください。

前提条件

  • Azure Batch アカウント。 Batch アカウントを作成するには、Azure portal または Azure CLI を使用した Batch のクイック スタートを参照してください。

Note

Microsoft Entra ID を使った認証が必要です。 共有キー認証を使うと、認証エラーが発生します。

  • Azure Compute Gallery のイメージ 共有イメージを作成するには、マネージド イメージ リソースが必要です。ない場合は作成する必要があります。 イメージは、VM の OS ディスクと、それに接続されたデータ ディスク (後者はオプション) のスナップショットから作成する必要があります。

注意

共有イメージが Batch アカウントと同じサブスクリプションに含まれていない場合は、そのサブスクリプションの Microsoft.Batch リソース プロバイダーを登録する必要があります。 それら 2 つのサブスクリプションは同じ Microsoft Entra テナント内に存在する必要があります。

Batch アカウントと同じリージョンにレプリカがある限り、イメージを異なるリージョンに配置できます。

Microsoft Entra アプリケーションを使用して Azure Compute Gallery のイメージを持つカスタム イメージ プールを作成する場合、そのアプリケーションに、Shared Image へのアクセスを許可する Azure 組み込みロールが許可されている必要があります。 Azure portal でこのアクセス権を付与するには、Shared Image に移動し、 [アクセス制御 (IAM)] を選択して、アプリケーションにロールの割り当てを追加します。

Note

適切なアクセスのために最小限のアクション Microsoft.Compute/disks/beginGetAccess/action を実行する必要があるため、Azure Compute Gallery イメージの読み取りアクセス許可では不十分です。

Shared Image を準備する

Azure では、以下から作成できるマネージド イメージから共有イメージを準備できます。

  • Azure VM の OS とデータ ディスクのスナップショット
  • マネージド ディスクで汎用化された Azure VM
  • クラウドにアップロードされた、汎用化されたオンプレミス VHD

注意

Batch では汎用化された共有イメージのみがサポートされます。特殊な共有イメージを使用してプールを作成することはできません。

次の手順では、VM を準備し、スナップショットを作成し、スナップショットからイメージを作成する方法を説明します。

VM を準備する

イメージ用に新しい VM を作成する場合、Batch によってサポートされている Azure Marketplace イメージをマネージド イメージのベース イメージとして使います。

Azure Batch でサポートされている最新の Azure Marketplace イメージ参照の完全な一覧を取得するには、次のいずれかの API を使うと、Windows と Linux の VM イメージの一覧が返ります。

VM を作成するときは、次のガイドラインに従ってください。

  • VM がマネージド ディスクを使用して作成されていることを確認してください。 これは VM を作成するときの既定のストレージ設定です。
  • VM には、Azure 拡張機能 (カスタム スクリプト拡張機能など) をインストールしないでください。 イメージにプレインストールされた拡張機能が含まれる場合、Azure で Batch プールのデプロイ時に問題が発生する可能性があります。
  • 添付データ ディスクを含める場合は、それらを使用する VM 内からディスクを マウントおよびフォーマットする必要があります。
  • 提供するベース OS イメージには、必ず既定の一時ドライブを使用するようにしてください。 現在、Batch ノード エージェントでは、既定の一時ドライブを使用する必要があります。
  • OS ディスクが暗号化されていないことを確認してください。
  • VM が実行状態になったら、RDP (Windows の場合) または SSH (Linux の場合) を使用して VM に接続します。 必要なソフトウェアをインストールしたり、必要なデータをコピーしてください。
  • プールのプロビジョニングを速くするには、VM の OS ディスクの ReadWrite ディスク キャッシュ設定を使用します。

Azure Compute Gallery を作成して、カスタム イメージを使用できるようにする必要があります。 次の手順でイメージを作成するときに、このギャラリーを選びます。 イメージ用の Azure Compute Gallery を作成する方法については、Azure Compute Gallery の作成に関するページを参照してください。

イメージを作成する

ポータルで VM からイメージを作成するには、VM のイメージのキャプチャに関するページを参照してください。

VM 以外のソースを使用してイメージを作成するには、イメージを作成するをご覧ください。

Note

ベース イメージに購入プラン情報がある場合は、ギャラリー イメージにベース イメージと同じ購入プラン情報があることを確認します。 購入プランがあるイメージの作成について詳しくは、「イメージ作成時、Azure Marketplace 購入プラン情報を提供する」をご覧ください。

ベース イメージに購入プラン情報がない場合は、ギャラリー イメージに対して購入プラン情報を指定しないでください。

これらの Marketplace イメージに関する購入プラン情報については、Linux または Windows の VM のガイダンスをご覧ください。

ギャラリー イメージのプラン情報が正しいかどうかを確認するには、Azure PowerShell の Get-AzGalleryImageDefinition または Azure CLI の az sig image-definition show を使います。

Azure CLI を使用して共有イメージからプールを作成する

Azure CLI を使用して共有イメージからプールを作成するには、az batch pool create コマンドを使用します。 --image フィールドに共有イメージ ID を指定します。 OS の種類と SKU が、--node-agent-sku-id によって指定されたバージョンと一致していることを確認してください。

重要

ノードを起動するには、ノード エージェント SKU ID が発行元/オファー/SKU と一致している必要があります。

az batch pool create \
    --id mypool --vm-size Standard_A1_v2 \
    --target-dedicated-nodes 2 \
    --image "/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}" \
    --{node-agent-sku-id}

C# を使用して共有イメージからプールを作成する

C# SDK を使用して共有イメージからプールを作成することもできます。

private static VirtualMachineConfiguration CreateVirtualMachineConfiguration(ImageReference imageReference)
{
    return new VirtualMachineConfiguration(
        imageReference: imageReference,
        nodeAgentSkuId: {});
}

private static ImageReference CreateImageReference()
{
    return new ImageReference(
        virtualMachineImageId: "/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}");
}

private static void CreateBatchPool(BatchClient batchClient, VirtualMachineConfiguration vmConfiguration)
{
    try
    {
        CloudPool pool = batchClient.PoolOperations.CreatePool(
            poolId: PoolId,
            targetDedicatedComputeNodes: PoolNodeCount,
            virtualMachineSize: PoolVMSize,
            virtualMachineConfiguration: vmConfiguration);

        pool.Commit();
    }
    ...
}

Python を使用して共有イメージからプールを作成する

また、Python SDK を使用して共有イメージからプールを作成することもできます。

# Import the required modules from the
# Azure Batch Client Library for Python
import azure.batch as batch
import azure.batch.models as batchmodels
from azure.common.credentials import ServicePrincipalCredentials

# Specify Batch account and service principal account credentials
account = "{batch-account-name}"
batch_url = "{batch-account-url}"
ad_client_id = "{sp-client-id}"
ad_tenant = "{tenant-id}"
ad_secret = "{sp-secret}"

# Pool settings
pool_id = "LinuxNodesSamplePoolPython"
vm_size = "STANDARD_D2_V3"
node_count = 1

# Initialize the Batch client with Azure AD authentication
creds = ServicePrincipalCredentials(
    client_id=ad_client_id,
    secret=ad_secret,
    tenant=ad_tenant,
    resource="https://batch.core.windows.net/"
)
client = batch.BatchServiceClient(creds, batch_url)

# Configure the start task for the pool
start_task = batchmodels.StartTask(
    command_line="printenv AZ_BATCH_NODE_STARTUP_DIR"
)
start_task.run_elevated = True

# Create an ImageReference which specifies the image from
# Azure Compute Gallery to install on the nodes.
ir = batchmodels.ImageReference(
    virtual_machine_image_id="/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}"
)

# Create the VirtualMachineConfiguration, specifying
# the VM image reference and the Batch node agent to
# be installed on the node.
vmc = batchmodels.VirtualMachineConfiguration(
    image_reference=ir,
    {node_agent_sku_id}
)

# Create the unbound pool
new_pool = batchmodels.PoolAddParameter(
    id=pool_id,
    vm_size=vm_size,
    target_dedicated_nodes=node_count,
    virtual_machine_configuration=vmc,
    start_task=start_task
)

# Create pool in the Batch service
client.pool.add(new_pool)

Azure portal を使用して、共有イメージまたはカスタム イメージからプールを作成する

次の手順を使用し、Azure portal で共有イメージからプールを作成します。

  1. Azure Portalを開きます。
  2. Batch アカウントに進み、自分のアカウントを選択します。
  3. [プール] を選択し、次に [追加] を選択し、新しいプールを作成します。
  4. [イメージの種類] セクションで [Azure Compute Gallery] を選択します。
  5. 残りのセクションにはマネージド イメージに関する情報を入力します。
  6. [OK] を選択します。
  7. ノードが割り当てられたら、[接続] を使って Windows 用のユーザーと RDP ファイルを生成するか、SSH を使って Linux に割り当てられたノードにログインして確認します。

ポータルを使用して共有イメージからプールを作成します。

サイズの大きなプールに関する考慮事項

共有イメージを使用して、数百または数千以上の VM を含むプールを作成する場合は、次のガイダンスを参考にしてください。

  • Azure Compute Gallery のレプリカ数。 最大 300 個のインスタンスを含むプールごとに、少なくとも 1 つのレプリカを保持することをお勧めします。 たとえば、3,000 個の VM を含むプールを作成する場合は、イメージのレプリカを少なくとも 10 個は保持するようにしてください。 パフォーマンスを向上させるために、最小要件よりも多くのレプリカを保持することを常にお勧めします。

  • サイズ変更のタイムアウト。 プールに含まれるノード数が固定の場合 (自動スケーリングしない場合) は、プールのサイズに応じてプールの resizeTimeout プロパティの値を大きくしてください。 サイズ変更のタイムアウトの推奨値は、VM 1,000 個ごとに最短で 15 分です。 たとえば、2,000 個の VM があるプールの場合、サイズ変更のタイムアウトの推奨値は最短で 30 分です。

次のステップ