Azure Batch PowerShell コマンドレットを使用すると、多くの一般的な Batch タスクを実行してスクリプトを作成できます。 これは、Batch アカウントを管理し、プール、ジョブ、タスクなどの Batch リソースを操作するために使用できるコマンドレットの簡単な概要です。
Batch コマンドレットと詳細なコマンドレット構文の完全な一覧については、 Azure Batch コマンドレットリファレンスを参照してください。
サービスの更新と機能強化を利用するために、Azure PowerShell モジュールを頻繁に更新することをお勧めします。
前提条件
Azure PowerShell モジュールをインストールして構成します。 プレリリース モジュールなど、特定の Azure Batch モジュールをインストールするには、 PowerShell ギャラリーを参照してください。
Connect-AzAccount コマンドレットを実行してサブスクリプションに接続します (Azure Batch コマンドレットは Azure Resource Manager モジュールに付属しています)。
Connect-AzAccount
Batch プロバイダー名前空間に登録します。 この操作は 、サブスクリプションごとに 1 回だけ実行する必要があります。
Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
Batch アカウントとキーの管理
Batch アカウントを作成する
New-AzBatchAccount は、指定されたリソース グループに Batch アカウントを作成します。 リソース グループがまだない場合は、 New-AzResourceGroup コマンドレットを実行して作成します。 Location パラメーターに Azure リージョンの 1 つ ("米国中部" など) を指定します。 例えば次が挙げられます。
New-AzResourceGroup –Name MyBatchResourceGroup –Location "Central US"
次に、リソース グループに Batch アカウントを作成します。 <account_name>のアカウントの名前、およびリソース グループの場所と名前を指定します。 Batch アカウントの作成が完了するまでに時間がかかる場合があります。 例えば次が挙げられます。
New-AzBatchAccount –AccountName <account_name> –Location "Central US" –ResourceGroupName <res_group_name>
注
Batch アカウント名は、リソース グループの Azure リージョンに固有で、3 ~ 24 文字で、小文字と数字のみを使用する必要があります。
アカウント アクセス キーを取得する
Get-AzBatchAccountKeys には、 Azure Batch アカウントに関連付けられているアクセス キーが表示されます。 たとえば、次を実行して、作成したアカウントのプライマリ キーとセカンダリ キーを取得します。
$Account = Get-AzBatchAccountKeys –AccountName <account_name>
$Account.PrimaryAccountKey
$Account.SecondaryAccountKey
新しいアクセス キーを生成する
New-AzBatchAccountKey は、Azure Batch アカウントの新しいプライマリ またはセカンダリ アカウント キーを生成します。 たとえば、Batch アカウントの新しい主キーを生成するには、次のように入力します。
New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary
注
新しいセカンダリ キーを生成するには、 KeyType パラメーターに "Secondary" を指定します。 プライマリ キーとセカンダリ キーを個別に再生成する必要があります。
Batch アカウントを削除する
Remove-AzBatchAccount は Batch アカウントを削除します。 例えば次が挙げられます。
Remove-AzBatchAccount -AccountName <account_name>
メッセージが表示されたら、アカウントを削除することを確認します。 アカウントの削除が完了するまでに時間がかかる場合があります。
BatchAccountContext オブジェクトを作成する
共有キー認証または Microsoft Entra 認証を使用して Batch リソースを管理するための認証を行うことができます。 Batch PowerShell コマンドレットを使用して認証するには、まず BatchAccountContext オブジェクトを作成してアカウントの資格情報または ID を格納します。 BatchAccountContext オブジェクトは、 BatchContext パラメーターを使用するコマンドレットに渡します。
共有キー認証
$context = Get-AzBatchAccountKeys -AccountName <account_name>
注
既定では、アカウントの主キーは認証に使用されますが、BatchAccountContext オブジェクトの KeyInUse プロパティ ( $context.KeyInUse = "Secondary"
) を変更することで、使用するキーを明示的に選択できます。
Microsoft Entra 認証
$context = Get-AzBatchAccount -AccountName <account_name>
Batch リソースの作成と変更
New-AzBatchPool、New-AzBatchJob、New-AzBatchTask などのコマンドレットを使用して、Batch アカウントにリソースを作成します。 既存のリソースのプロパティを更新するための対応する Get コマンドレット と Set コマンドレット と、Batch アカウントでリソースを削除する Remove- コマンドレットがあります。
これらのコマンドレットの多くを使用する場合、BatchContext オブジェクトを渡すだけでなく、次の例に示すように、詳細なリソース設定を含むオブジェクトを作成または渡す必要があります。 その他の例については、各コマンドレットの詳細なヘルプを参照してください。
バッチプールを作成する
Batch プールを作成または更新するときは、 構成を指定します。 プールは通常、仮想マシンの構成を使用して構成する必要があります。これにより、 Azure Virtual Machines Marketplace に一覧表示されているサポートされている Linux または Windows VM イメージのいずれかを指定するか、準備したカスタム イメージを指定できます。 Cloud Services 構成プールでは、Windows コンピューティング ノードのみが提供され、すべての Batch 機能がサポートされるわけではありません。
New-AzBatchPool を実行するときに、PSVirtualMachineConfiguration オブジェクトまたは PSCloudServiceConfiguration オブジェクトでオペレーティング システム設定を渡します。 たとえば、次のスニペットは、Ubuntu Server 20.04-LTS でイメージ化された、仮想マシン構成のコンピューティング ノードStandard_A1サイズの Batch プールを作成します。 ここでは、 VirtualMachineConfiguration パラメーターは 、psVirtualMachineConfiguration オブジェクトとして$configuration変数を指定します。 BatchContext パラメーターは、BatchAccountContext オブジェクトとして$context以前に定義された変数を指定します。
$imageRef = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("UbuntuServer","Canonical","20.04-LTS")
$configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageRef, "batch.node.ubuntu 20.04")
New-AzBatchPool -Id "mypspool" -VirtualMachineSize "Standard_a1" -VirtualMachineConfiguration $configuration -AutoScaleFormula '$TargetDedicated=4;' -BatchContext $context
新しいプール内のコンピューティング ノードのターゲット数は、自動スケール式によって計算されます。 この場合、数式は 単に $TargetDedicated=4 で、プール内のコンピューティング ノードの数が最大で 4 であることを示します。
プール、ジョブ、タスク、その他の詳細についてクエリを実行する
Get-AzBatchPool、Get-AzBatchJob、Get-AzBatchTask などのコマンドレットを使用して、Batch アカウントで作成されたエンティティを照会します。
データのクエリ
たとえば、 Get-AzBatchPools を使用してプールを検索します。 既定では、BatchAccountContext オブジェクトを $context に既に格納していると仮定して、アカウントのすべてのプールに対してクエリを実行します。
Get-AzBatchPool -BatchContext $context
OData フィルターを使用する
Filter パラメーターを使用して OData フィルターを指定すると、関心のあるオブジェクトのみを検索できます。 たとえば、"myPool" で始まる ID を持つすべてのプールを見つけることができます。
$filter = "startswith(id,'myPool')"
Get-AzBatchPool -Filter $filter -BatchContext $context
このメソッドは、ローカル パイプラインで "Where-Object" を使用するほど柔軟ではありません。 ただし、クエリは Batch サービスに直接送信されるため、すべてのフィルター処理がサーバー側で行われるため、インターネット帯域幅が節約されます。
Id パラメーターを使用する
OData フィルターの代わりに 、Id パラメーターを使用します。 ID "myPool" を持つ特定のプールを照会するには:
Get-AzBatchPool -Id "myPool" -BatchContext $context
Id パラメーターは、フル ID 検索のみをサポートします。ワイルドカードまたは OData スタイルのフィルターではありません。
MaxCount パラメーターを使用する
既定では、各コマンドレットは最大 1,000 個のオブジェクトを返します。 この制限に達した場合は、フィルターを調整して返されるオブジェクトの数を減らすか、 MaxCount パラメーターを使用して明示的に最大値を設定します。 例えば次が挙げられます。
Get-AzBatchTask -MaxCount 2500 -BatchContext $context
上限を削除するには、 MaxCount を 0 以下に設定します。
PowerShell パイプラインを使用する
Batch コマンドレットでは、PowerShell パイプラインを使用してコマンドレット間でデータを送信します。 これはパラメーターを指定する場合と同じ効果がありますが、複数のエンティティの操作が容易になります。
たとえば、アカウントのすべてのタスクを検索して表示します。
Get-AzBatchJob -BatchContext $context | Get-AzBatchTask -BatchContext $context
プール内のすべてのコンピューティング ノードを再起動 (再起動) します。
Get-AzBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context
アプリケーション パッケージの管理
アプリケーション パッケージ を使用すると、プール内のコンピューティング ノードにアプリケーションを簡単にデプロイできます。 Batch PowerShell コマンドレットを使用すると、Batch アカウント内のアプリケーション パッケージをアップロードして管理し、パッケージバージョンをコンピューティング ノードにデプロイできます。
重要
アプリケーション パッケージを使用するには、Azure Storage アカウントを Batch アカウントにリンクする必要があります。
アプリケーションを作成します。
New-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
アプリケーション パッケージを追加します。
New-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip
アプリケーションの 既定のバージョン を設定します。
Set-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"
アプリケーションのパッケージを一覧表示する
$application = Get-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
$application.ApplicationPackages
アプリケーション パッケージを削除する
Remove-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"
アプリケーションを削除する
Remove-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
注
アプリケーションを削除する前に、アプリケーションのすべてのアプリケーション パッケージ バージョンを削除する必要があります。 現在アプリケーション パッケージがあるアプリケーションを削除しようとすると、"競合" エラーが表示されます。
アプリケーション パッケージをデプロイする
プールを作成するときに、デプロイ用に 1 つ以上のアプリケーション パッケージを指定できます。 プール作成時にパッケージを指定すると、ノードがプールに参加するときに各ノードにデプロイされます。 パッケージは、ノードが再起動または再イメージ化されるときにもデプロイされます。
プールに参加するときに、アプリケーション パッケージをプールのノードにデプロイするプールを作成するときに、 -ApplicationPackageReference
オプションを指定します。 まず、 PSApplicationPackageReference オブジェクトを作成し、プールのコンピューティング ノードにデプロイするアプリケーション ID とパッケージ バージョンで構成します。
$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference
$appPackageReference.ApplicationId = "MyBatchApplication"
$appPackageReference.Version = "1.0"
次に、プールを作成し、 ApplicationPackageReferences
オプションの引数としてパッケージ参照オブジェクトを指定します。
New-AzBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -VirtualMachineConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference
アプリケーション パッケージの詳細については、Batch アプリケーション パッケージを使用 したコンピューティング ノードへのアプリケーションのデプロイに関するページを参照してください。
プールのアプリケーション パッケージを更新する
既存のプールに割り当てられているアプリケーションを更新するには、まず、必要なプロパティ (アプリケーション ID とパッケージ バージョン) を使用して PSApplicationPackageReference オブジェクトを作成します。
$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference
$appPackageReference.ApplicationId = "MyBatchApplication"
$appPackageReference.Version = "2.0"
次に、Batch からプールを取得し、既存のパッケージをクリアし、新しいパッケージ参照を追加し、新しいプール設定で Batch サービスを更新します。
$pool = Get-AzBatchPool -BatchContext $context -Id "PoolWithAppPackage"
$pool.ApplicationPackageReferences.Clear()
$pool.ApplicationPackageReferences.Add($appPackageReference)
Set-AzBatchPool -BatchContext $context -Pool $pool
これで、Batch サービスのプールのプロパティが更新されました。 ただし、新しいアプリケーション パッケージをプール内のコンピューティング ノードに実際にデプロイするには、それらのノードを再起動または再イメージ化する必要があります。 次のコマンドを使用して、プール内のすべてのノードを再起動できます。
Get-AzBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context
ヒント
プール内のコンピューティング ノードに複数のアプリケーション パッケージをデプロイできます。 現在デプロイされているパッケージを置き換える代わりにアプリケーション パッケージを追加する場合は、上記の $pool.ApplicationPackageReferences.Clear()
行を省略します。
次のステップ
- 詳細なコマンドレットの構文と例 については、Azure Batch コマンドレット リファレンスを参照 してください。
- Batch アプリケーション パッケージを使用してコンピューティング ノードにアプリケーションをデプロイする方法について説明します。