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
- Esaminare le informazioni di riferimento sui cmdlet di Azure Batch per informazioni dettagliate sulla sintassi dei cmdlet e sugli esempi.
- Informazioni su come distribuire applicazioni nei nodi di calcolo con i pacchetti dell'applicazione Batch.