Distribuire le applicazioni nei nodi di calcolo con i pacchetti dell'applicazione Batch

I pacchetti dell'applicazione possono semplificare il codice nella soluzione Azure Batch e semplificare la gestione delle applicazioni eseguite dalle attività. I pacchetti dell'applicazione consentono di caricare e gestire più versioni delle applicazioni eseguite dalle attività, inclusi i file di supporto. È quindi possibile di distribuire automaticamente una o più applicazioni nei nodi di calcolo del pool.

Le API per la creazione e la gestione dei pacchetti dell'applicazione fanno parte della libreria di gestione Batch per .NET. Le API per l'installazione dei pacchetti dell'applicazione in un nodo di calcolo sono parte della raccolta Batch .NET. Le funzionalità confrontabili sono disponibili nelle API Batch disponibili per altri linguaggi di programmazione.

Questo articolo illustra come caricare e gestire i pacchetti dell'applicazione nel portale di Azure. Illustra anche come installarli nei nodi di calcolo di un pool con la libreria Batch .NET .

Requisiti dei pacchetti dell'applicazione

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

Sono previste restrizioni al numero di applicazioni e di pacchetti dell'applicazione in un account Batch e alle dimensioni massime del pacchetto dell'applicazione. Per altre informazioni, vedere Quote e limiti del servizio Batch.

Nota

I pool di Batch creati prima del 5 luglio 2017 non supportano i pacchetti dell'applicazione (a meno che non siano stati creati dopo il 10 marzo 2016 usando Servizi cloud Configuration). La funzionalità dei pacchetti dell’applicazione descritta di seguito sostituisce la funzionalità App Batch disponibile nelle versioni precedenti del servizio.

Informazioni sulle applicazioni e sui pacchetti dell'applicazione

Per applicazione in Azure Batch si intende un set di file binari con versione che possono essere scaricati automaticamente nei nodi di calcolo del pool. Un'applicazione contiene uno o più pacchetti dell'applicazione, che rappresentano versioni diverse dell'applicazione.

Ogni pacchetto dell'applicazione è un file .zip che contiene i file binari dell'applicazione e tutti i file di supporto. È supportato solo il formato .zip.

Diagramma che mostra una visualizzazione generale delle applicazioni e dei pacchetti dell'applicazione.

È possibile specificare i pacchetti dell'applicazione a livello di pool o attività.

  • pacchetti dell'applicazione del pool vengono distribuiti in ogni nodo del pool. Le applicazioni vengono distribuite quando un nodo viene aggiunto a un pool e quando viene riavviato o ricreato l'immagine.

    I pacchetti dell'applicazione pool sono appropriati quando tutti i nodi di un pool eseguono le attività di un processo. È possibile specificare uno o più pacchetti dell'applicazione da distribuire quando si crea un pool. È anche possibile aggiungere o aggiornare i pacchetti di un pool esistente. Per installare un nuovo pacchetto in un pool esistente, è necessario riavviare i relativi nodi.

  • pacchetti dell'applicazione per le attività vengono distribuiti solo in un nodo di calcolo che dovrà eseguire un'attività, appena prima di eseguire la riga di comando dell'attività. Se il pacchetto e la versione dell'applicazione specificati sono già presenti nel nodo, non viene ridistribuito e viene usato il pacchetto esistente.

    I pacchetti dell'applicazione attività sono utili negli ambienti del pool condiviso, in cui vengono eseguiti processi diversi in un pool e il pool non viene eliminato al termine di un processo. Se il processo ha meno attività rispetto ai nodi nel pool, i pacchetti dell'applicazione attività possono ridurre al minimo il trasferimento dei dati, poiché l'applicazione viene distribuita solo nei nodi che eseguono attività.

    Altri scenari che possono trarre vantaggio dai pacchetti dell'applicazione di attività sono processi che eseguono un'applicazione di grandi dimensioni, ma solo per alcune attività. Ad esempio, le applicazioni di attività possono essere utili per una fase di pre-elaborazione pesante o un'attività di merge.

Con i pacchetti dell'applicazione non è necessario che l'attività di avvio del pool specifichi un lungo elenco di singoli file di risorse da installare nei nodi. Non è necessario gestire manualmente più versioni dei file dell'applicazione in Archiviazione di Azure o nei nodi. Non è necessario preoccuparsi della generazione di URL di firma di accesso condiviso per fornire l'accesso ai file nell'account di archiviazione di Azure. Batch interagisce in background con Archiviazione di Azure per archiviare e distribuire i pacchetti dell'applicazione nei nodi di calcolo.

Nota

Le dimensioni totali di un'attività di avvio devono essere inferiori o uguali a 32.768 caratteri, inclusi i file di risorse e le variabili di ambiente. Se l'attività di avvio supera questo limite, l'uso dei pacchetti dell'applicazione è un'altra opzione. È anche possibile creare un file di .zip contenente i file di risorse, caricare il file come BLOB in Archiviazione di Azure e quindi decomprimerlo dalla riga di comando dell'attività di avvio.

Caricare e gestire le applicazioni

È possibile usare il portale di Azure o le API Management di Batch per gestire i pacchetti dell'applicazione nell'account Batch. Le sezioni seguenti illustrano come collegare un account di archiviazione, si apprenderà come aggiungere e gestire applicazioni e pacchetti di applicazioni nel portale di Azure.

Nota

Sebbene sia possibile definire i valori dell'applicazione nella risorsa Microsoft.Batch/batchAccounts di un modello di Resource Manager, non è attualmente possibile usare un modello di Resource Manager per caricare i pacchetti dell'applicazione da usare nell'account Batch. È necessario caricarli nell'account di archiviazione collegato come descritto in Aggiungere una nuova applicazione.

Per usare i pacchetti dell'applicazione, è necessario collegare un account di archiviazione di Azure all'account Batch. Il servizio Batch usa l'account di archiviazione associato per archiviare i pacchetti dell'applicazione. Idealmente, è consigliabile creare un account di archiviazione specifico per l'uso con l'account Batch.

Se non è ancora stato configurato un account di archiviazione, il portale di Azure visualizza un avviso la prima volta che si seleziona Applicazioni dal menu di spostamento a sinistra nell'account Batch. Per collegare un account di archiviazione all'account Batch:

  1. Selezionare la finestra Avviso in cui viene visualizzato il messaggio "Nessun account di archiviazione configurato per questo account batch".
  2. Scegliere quindi Account di archiviazione impostato... nella pagina successiva.
  3. Scegliere il collegamento Selezionare un account di archiviazione nella sezione Informazioni sull'account di archiviazione .
  4. Selezionare l'account di archiviazione che si vuole usare con questo account batch nell'elenco nel riquadro Scegli account di archiviazione .
  5. Selezionare quindi Salva nell'angolo superiore sinistro della pagina.

Dopo aver collegato i due account, Batch può distribuire automaticamente i pacchetti archiviati nell'account di archiviazione collegato ai nodi di calcolo.

Importante

Non è possibile usare i pacchetti dell'applicazione con gli account di archiviazione di Azure configurati con le regole del firewall o con lo spazio dei nomi gerarchico impostato su Abilitato.

Il servizio Batch usa Archiviazione di Azure per archiviare i pacchetti dell'applicazione come BLOB in blocchi. Vengono addebitati i costi normali per i dati BLOB in blocchi e le dimensioni di ogni pacchetto non possono superare le dimensioni massime del BLOB in blocchi. Per altre informazioni, vedere Obiettivi di scalabilità e prestazioni per Archiviazione BLOB. Per ridurre al minimo i costi, considerare le dimensioni e il numero dei pacchetti dell'applicazione e rimuovere periodicamente i pacchetti deprecati.

Aggiungere un’applicazione nuova

Per creare una nuova applicazione, aggiungere un pacchetto dell'applicazione e specificare un ID applicazione univoco.

Nell'account Batch selezionare Applicazioni dal menu di spostamento a sinistra e quindi selezionare Aggiungi.

Screenshot del processo di creazione della nuova applicazione nel portale di Azure.

Immettere le seguenti informazioni:

  • ID applicazione: ID della nuova applicazione.
  • Versione": versione per il pacchetto dell'applicazione che si sta caricando.
  • Pacchetto dell'applicazione: il file .zip contenente i file binari dell'applicazione e i file di supporto necessari per eseguire l'applicazione.

L'ID applicazione e la versione immessi devono soddisfare i requisiti seguenti:

  • Nei nodi di Windows, l'ID può contenere qualsiasi combinazione di caratteri alfanumerici, trattini e caratteri di sottolineatura. Nei nodi di Linux, sono consentiti solo caratteri alfanumerici e caratteri di sottolineatura.
  • Non può contenere più di 64 caratteri.
  • Deve essere univoco nell’account Batch.
  • Gli ID non fanno distinzione tra maiuscole e minuscole, ma la differenza viene mantenuta.

Al termine, selezionare Invia. Dopo il caricamento del file di .zip nell'account di archiviazione di Azure, nel portale viene visualizzata una notifica. A seconda delle dimensioni del file che si sta caricando e della velocità della connessione di rete, questo processo potrebbe richiedere del tempo.

Visualizzare le applicazioni correnti

Per visualizzare le applicazioni nell'account Batch, selezionare Applicazioni nel menu di spostamento a sinistra.

Screenshot della voce di menu Applicazioni nel portale di Azure.

Selezionando questa opzione di menu si apre la finestra Applicazioni . La finestra visualizza l'ID di ogni applicazione nell'account e le proprietà seguenti:

  • Pacchetti: il numero delle versioni associate a questa applicazione.
  • Versione predefinita: se applicabile, la versione dell'applicazione installata se non viene specificata alcuna versione durante la distribuzione dell'applicazione.
  • Consenti aggiornamenti: specifica se sono consentiti aggiornamenti ed eliminazioni dei pacchetti.

Per visualizzare la struttura di file del pacchetto dell'applicazione in un nodo di calcolo, passare all'account Batch nel portale di Azure. Selezionare Pool. Selezionare quindi il pool che contiene il nodo di calcolo. Selezionare il nodo di calcolo in cui è installato il pacchetto dell'applicazione e aprire la cartella delle applicazioni .

Visualizzare i dettagli dell'applicazione

Per visualizzare i dettagli di un'applicazione, selezionarlo nella finestra Applicazioni . È possibile configurare l'applicazione selezionando Impostazioni nel menu di spostamento a sinistra.

  • Consenti aggiornamenti: indica se i pacchetti dell'applicazione possono essere aggiornati o eliminati. Il valore predefinito è . Se è impostato su No, i pacchetti dell'applicazione esistenti non possono essere aggiornati o eliminati, ma è comunque possibile aggiungere nuove versioni del pacchetto dell'applicazione.
  • Versione predefinita: il pacchetto dell'applicazione predefinito da usare quando l'applicazione viene distribuita se non viene specificata alcuna versione.
  • Nome visualizzato: nome descrittivo che la soluzione Batch può usare quando visualizza informazioni sull'applicazione. Ad esempio, questo nome può essere usato nell'interfaccia utente di un servizio fornito ai clienti tramite Batch.

Aggiungere un nuovo pacchetto dell’applicazione

Per aggiungere una versione del pacchetto dell'applicazione per un'applicazione esistente, selezionare l'applicazione nella pagina Applicazioni dell'account Batch. Quindi selezionare Aggiungi.

Come è stato fatto per la nuova applicazione, specificare la versione per il nuovo pacchetto, caricare il file .zip nel campo Pacchetto applicazione e quindi selezionare Invia.

Aggiornare o eliminare un pacchetto dell'applicazione

Per aggiornare o eliminare un pacchetto dell'applicazione esistente, selezionare l'applicazione nella pagina Applicazioni dell'account Batch. Selezionare i puntini di sospensione nella riga del pacchetto dell'applicazione da modificare. Selezionare quindi l'azione da eseguire.

Screenshot che mostra le opzioni di aggiornamento ed eliminazione per i pacchetti dell'applicazione nel portale di Azure.

Se si seleziona Aggiorna, è possibile caricare un nuovo file di .zip. Questo file sostituisce il file di .zip precedente caricato per tale versione.

Se si seleziona Elimina, viene richiesto di confermare l'eliminazione di tale versione. Dopo aver selezionato OK, Batch elimina il file .zip dall'account di archiviazione di Azure. Se si elimina la versione predefinita di un'applicazione, l'impostazione Versione predefinita viene rimossa per tale applicazione.

Installare le applicazioni su nodi di calcolo

Si è appreso come gestire i pacchetti dell'applicazione nel portale di Azure. È ora possibile apprendere come distribuirli nei nodi di calcolo ed eseguirli con le attività di Batch.

Installare pacchetti dell'applicazione nel pool

Per installare un pacchetto dell'applicazione in tutti i nodi di calcolo di un pool, specificare uno o più riferimenti al pacchetto dell'applicazione per il pool. I pacchetti dell'applicazione specificati per un pool vengono installati in ogni nodo di calcolo che unisce il pool e in qualsiasi nodo riavviato o ricreato l'immagine.

In Batch .NET specificare uno o più CloudPool.ApplicationPackageReferences quando si crea un nuovo pool o quando si usa un pool esistente. La classe ApplicationPackageReference specifica un ID applicazione e la versione da installare nei nodi di calcolo di un pool.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Importante

Se la distribuzione di un pacchetto dell'applicazione ha esito negativo, il servizio Batch contrassegna il nodo inutilizzabile e nessuna attività viene pianificata per l'esecuzione in tale nodo. In questo caso, riavviare il nodo per reinizializzare la distribuzione del pacchetto. Il riavvio del nodo consente anche di pianificarne di nuovo le attività.

Installare pacchetti dell'applicazione per le attività

Come per un pool, specificare i riferimenti del pacchetto dell'applicazione per un'attività. Quando un'attività è pianificata per l'esecuzione in un nodo, il pacchetto viene scaricato ed estratto subito prima dell'esecuzione della riga di comando dell'attività. Se nel nodo è già installato un pacchetto e una versione specificati, il pacchetto non viene scaricato e viene usato il pacchetto esistente.

Per installare un pacchetto dell'applicazione attività, configurare la proprietà CloudTask.ApplicationPackageReferences dell'attività:

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

Eseguire le applicazioni installate

I pacchetti specificati per un pool o un'attività vengono scaricati ed estratti in una directory denominata all'interno AZ_BATCH_ROOT_DIR del nodo. Batch crea anche una variabile di ambiente che contiene il percorso della directory denominata. Le righe di comando dell'attività usano questa variabile di ambiente quando fanno riferimento all'applicazione nel nodo.

Nei nodi di Windows la variabile è nel formato seguente:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Nei nodi di Linux, il formato è leggermente diverso. Punti (.), trattini (-) e simboli di cancelletto (#) vengono convertiti in caratteri di sottolineatura nella variabile di ambiente. Viene inoltre mantenuto il caso dell'ID applicazione. Ad esempio:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

APPLICATIONID e version sono valori che corrispondono all'applicazione e alla versione del pacchetto specificati per la distribuzione. Ad esempio, se si specifica che la versione 2.7 di application blender deve essere installata nei nodi windows, le righe di comando dell'attività useranno questa variabile di ambiente per accedere ai relativi file:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Nei nodi di Linux, specificare la variabile di ambiente nel formato seguente: Convertire punti (.), trattini (-) e cancelletti (#) in caratteri di sottolineatura e mantenere le lettere maiuscole/minuscole dell'ID applicazione:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Quando si carica un pacchetto dell'applicazione, è possibile specificare una versione predefinita da distribuire ai nodi di calcolo. Se è stata specificata una versione predefinita per un'applicazione, è possibile omettere il suffisso della versione quando si fa riferimento all'applicazione. È possibile specificare la versione predefinita dell'applicazione nella finestra Applicazioni del portale di Azure, come illustrato in Caricare e gestire le applicazioni.

Ad esempio, se si imposta "2.7" come versione predefinita per application blender e le attività fanno riferimento alla variabile di ambiente seguente, i nodi di Windows usano la versione 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

Il frammento di codice seguente mostra una riga di comando dell'attività di esempio che consente di avviare la versione predefinita dell'applicazione blender :

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

Suggerimento

Per altre informazioni sulle impostazioni dell'ambiente dei nodi di calcolo, vedere Impostazioni di ambiente per le attività.

Aggiornare i pacchetti dell’applicazione di un pool

Se un pool esistente è già stato configurato con un pacchetto dell’applicazione, è possibile specificare un nuovo pacchetto per il pool. Ciò significa:

  • Il servizio Batch installa il pacchetto appena specificato su tutti i nuovi nodi aggiunti al pool e su tutti i nodi esistenti riavviati o per i quali viene ricreata l'immagine.
  • I nodi di calcolo già presenti nel pool quando si aggiornano i riferimenti al pacchetto non installano automaticamente il nuovo pacchetto dell'applicazione. Questi nodi di calcolo devono essere riavviati o ne deve essere ricreata l'immagine per ricevere il nuovo pacchetto.
  • Quando viene distribuito un nuovo pacchetto, le variabili di ambiente create riflettono i riferimenti al nuovo pacchetto dell'applicazione.

In questo esempio il pool esistente ha la versione 2.7 dell'applicazione blender configurata come uno dei relativi CloudPool.ApplicationPackageReferences. Per aggiornare i nodi del pool alla versione 2.76b, specificare un nuovo ApplicationPackageReference con la nuova versione ed eseguire il commit della modifica.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

Ora che è stata configurata la nuova versione, il servizio Batch installa la versione 2.76b su qualsiasi nuovo nodo aggiunto al pool. Per installare la versione 2.76b nei nodi già presenti nel pool, riavviarli o ricrearne l'immagine. I nodi riavviati mantengono i file delle distribuzioni di pacchetti precedenti.

Elencare le applicazioni in un account Batch

È possibile elencare le applicazioni e i relativi pacchetti in un account Batch usando il metodo ApplicationOperations.ListApplicationSummaries .

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

Passaggi successivi