Azure Batch プールを作成するときは、プールの構成を定義する特定のプロパティを指定します。 たとえば、VM のサイズ、使用する VM イメージ、仮想ネットワーク構成、暗号化設定などを指定します。 ただし、経時的に生じたワークロードの変化や VM イメージの有効期限切れなどにより、プール プロパティの更新が必要になることがあります。
これらの状況に対応するために、一部のプール プロパティは修正プログラムを適用したり更新したりできますが、すべてではありません。 この記事では、更新できるプール プロパティ、プール プロパティの更新時に想定される動作について説明し、例を示します。
ヒント
一部のプール プロパティは、Entra 認証と共に Batch Management Plane API または SDK を使用してのみ更新できます。 これらの操作を使用するには、適切な API または SDK をインストールして使用する必要があります。
更新可能なプール プロパティ
Batch プール プロパティを更新するには複数の方法があります。 使用する API を選ぶと、更新できるプール プロパティのセットと更新の動作が決まります。
Note
以下の Update API または Patch API に含まれないプール プロパティを更新する場合、目的の状態を反映するにはプールを作成し直す必要があります。
管理プレーン: Pool - Update
プール プロパティを更新するための推奨されるパスは、Batch Management Plane API または SDK に含まれる Pool - Update API を使うことです。 この API は、プールのプロパティを更新するための最も包括的で柔軟な方法を提供します。 この API を使用すると、管理プレーンのみのプール プロパティを選択して更新できるほか、データ プレーン API 経由では変更できないその他のプロパティも更新できるようになります。
重要
このセクションでの説明に従いプール プロパティを更新するには、Batch Management Plane API のバージョン 2024-07-01 以降を使用する必要があります。
この操作は PATCH であるため、要求で指定したプール プロパティのみが更新されます。
要求でプロパティが指定されていない場合、既存の値は変更されません。
一部のプロパティは、プール内にアクティブなノードがない場合、またはプール内のコンピューティング ノードの合計数が 0 の場合にのみ更新できます。 以下のプロパティは、新しい値を有効にするためにプールのサイズがゼロである必要がありません。
- applicationPackages
- certificates
- メタデータ
- scaleSettings
- startTask
これらのプロパティでプールを更新する際にアクティブなノードが存在する場合、変更を有効にするにはアクティブなコンピューティング ノードの再起動が必要になる場合があります。 詳細については、各プール プロパティのドキュメントを参照してください。
他のすべての更新可能なプール プロパティについては、更新要求の一部として受け入れられるにはプールがサイズ ゼロのノードである必要があります。
Pool - Create API を使用してこれらの選択プロパティを更新することもできますが、操作が PUT であるため、要求によって既存のすべてのプロパティが完全に置き換えられます。 したがって、要求で指定されていないプロパティはすべて削除されるか、関連付けられている既定値に設定されます。
例: VM イメージの仕様を更新する
次の例では、Management Plane C# SDK を使用してプール VM イメージの構成を更新する方法を示します。
public async Task UpdatePoolVmImage()
{
// Authenticate
var clientId = Environment.GetEnvironmentVariable("CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET");
var tenantId = Environment.GetEnvironmentVariable("TENANT_ID");
var subscriptionId = Environment.GetEnvironmentVariable("SUBSCRIPTION_ID");
ClientSecretCredential credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
ArmClient client = new ArmClient(credential, subscriptionId);
// Get an existing Batch account
string resourceGroupName = "<resourcegroup>";
string accountName = "<batchaccount>";
ResourceIdentifier batchAccountResourceId = BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, accountName);
BatchAccountResource batchAccount = client.GetBatchAccountResource(batchAccountResourceId);
// get the collection of this BatchAccountPoolResource
BatchAccountPoolCollection collection = batchAccount.GetBatchAccountPools();
// Update the pool
string poolName = "mypool";
BatchAccountPoolData data = new BatchAccountPoolData()
{
DeploymentConfiguration = new BatchDeploymentConfiguration()
{
VmConfiguration = new BatchVmConfiguration(new BatchImageReference()
{
Publisher = "MicrosoftWindowsServer",
Offer = "WindowsServer",
Sku = "2022-datacenter-azure-edition-smalldisk",
Version = "latest",
},
nodeAgentSkuId: "batch.node.windows amd64"),
},
};
ArmOperation<BatchAccountPoolResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, poolName, data);
BatchAccountPoolResource result = lro.Value;
BatchAccountPoolData resourceData = result.Data;
Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}
例: VM サイズとターゲット ノードの通信モードを更新する
次の例では、REST API を使用してプール VM イメージ サイズとターゲット ノード通信モードを簡単に更新する方法を示します。
PATCH https://management.azure.com/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2024-07-01
要求本文
{
"type": "Microsoft.Batch/batchAccounts/pools",
"parameters": {
"properties": {
"vmSize": "standard_d32ads_v5",
"targetNodeCommunicationMode": "simplified"
}
}
}
データ プレーン: Pool - Patch/Update Properties
データ プレーンには、一部のプール プロパティについてパッチ適用または更新する機能があります。 使用可能な API は、Batch データ プレーン API または SDK の一部としてのプール - 更新プロパティ API です。
Update Properties API を使用すると、ドキュメントで指定されているプール プロパティの一部の更新を行うことができます。 この要求では既存のプロパティが完全に置き換えられるため、要求で指定されていないプロパティはすべて削除されます。
次のプロパティの変更を有効にするには、コンピューティング ノードを再起動する必要があります。
- applicationPackageReferences
- certificateReferences
- startTask
targetNodeCommunicationMode プロパティを更新するには、プールのサイズをアクティブ ノード数ゼロに変更する必要があります。
よく寄せられる質問
- プールにアクティブなノードがある間にプール プロパティを更新した後で、他の操作を実行する必要がありますか?
はい。アクティブ ノードで更新できるプール プロパティには、コンピューティング ノードを再起動する必要があるプロパティがいくつかあります。 または、プールを 0 ノードにスケールダウンして、変更されたプロパティを反映することもできます。
- プールにアクティブなノードがある間に、プールのマネージド ID コレクションを変更できますか?
できますが、その操作は行なわないでください。 Batch では、アクティブなノードのあるコレクションの変更は禁止されていませんが、プールがスケールアウトした場合に ID コレクションの不整合が発生するため、行わないことをお勧めします。このプロパティの更新は、プールのサイズが 0 の場合にのみ行うことをお勧めします。 詳細については、「マネージド ID を構成する」の記事を参照してください。
次のステップ
- 利用可能な Batch の API とツール の詳細について学習します。
- プールおよびノードのエラーを確認する方法について学習します。