Gestire le risorse Batch con i cmdlet di PowerShell

Con i cmdlet di Azure Batch PowerShell è possibile eseguire e creare script per molte attività batch comuni. Questa è una rapida introduzione ai cmdlet con cui è possibile gestire gli account Batch e usare risorse di Batch come pool, processi e attività.

Per un elenco completo di cmdlet Batch e per la sintassi dettagliata dei cmdlet, vedere Informazioni di riferimento sui cmdlet di Azure Batch.

È consigliabile eseguire di frequente l'aggiornamento dei moduli di Azure PowerShell per sfruttare i vantaggi degli aggiornamenti e dei miglioramenti del servizio.

Prerequisiti

  • Installare e configurare il modulo Azure PowerShell. Per installare un modulo di Azure Batch specifico, ad esempio una versione non definitiva del modulo, vedere PowerShell Gallery.

  • Eseguire il cmdlet Connect-AzAccount per connettersi alla sottoscrizione. I cmdlet di Azure Batch sono disponibili nel modulo Azure Resource Manager:

    Connect-AzAccount
    
  • Effettuare la registrazione con lo spazio dei nomi del provider di Batch. È necessario eseguire questa operazione solo una volta per ogni sottoscrizione.

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

Gestire gli account e le chiavi Batch

Creare un account Batch

New-AzBatchAccount crea un account Batch in un gruppo di risorse specificato. Se non si ha già un gruppo di risorse, crearne uno eseguendo il cmdlet New-AzResourceGroup. Specificare una delle aree di Azure nel parametro location, ad esempio "Stati Uniti centrali". Ad esempio:

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

Creare quindi un account Batch nel gruppo di risorse. Specificare un nome per l'account in <account_name> e il percorso e il nome del gruppo di risorse. La creazione dell'account Batch può richiedere tempo. Ad esempio:

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

Nota

Il nome dell'account Batch deve essere univoco nell'area di Azure per il gruppo di risorse e contenere tra 3 e 24 caratteri (sono ammessi solo numeri e lettere minuscole).

Ottenere le chiavi di accesso all'account

Get-AzBatchAccountKeys mostra le chiavi di accesso associate a un account Azure Batch. Ad esempio, eseguire le operazioni seguenti per ottenere le chiavi primarie e secondarie dell'account creato.

$Account = Get-AzBatchAccountKeys –AccountName <account_name>

$Account.PrimaryAccountKey

$Account.SecondaryAccountKey

Generare una nuova chiave di accesso

New-AzBatchAccountKey genera una nuova chiave dell'account primaria o secondaria per un account Azure Batch. Ad esempio, per generare una nuova chiave primaria per l'account Batch, digitare:

New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary

Nota

Per generare una nuova chiave secondaria, specificare "Secondary" per il parametro KeyType . È necessario rigenerare la chiave primaria e quella secondaria separatamente.

Eliminare un account Batch

Remove-AzBatchAccount elimina un account Batch. Ad esempio:

Remove-AzBatchAccount -AccountName <account_name>

Quando richiesto, confermare che si desidera rimuovere l'account. La rimozione di un account può richiedere alcuni minuti.

Creare un oggetto BatchAccountContext

È possibile eseguire l'autenticazione per gestire le risorse batch usando l'autenticazione con chiave condivisa o l'autenticazione di Microsoft Entra. Per eseguire l'autenticazione usando i cmdlet di PowerShell per Batch, creare prima un oggetto BatchAccountContext in cui archiviare le credenziali dell'account o l'identità. Passare l'oggetto BatchAccountContext nei cmdlet che usano il parametro BatchContext .

Autenticazione della chiave condivisa

$context = Get-AzBatchAccountKeys -AccountName <account_name>

Nota

Per impostazione predefinita, la chiave primaria dell'account viene usata per l'autenticazione, ma è possibile selezionare in modo esplicito la chiave da usare modificando la proprietà KeyInUse dell'oggetto BatchAccountContext: $context.KeyInUse = "Secondary".

Autenticazione Microsoft Entra

$context = Get-AzBatchAccount -AccountName <account_name>

Creare e modificare le risorse Batch

Usare cmdlet come New-AzBatchPool, New-AzBatchJob e New-AzBatchTask per creare risorse in un account Batch. Sono disponibili cmdlet Get- e Set- corrispondenti per aggiornare le proprietà delle risorse esistenti e cmdlet Remove- per rimuovere le risorse in un account Batch.

Quando si usano molti di questi cmdlet, oltre a passare un oggetto BatchContext è necessario passare oggetti contenenti le impostazioni dettagliate delle risorse, come illustrato nell'esempio seguente. Per altri esempi, vedere la Guida dettagliata dei singoli cmdlet.

Creare un pool di Batch

Quando si crea o si aggiorna un pool di Batch, si specifica una configurazione. I pool devono essere in genere configurati con la configurazione della macchina virtuale, che consente di specificare una delle immagini di macchine virtuali Linux o Windows supportate elencate in Azure Macchine virtuali Marketplace oppure fornire un'immagine personalizzata preparata. Servizi cloud pool di configurazione forniscono solo nodi di calcolo Windows e non supportano tutte le funzionalità di Batch.

Quando si esegue New-AzBatchPool, passare le impostazioni del sistema operativo in un oggetto PSVirtualMachineConfiguration o PSCloudServiceConfiguration. Ad esempio, il frammento di codice seguente crea un pool di Batch con dimensioni Standard_A1 nodi di calcolo nella configurazione della macchina virtuale, immagine con Ubuntu Server 20.04-LTS. In questo caso, il parametro VirtualMachineConfiguration specifica la variabile $configuration come oggetto PSVirtualMachineConfiguration. Il parametro BatchContext specifica una variabile $context definita in precedenza come oggetto BatchAccountContext.

$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

Il numero di nodi di calcolo di destinazione nel nuovo pool è calcolato da una formula di ridimensionamento automatico. In questo caso, la formula è semplicemente $TargetDedicated=4e indica che il numero massimo di nodi di calcolo nel pool è 4.

Query per pool, processi, attività e altri dettagli

Usare cmdlet come Get-AzBatchPool, Get-AzBatchJob e Get-AzBatchTask per eseguire query per le entità create in un account Batch.

Eseguire query per ottenere dati

Ad esempio, usare Get-AzBatchPools per trovare i pool. Per impostazione predefinita, questo comando esegue una query per tutti i pool dell'account, presupponendo che l'oggetto BatchAccountContext sia già archiviato in $context:

Get-AzBatchPool -BatchContext $context

Usare un filtro OData

È possibile fornire un filtro OData tramite il parametro Filter per trovare solo gli oggetti a cui si è interessati. Ad esempio, è possibile trovare tutti i pool con ID che iniziano con "myPool":

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

Get-AzBatchPool -Filter $filter -BatchContext $context

Questo metodo non è flessibile come l'uso di "Where-Object" in una pipeline locale. Tuttavia, la query viene inviata al servizio Batch direttamente e quindi tutti i filtri vengono applicati sul lato server, consentendo un risparmio della larghezza di banda Internet.

Usare il parametro Id

In alternativa a un filtro OData, è possibile usare il parametro Id . Per eseguire una query per un pool specifico con Id "myPool":

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

Il parametro Id supporta solo la ricerca di ID completi, senza caratteri jolly o filtri di tipo OData.

Usare il parametro MaxCount

Per impostazione predefinita, ogni cmdlet restituisce un massimo di 1000 oggetti. Se si raggiunge questo limite, perfezionare il filtro in modo da restituire meno oggetti o impostare esplicitamente un limite massimo tramite il parametro MaxCount . Ad esempio:

Get-AzBatchTask -MaxCount 2500 -BatchContext $context

Per rimuovere il limite superiore, impostare MaxCount su 0 o un valore inferiore.

Usare la pipeline di PowerShell

I cmdlet Batch usano la pipeline di PowerShell per inviare dati tra i cmdlet. Questo equivale a specificare un parametro, ma rende più semplice l'uso di più entità.

Ad esempio, per trovare e visualizzare tutte le attività dell'account:

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

Per riavviare ogni nodo di calcolo in un pool:

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

Gestione dei pacchetti dell'applicazione

I pacchetti dell'applicazione offrono un modo semplificato per distribuire le applicazioni nei nodi di calcolo nei pool. Con i cmdlet di PowerShell per Batch, è possibile caricare e gestire pacchetti dell'applicazione nell'account Batch e distribuire versioni dei pacchetti nei nodi di calcolo.

Importante

Per usare i pacchetti dell'applicazione è necessario collegare un account di Archiviazione di Azure all'account Batch.

Creare un'applicazione:

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

Aggiungere un pacchetto dell'applicazione:

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

Impostare la versione predefinita per l'applicazione:

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

Elencare i pacchetti dell'applicazione

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

$application.ApplicationPackages

Eliminare un pacchetto dell'applicazione

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

Eliminare un'applicazione

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

Nota

È necessario eliminare tutte le versioni dei pacchetti di un'applicazione prima di eliminare l'applicazione. Se si prova a eliminare un'applicazione che ha attualmente pacchetti, verrà visualizzato un errore di conflitto.

Distribuire un pacchetto dell'applicazione

Quando si crea un pool è possibile specificare uno o più pacchetti dell'applicazione da distribuire. Quando si specifica un pacchetto al momento della creazione del pool, il pacchetto viene distribuito in ogni nodo quando questo viene aggiunto al pool. I pacchetti vengono distribuiti anche quando un nodo viene riavviato o ne viene ricreata l'immagine.

Specificare l'opzione -ApplicationPackageReference quando si crea un pool per distribuire un pacchetto dell'applicazione nei nodi del pool quando vengono aggiunti al pool. Creare prima un oggetto PSApplicationPackageReference e configurarlo con l'ID applicazione e la versione del pacchetto da distribuire nei nodi di calcolo del pool:

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

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "1.0"

Creare ora il pool e specificare l'oggetto di riferimento pacchetto come argomento per l'opzione ApplicationPackageReferences:

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

Per altre informazioni sui pacchetti dell'applicazione, vedere Distribuire le applicazioni nei nodi di calcolo con i pacchetti dell'applicazione Batch.

Aggiornare i pacchetti dell’applicazione di un pool

Per aggiornare le applicazioni assegnate a un pool esistente, creare prima un oggetto PSApplicationPackageReference con le proprietà desiderate, ovvero ID applicazione e versione del pacchetto:

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

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "2.0"

Ottenere quindi il pool da Batch, cancellare eventuali pacchetti esistenti, aggiungere il nuovo riferimento al pacchetto e aggiornare il servizio Batch con le nuove impostazioni del pool:

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

$pool.ApplicationPackageReferences.Clear()

$pool.ApplicationPackageReferences.Add($appPackageReference)

Set-AzBatchPool -BatchContext $context -Pool $pool

Le proprietà del pool saranno ora aggiornate nel servizio Batch. Per distribuire il nuovo pacchetto dell'applicazione nei nodi di calcolo del pool è tuttavia necessario riavviare o ricreare l'immagine di tali nodi. È possibile riavviare ogni nodo di un pool con questo comando:

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

Suggerimento

È possibile distribuire più pacchetti dell'applicazione nei nodi di calcolo del pool. Se si vuole aggiungere un pacchetto dell'applicazione invece di sostituire i pacchetti attualmente distribuiti, omettere la $pool.ApplicationPackageReferences.Clear() riga precedente.

Passaggi successivi