Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Informazioni di base sulla creazione di un client Batch in JavaScript con Azure Batch JavaScript SDK. Si esegue un approccio dettagliato per comprendere uno scenario per un'applicazione batch e quindi configurarlo usando JavaScript.
Prerequisiti
Questo articolo presuppone che si abbia una conoscenza pratica di JavaScript e della familiarità con Linux. Si presuppone anche di avere una configurazione di un account Azure con diritti di accesso per creare servizi Batch e Archiviazione.
Prima di seguire i passaggi descritti in questo articolo, è consigliabile leggere Panoramica tecnica di Azure Batch .
Informazioni sullo scenario
In questo caso è disponibile uno script semplice scritto in Python che scarica tutti i file CSV da un contenitore di archiviazione BLOB di Azure e li converte in JSON. Per elaborare più contenitori di account di archiviazione in parallelo, è possibile distribuire lo script come processo di Azure Batch.
Architettura di Azure Batch
Il diagramma seguente illustra come ridimensionare lo script Python usando Azure Batch e un client.

L'esempio JavaScript distribuisce un processo batch con un'attività di preparazione (descritta in dettaglio più avanti) e un set di attività a seconda del numero di contenitori nell'account di archiviazione. È possibile scaricare gli script dal repository GitHub.
Suggerimento
L'esempio JavaScript nel collegamento specificato non contiene codice specifico da distribuire come app per le funzioni di Azure. Per istruzioni su come crearne una, vedere i collegamenti seguenti.
Compilare l'applicazione
A questo punto, seguire la procedura dettagliata per compilare il client JavaScript:
Passaggio 1: Installare Azure Batch SDK
È possibile installare Azure Batch SDK per JavaScript usando il comando npm install.
npm install @azure/batch
Questo comando installa la versione più recente di Azure-batch JavaScript SDK.
Suggerimento
In un'app per le funzioni di Azure è possibile passare a "Console Kudu" nella scheda Impostazioni della funzione di Azure per eseguire i comandi di installazione di npm. In questo caso per installare Azure Batch SDK per JavaScript.
Passaggio 2: Creare un account Azure Batch
È possibile crearlo dal portale di Azure o dalla riga di comando (PowerShell o Azure CLI).
Di seguito sono riportati i comandi per crearne uno tramite l'interfaccia della riga di comando di Azure.
Creare un gruppo di risorse, ignorare questo passaggio se ne è già disponibile uno in cui si vuole creare l'account Batch:
az group create -n "<resource-group-name>" -l "<location>"
Creare quindi un account Azure Batch.
az batch account create -l "<location>" -g "<resource-group-name>" -n "<batch-account-name>"
Ogni account Batch ha le chiavi di accesso corrispondenti. Queste chiavi sono necessarie per creare altre risorse nell'account Batch di Azure. Una procedura consigliata per l'ambiente di produzione consiste nell'usare Azure Key Vault per archiviare queste chiavi. È quindi possibile creare un'entità servizio per l'applicazione. Usando questo principale del servizio, l'applicazione può creare un token OAuth per accedere alle chiavi dal Key Vault.
az batch account keys list -g "<resource-group-name>" -n "<batch-account-name>"
Copiare e archiviare la chiave da usare nei passaggi successivi.
Passaggio 3: Creare un client del servizio Azure Batch
Il frammento di codice seguente importa prima il modulo JavaScript azure-batch e quindi crea un client del servizio Batch. È prima necessario creare un oggetto SharedKeyCredentials con la chiave dell'account Batch copiata dal passaggio precedente.
// Initializing Azure Batch variables
import { BatchServiceClient, BatchSharedKeyCredentials } from "@azure/batch";
// Replace values below with Batch Account details
const batchAccountName = '<batch-account-name>';
const batchAccountKey = '<batch-account-key>';
const batchEndpoint = '<batch-account-url>';
const credentials = new BatchSharedKeyCredentials(batchAccountName, batchAccountKey);
const batchClient = new BatchServiceClient(credentials, batchEndpoint);
L'URI di Azure Batch è disponibile nella scheda Panoramica del portale di Azure. È del formato:
https://accountname.location.batch.azure.com
Fare riferimento allo screenshot:

Passaggio 4: Creare un pool di Azure Batch
Un pool di Azure Batch è costituito da più macchine virtuali (note anche come nodi Batch). Il servizio Azure Batch distribuisce le attività in questi nodi e le gestisce. È possibile definire i parametri di configurazione seguenti per il pool.
- Tipo di immagine di macchina virtuale
- Dimensioni dei nodi della macchina virtuale
- Numero di nodi macchina virtuale
Suggerimento
Le dimensioni e il numero di nodi della macchina virtuale dipendono in gran parte dal numero di attività da eseguire in parallelo e dall'attività stessa. È consigliabile eseguire test per determinare il numero e le dimensioni ideali.
Il frammento di codice seguente crea gli oggetti parametro di configurazione.
// Creating Image reference configuration for Ubuntu Linux VM
const imgRef = {
publisher: "Canonical",
offer: "UbuntuServer",
sku: "20.04-LTS",
version: "latest"
}
// Creating the VM configuration object with the SKUID
const vmConfig = {
imageReference: imgRef,
nodeAgentSKUId: "batch.node.ubuntu 20.04"
};
// Number of VMs to create in a pool
const numVms = 4;
// Setting the VM size
const vmSize = "STANDARD_D1_V2";
Suggerimento
Per l'elenco delle immagini di macchine virtuali Linux disponibili per Azure Batch e i relativi ID SKU, vedere Elenco di immagini di macchine virtuali.
Dopo aver definito la configurazione del pool, è possibile creare il pool di Azure Batch. Il comando Del pool di Batch crea i nodi della macchina virtuale di Azure e li prepara per essere pronti per ricevere le attività da eseguire. Ogni pool deve avere un ID univoco per riferimento nei passaggi successivi.
Il frammento di codice seguente crea un pool di Azure Batch.
// Create a unique Azure Batch pool ID
const now = new Date();
const poolId = `processcsv_${now.getFullYear()}${now.getMonth()}${now.getDay()}${now.getHours()}${now.getSeconds()}`;
const poolConfig = {
id: poolId,
displayName: "Processing csv files",
vmSize: vmSize,
virtualMachineConfiguration: vmConfig,
targetDedicatedNodes: numVms,
enableAutoScale: false
};
// Creating the Pool
var pool = batchClient.pool.add(poolConfig, function (error, result){
if(error!=null){console.log(error.response)};
});
È possibile controllare lo stato del pool creato e verificare che lo stato sia "active" prima di procedere con l'invio di un processo a tale pool.
var cloudPool = batchClient.pool.get(poolId,function(error,result,request,response){
if(error == null)
{
if(result.state == "active")
{
console.log("Pool is active");
}
}
else
{
if(error.statusCode==404)
{
console.log("Pool not found yet returned 404...");
}
else
{
console.log("Error occurred while retrieving pool data");
}
}
});
Di seguito è riportato un oggetto risultato di esempio restituito dalla funzione pool.get.
{
id: 'processcsv_2022002321',
displayName: 'Processing csv files',
url: 'https://<batch-account-name>.westus.batch.azure.com/pools/processcsv_2022002321',
eTag: '0x8D9D4088BC56FA1',
lastModified: 2022-01-10T07:12:21.943Z,
creationTime: 2022-01-10T07:12:21.943Z,
state: 'active',
stateTransitionTime: 2022-01-10T07:12:21.943Z,
allocationState: 'steady',
allocationStateTransitionTime: 2022-01-10T07:13:35.103Z,
vmSize: 'standard_d1_v2',
virtualMachineConfiguration: {
imageReference: {
publisher: 'Canonical',
offer: 'UbuntuServer',
sku: '20.04-LTS',
version: 'latest'
},
nodeAgentSKUId: 'batch.node.ubuntu 20.04'
},
resizeTimeout: 'PT15M',
currentDedicatedNodes: 4,
currentLowPriorityNodes: 0,
targetDedicatedNodes: 4,
targetLowPriorityNodes: 0,
enableAutoScale: false,
enableInterNodeCommunication: false,
taskSlotsPerNode: 1,
taskSchedulingPolicy: { nodeFillType: 'Spread' }}
Passaggio 4: Inviare un processo di Azure Batch
Un processo di Azure Batch è un gruppo logico di attività simili. In questo scenario si tratta di "Elaborare csv in JSON". Ogni attività in questo caso potrebbe elaborare file CSV presenti in ogni contenitore di Archiviazione di Azure.
Queste attività vengono eseguite in parallelo e distribuite in più nodi, orchestrate dal servizio Azure Batch.
Suggerimento
È possibile usare la proprietà taskSlotsPerNode per specificare il numero massimo di attività che possono essere eseguite simultaneamente in un singolo nodo.
Attività di preparazione
I nodi della macchina virtuale creati sono nodi Ubuntu vuoti. Spesso, è necessario installare un set di programmi come prerequisiti. In genere, per i nodi Linux è possibile avere uno script della shell che installa i prerequisiti prima dell'esecuzione delle attività effettive. Tuttavia, potrebbe trattarsi di qualsiasi eseguibile programmabile.
Lo script della shell di questo esempio installa Python-pip e BLOB del servizio di archiviazione di Azure SDK per Python.
È possibile caricare lo script in un account di archiviazione di Azure e generare un URI di firma di accesso condiviso per accedere allo script. Questo processo può anche essere automatizzato usando JavaScript SDK di Archiviazione di Azure.
Suggerimento
Un'attività di preparazione per un processo viene eseguita solo nei nodi della macchina virtuale in cui deve essere eseguita l'attività specifica. Se si desidera installare i prerequisiti in tutti i nodi indipendentemente dalle attività eseguite su di esso, è possibile usare la proprietà startTask durante l'aggiunta di un pool. Per riferimento, è possibile usare la definizione dell'attività di preparazione seguente.
Un'attività di preparazione viene specificata durante l'invio del processo di Azure Batch. Di seguito sono riportati alcuni parametri configurabili dell'attività di preparazione:
- ID: identificatore univoco per l'attività di preparazione
- commandLine: riga di comando per eseguire l'eseguibile dell'attività
- resourceFiles: matrice di oggetti che forniscono i dettagli dei file da scaricare per l'esecuzione dell'attività. Di seguito sono riportate le relative opzioni
- httpUrl: URL del file da scaricare
- filePath: percorso locale per scaricare e salvare il file
- fileMode: applicabile solo per i nodi Linux, fileMode è in formato ottale con un valore predefinito 0770
- waitForSuccess: se impostato su true, l'attività non viene eseguita in caso di errori dell'attività di preparazione
- runElevated: impostarlo su true se sono necessari privilegi elevati per eseguire l'attività.
Il frammento di codice seguente mostra l'esempio di configurazione dello script dell'attività di preparazione:
var jobPrepTaskConfig = {id:"installprereq",commandLine:"sudo sh startup_prereq.sh > startup.log",resourceFiles: [{ 'httpUrl': 'Blob sh url', 'filePath': 'startup_prereq.sh' }],waitForSuccess:true,runElevated:true, userIdentity: {autoUser: {elevationLevel: "admin", scope: "pool"}}}
Se non sono presenti prerequisiti da installare per l'esecuzione delle attività, è possibile ignorare le attività di preparazione. Il codice seguente crea un processo con il nome visualizzato "process csv files".
// Setting Batch Pool ID
const poolInfo = { poolId: poolId };
// Batch job configuration object
const jobId = "processcsvjob";
const jobConfig = {
id: jobId,
displayName: "process csv files",
jobPreparationTask: jobPrepTaskConfig,
poolInfo: poolInfo
};
// Adding Azure batch job to the pool
const job = batchClient.job.add(jobConfig, function (error, result) {
if (error !== null) {
console.log("An error occurred while creating the job...");
console.log(error.response);
}
}
);
Passaggio 5: Inviare attività di Azure Batch per un processo
Dopo aver creato il processo per l'elaborazione CSV, vengono create le attività per tale processo. Supponendo che siano presenti quattro contenitori, è necessario creare quattro attività, una per ogni contenitore.
Se si esamina lo script Python, accetta due parametri:
- nome contenitore: contenitore di archiviazione da cui scaricare i file
- pattern: parametro facoltativo del modello di nome file
Supponendo di avere quattro contenitori "con1", "con2", "con3","con4", il codice seguente mostra l'invio di quattro attività al processo batch di Azure "process csv" creato in precedenza.
// storing container names in an array
const containerList = ["con1", "con2", "con3", "con4"]; //Replace with list of blob containers within storage account
containerList.forEach(function (val, index) {
console.log("Submitting task for container : " + val);
const containerName = val;
const taskID = containerName + "_process";
// Task configuration object
const taskConfig = {
id: taskID,
displayName: 'process csv in ' + containerName,
commandLine: 'python processcsv.py --container ' + containerName,
resourceFiles: [{ 'httpUrl': 'Blob script url', 'filePath': 'processcsv.py' }]
};
const task = batchClient.task.add(jobId, taskConfig, function (error, result) {
if (error !== null) {
console.log("Error occurred while creating task for container " + containerName + ". Details : " + error.response);
}
else {
console.log("Task for container : " + containerName + " submitted successfully");
}
});
});
Il codice aggiunge più attività al pool. Ognuna delle attività viene eseguita in un nodo nel pool di macchine virtuali create. Se il numero di attività supera il numero di macchine virtuali in un pool o la proprietà taskSlotsPerNode, le attività attendono fino a quando non viene reso disponibile un nodo. Questa orchestrazione viene gestita automaticamente da Azure Batch.
Il portale include visualizzazioni dettagliate sulle attività e sugli stati dei processi. È anche possibile usare l'elenco e ottenere le funzioni in Azure JavaScript SDK. I dettagli sono disponibili nel collegamento alla documentazione.
Passaggi successivi
- Informazioni sul flusso di lavoro e sulle risorse principali del servizio Batch, ad esempio pool, nodi, processi e attività.
- Consulta la documentazione di Batch JavaScript per esplorare l'API Batch.