Hantera Batch-resurser med PowerShell-cmdletar

Med Azure Batch PowerShell-cmdletar kan du utföra och skripta många vanliga Batch-uppgifter. Det här är en snabb introduktion till de cmdletar som du kan använda för att hantera Batch-konton och arbeta med Batch-resurser, t.ex. pooler, jobb och uppgifter.

En fullständig lista över alla Batch-cmdlets och en detaljerad cmdlet-syntax finns i Cmdlet-referens för Azure Batch.

Vi rekommenderar att du uppdaterar Azure PowerShell-moduler ofta för att dra nytta av tjänstuppdateringar och förbättringar.

Förutsättningar

  • Installera och konfigurera Azure PowerShell-modulen. Information om hur du installerar en viss Azure Batch-modul, till exempel en förhandsversion av en modul, finns i PowerShell-galleriet.

  • Kör cmdleten Connect-AzAccount för att ansluta till din prenumeration (Azure Batch-cmdletar medföljer Azure Resource Manager-modulen):

    Connect-AzAccount
    
  • Registrera med Batch-leverantörens namnområde. Du behöver bara utför den här åtgärden en gång per prenumeration.

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

Hantera Batch-konton och nycklar

Skapa ett Batch-konto

New-AzBatchAccount skapar ett Batch-konto i en angiven resursgrupp. Om du inte redan har en resursgrupp skapar du en genom att köra cmdleten New-AzResourceGroup. Ange ett av Azure-områdena i parametern Plats, till exempel "USA, centrala". Till exempel:

New-AzResourceGroup –Name MyBatchResourceGroup –Location "Central US"

Skapa sedan ett Batch-konto i resursgruppen. Ange ett namn för kontot i <account_name> och platsen och namnet på resursgruppen. Det kan ta en stund innan skapandet av Batch-kontot har slutförts. Till exempel:

New-AzBatchAccount –AccountName <account_name> –Location "Central US" –ResourceGroupName <res_group_name>

Kommentar

Batch-kontonamnet måste vara unikt för Azure-regionen för resursgruppen, innehålla mellan 3 och 24 tecken och endast bestå av små bokstäver och siffror.

Hämta kontoåtkomstnycklar

Get-AzBatchAccountKeys visar åtkomstnycklarna som är associerade med ett Azure Batch-konto. Kör till exempel följande för att hämta de primära och sekundära nycklarna för det konto som du skapade.

$Account = Get-AzBatchAccountKeys –AccountName <account_name>

$Account.PrimaryAccountKey

$Account.SecondaryAccountKey

Generera en ny åtkomstnyckel

New-AzBatchAccountKey genererar en ny primär eller sekundär kontonyckel för ett Azure Batch-konto. Om du till exempel vill skapa en ny primär nyckel för Batch-kontot skriver du:

New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary

Kommentar

Om du vill skapa en ny sekundär nyckel anger du ”Secondary” för parametern KeyType. Du måste återskapa de primära och sekundära nycklarna separat.

Ta bort ett Batch-konto

Remove-AzBatchAccount tar bort ett Batch-konto. Till exempel:

Remove-AzBatchAccount -AccountName <account_name>

När du uppmanas att göra det bekräftar du att du vill ta bort kontot. Det kan ta en stund innan kontot tagits bort.

Skapa ett BatchAccountContext-objekt

Du kan autentisera för att hantera Batch-resurser med antingen autentisering med delad nyckel eller Microsoft Entra-autentisering. Om du vill autentisera med hjälp av Batch PowerShell-cmdletar skapar du förs ett BatchAccountContext-objekt för att lagra dina kontouppgifter eller din identitet. Du skickar BatchAccountContext-objektet till cmdlets som använder parametern BatchContext.

Autentisering med delad nyckel

$context = Get-AzBatchAccountKeys -AccountName <account_name>

Kommentar

Som standard används kontots primära nyckel för autentisering, men du kan uttryckligen välja vilken nyckel som ska användas genom att ändra BatchAccountContext-objektets KeyInUse-egenskap: $context.KeyInUse = "Secondary".

Microsoft Entra-autentisering

$context = Get-AzBatchAccount -AccountName <account_name>

Skapa och ändra Batch-resurser

Använd cmdletar som New-AzBatchPool, New-AzBatchJob och New-AzBatchTask för att skapa resurser under ett Batch-konto. Det finns motsvarande cmdlets för Get- och Set- som du kan använda för att uppdatera egenskaperna för befintliga resurser, och cmdlets för Remove- som du använder om du vill ta bort resurser under ett Batch-konto.

När du använder många av dessa cmdletar måste du, förutom att skicka ett BatchContext-objekt, skapa eller skicka objekt som innehåller detaljerade resursinställningar, så som visas i följande exempel. Visa den detaljerade hjälpinformationen för respektive cmdlet om du vill ha fler exempel.

Skapa en Batch-pool

När du skapar eller uppdaterar en Batch-pool anger du en konfiguration. Pooler bör vanligtvis konfigureras med Konfiguration av virtuella datorer, vilket gör att du antingen kan ange en av de Linux- eller Windows VM-avbildningar som stöds som visas på Azure Virtual Machines Marketplace eller tillhandahålla en anpassad avbildning som du har förberett. Cloud Services-konfigurationspooler tillhandahåller endast Windows-beräkningsnoder och stöder inte alla Batch-funktioner.

När du kör New-AzBatchPool skickar du inställningarna för operativsystemet i ett PSVirtualMachineConfiguration- eller PSCloudServiceConfiguration-objekt. Följande kodfragment skapar till exempel en Batch-pool med storlek Standard_A1 beräkningsnoder i konfigurationen av den virtuella datorn, avbildning med Ubuntu Server 20.04-LTS. Här anger parametern VirtualMachineConfiguration variabeln $configuration som PSVirtualMachineConfiguration-objekt. Parametern BatchContext anger en tidigare definierad variabel, $context, som BatchAccountContext-objektet.

$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

Beräkningsnodernas målantal i den nya poolen beräknas med en autoskalningsformel. I det här fallet är formeln helt enkelt $TargetDedicated=4, vilket indikerar att antalet beräkningsnoder i poolen som mest är 4.

Fråga avseende pooler, jobb, uppgifter och annan information

Använd cmdletar som Get-AzBatchPool, Get-AzBatchJob och Get-AzBatchTask för att fråga efter entiteter som skapats under ett Batch-konto.

Fråga efter data

Använd till exempel Get-AzBatchPools för att hämta dina pooler. Som standard returneras alla pooler i ditt konto, förutsatt att du redan har lagrat BatchAccountContext-objektet i $context:

Get-AzBatchPool -BatchContext $context

Använda ett OData-filter

Du kan lägga till ett OData-filter med parametern Filter om du bara vill söka efter de objekt som du är intresserad av. Du kan till exempel hämta alla pooler med ID:n som börjar med ”myPool”:

$filter = "startswith(id,'myPool')"

Get-AzBatchPool -Filter $filter -BatchContext $context

Den här metoden är inte lika flexibel som ”Where-Object”-metoden i en lokal pipeline. Frågan skickas dock direkt till Batch-tjänsten så att all filtrering utförs på serversidan, vilket sparar Internetbandbredd.

Använda Id-parametern

Ett alternativ till ett OData-filter är att använda parametern Id. Så här frågar du efter en specifik pool med ID:t ”myPool”:

Get-AzBatchPool -Id "myPool" -BatchContext $context

Parametern Id stöder endast sökningar efter fullständiga ID:n, inte jokertecken eller OData-filter.

Använda parametern MaxCount

Som standard returnerar varje cmdlet högst 1 000 objekt. Om du når den här gränsen kan du antingen förfina filtret så att färre objekt returneras eller uttryckligen ställa in ett högsta antal med parametern MaxCount. Till exempel:

Get-AzBatchTask -MaxCount 2500 -BatchContext $context

Om du vill ta bort den övre gränsen anger du MaxCount till 0 eller mindre.

Använd PowerShell pipeline

Batch-cmdletar använder PowerShell-pipelinen för att skicka data mellan cmdletar. Detta har samma effekt som om du anger en parameter men gör det enklare att arbeta med flera entiteter.

Exempelvis söka efter och visa alla aktiviteter på ditt konto:

Get-AzBatchJob -BatchContext $context | Get-AzBatchTask -BatchContext $context

Starta om varje beräkningsnod i en pool:

Get-AzBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context

Hantera programpaket

Programpaket är ett förenklat sätt att distribuera program till beräkningsnoderna i dina pooler. Med Batch-PowerShell-cmdlet:ar kan du överföra och hantera programpaket i Batch-kontot och distribuera paketversioner för att beräkna noder.

Viktigt!

Du måste koppla ett Azure Storage-konto till Batch-kontot för att använda programpaket.

Skapa ett program:

New-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

Lägg till ett programpaket:

New-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip

Ange standardversionen för programmet:

Set-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"

Lista ett programs paket

$application = Get-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

$application.ApplicationPackages

Ta bort ett programpaket

Remove-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"

Ta bort ett program

Remove-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

Kommentar

Du måste ta bort alla programpaketversioner innan du tar bort ett program. Du får ett konfliktfel om du försöker ta bort ett program som för närvarande har programpaket.

Distribuera ett programpaket

Du kan ange ett eller flera programpaket för distribution när du skapar en pool. När du anger ett paket när poolen skapas distribueras den till varje nod när noden ansluter till poolen. Paket distribueras också när en nod startas om eller när en avbildning återställs.

Ange alternativet -ApplicationPackageReference när du skapar en pool för att distribuera ett programpaket till poolen noder efterhand som de ansluts till poolen. Skapa först ett PSApplicationPackageReference-objekt och konfigurera det med program-ID:t och den paketversion som du vill distribuera till poolens beräkningsnoder:

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "1.0"

Skapa nu poolen och ange paketreferensobjekt som argument till ApplicationPackageReferences-alternativet:

New-AzBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -VirtualMachineConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference

Mer information om programpaket finns i Deploy applications to compute nodes with Batch application packages (Distribuera program till beräkningsnoder med Batch-programpaket).

Uppdatera programpaket för en pool

Om du vill uppdatera program som är tilldelade till en befintlig pool skapar du ett PSApplicationPackageReference-objekt med önskade egenskaper (program-ID och paketversion):

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "2.0"

Hämta sedan poolen från Batch, rensa eventuella befintliga paket, lägg till den nya paketreferensen och uppdatera Batch-tjänsten med de nya poolinställningarna:

$pool = Get-AzBatchPool -BatchContext $context -Id "PoolWithAppPackage"

$pool.ApplicationPackageReferences.Clear()

$pool.ApplicationPackageReferences.Add($appPackageReference)

Set-AzBatchPool -BatchContext $context -Pool $pool

Poolens egenskaper i Batch-tjänsten har nu uppdaterats. Du måste starta om eller återställa avbildningen av noder om du vill distribuera nya programpaket för beräkningsnoder i poolen. Du kan starta om varje nod i en pool med det här kommandot:

Get-AzBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context

Dricks

Du kan distribuera flera programpaket till beräkningsnoder i poolen. Om du vill lägga till ett programpaket i stället för att ersätta de för närvarande distribuerade paketen $pool.ApplicationPackageReferences.Clear() utelämnar du raden ovan.

Nästa steg