Gestire le risorse di Batch con i cmdlet di PowerShell

Con i cmdlet di PowerShell Azure Batch, è possibile eseguire lo script di molte attività di Batch comuni. Questa è un'introduzione rapida ai cmdlet che è possibile usare per gestire gli account Batch e usare le risorse batch, ad esempio pool, processi e attività.

Per un elenco completo dei cmdlet batch e della sintassi dettagliata dei cmdlet, vedere le informazioni di riferimento sui cmdlet di Azure Batch.

È consigliabile aggiornare spesso i moduli 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 Azure Batch specifico, ad esempio un modulo non rilasciato, vedere il PowerShell Gallery.

  • Eseguire il cmdlet Connect-AzAccount per connettersi alla sottoscrizione (i cmdlet Azure Batch vengono forniti nel modulo Azure Resource Manager):

    Connect-AzAccount
    
  • Registrarsi nel namespace del provider Batch. Questa operazione deve essere eseguita una sola volta per ogni sottoscrizione.

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

Gestire gli account e le chiavi di 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 Azure nel parametro Location, ad esempio "Stati Uniti centrali". Per 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 del tempo. Per esempio:

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

Annotazioni

Il nome dell'account Batch deve essere univoco per l'area Azure per il gruppo di risorse, contenere tra 3 e 24 caratteri e usare solo lettere minuscole e numeri.

Ottenere le chiavi di accesso dell'account

Get-AzBatchAccountKeys mostra le chiavi di accesso associate a un account Azure Batch. Ad esempio, eseguire il comando seguente 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 primario o secondario 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

Annotazioni

Per generare una nuova chiave secondaria, specificare "Secondary" per il parametro KeyType . È necessario rigenerare separatamente le chiavi primarie e secondarie.

Eliminare un account Batch

Remove-AzBatchAccount elimina un account Batch. Per esempio:

Remove-AzBatchAccount -AccountName <account_name>

Quando richiesto, confermare di voler rimuovere l'account. Il completamento della rimozione dell'account può richiedere del tempo.

Creare un oggetto BatchAccountContext

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

Autenticazione con chiave condivisa

$context = Get-AzBatchAccountKeys -AccountName <account_name>

Annotazioni

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 di 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 i cmdlet Remove- per rimuovere le risorse in un account Batch.

Quando si usano molti di questi cmdlet, oltre a passare un oggetto BatchContext, è necessario creare o passare oggetti che contengono impostazioni dettagliate delle risorse, come illustrato nell'esempio seguente. Per altri esempi, vedere la Guida dettagliata per ogni cmdlet.

Crea un pool 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 nel marketplace Macchine virtuali di Azure oppure fornire un'immagine personalizzata preparata. I pool di configurazione dei servizi cloud forniscono solo Windows nodi di calcolo 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. Il frammento di codice seguente, ad esempio, crea un pool di Batch con nodi di calcolo di dimensioni Standard_A1 nella configurazione della macchina virtuale. L'immagine viene creata 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 definita in precedenza $context 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 destinazione dei nodi di calcolo nel nuovo pool viene calcolato da una formula di scalabilità automatica. In questo caso, la formula è semplicemente $TargetDedicated=4, a indicare che il numero di nodi di calcolo nel pool è 4 al massimo.

Esegui query su 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, questa operazione interroga tutti i pool nel tuo account, supponendo che l'oggetto BatchAccountContext sia già stato archiviato in $context:

Get-AzBatchPool -BatchContext $context

Usare un filtro OData

È possibile fornire un filtro OData usando 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 direttamente al servizio Batch in modo che tutto il filtro avvenga sul lato server, risparmiando la larghezza di banda Internet.

Usare il parametro ID

Un'alternativa a un filtro OData consiste nell'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 per ID completo; non caratteri jolly né filtri in stile OData.

Usare il parametro MaxCount

Per impostazione predefinita, ogni cmdlet restituisce un massimo di 1000 oggetti. Se si raggiunge questo limite, perfezionare il filtro per riportare meno oggetti o impostare in modo esplicito un valore massimo usando il parametro MaxCount . Per esempio:

Get-AzBatchTask -MaxCount 2500 -BatchContext $context

Per rimuovere il limite superiore, impostare MaxCount su 0 o meno.

Usare la pipeline di PowerShell

I cmdlet batch usano la pipeline di PowerShell per inviare dati tra i cmdlet. Questo ha lo stesso effetto di specificare un parametro, ma semplifica l'uso di più entità.

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

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

Riavviare (riavviare) ogni nodo di calcolo in un pool:

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

Gestione 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 Batch PowerShell, è possibile caricare e gestire i pacchetti dell'applicazione nell'account Batch e distribuire le versioni dei pacchetti nei nodi di calcolo.

Importante

Per usare i pacchetti dell'applicazione, è necessario collegare un account 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 di un'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"

Annotazioni

È necessario eliminare tutte le versioni del pacchetto dell'applicazione di un'applicazione prima di eliminare l'applicazione. Viene visualizzato un errore "Conflict" se si tenta di eliminare un'applicazione che attualmente contiene pacchetti applicativi.

Distribuire un pacchetto dell'applicazione

È possibile specificare uno o più pacchetti di applicazioni per la distribuzione quando si crea un pool. Quando si specifica un pacchetto al momento della creazione del pool, questo viene distribuito in ciascun nodo quando il nodo si unisce al pool. I pacchetti vengono distribuiti anche quando un nodo viene riavviato o viene reinstallata l'immagine.

Specificare l'opzione -ApplicationPackageReference quando si crea un pool per distribuire un pacchetto applicazione ai nodi del pool man mano che si aggiungono al pool. Creare innanzitutto 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 del pacchetto come argomento dell'opzione ApplicationPackageReferences:

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

Per altre informazioni sui pacchetti dell'applicazione, vedere Distribuire 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 di tutto un oggetto PSApplicationPackageReference con le proprietà desiderate (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

Hai appena aggiornato le proprietà del pool nel servizio Batch. Per distribuire effettivamente il nuovo pacchetto dell'applicazione nei nodi di calcolo nel pool, è tuttavia necessario riavviare o creare di nuovo l'immagine di tali nodi. È possibile riavviare ogni nodo in un pool con questo comando:

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

Tip

È possibile distribuire più pacchetti dell'applicazione nei nodi di calcolo in un 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