Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Découvrez les principes de base de la création d’un client Batch en JavaScript à l’aide du Kit de développement logiciel (SDK) JavaScript Azure Batch. Nous prenons une approche pas à pas de la compréhension d’un scénario pour une application par lots, puis nous la configurons à l’aide de JavaScript.
Conditions préalables
Cet article part du principe que vous avez une connaissance fonctionnelle de JavaScript et de la connaissance de Linux. Il suppose également que vous disposez d’un compte Azure configuré avec des droits d’accès pour créer des services Batch et Stockage.
Nous vous recommandons de lire La vue d’ensemble technique d’Azure Batch avant d’effectuer les étapes décrites dans cet article.
Présentation du scénario
Ici, nous avons un script simple écrit en Python qui télécharge tous les fichiers csv à partir d’un conteneur de stockage Blob Azure et les convertit en JSON. Pour traiter plusieurs conteneurs de compte de stockage en parallèle, nous pouvons déployer le script en tant que travail Azure Batch.
Architecture Azure Batch
Le diagramme suivant montre comment mettre à l’échelle le script Python à l’aide d’Azure Batch et d’un client.

L’exemple JavaScript déploie un travail de traitement par lots avec une tâche de préparation (expliquée en détail plus loin) et un ensemble de tâches en fonction du nombre de conteneurs dans le compte de stockage. Vous pouvez télécharger les scripts à partir du dépôt GitHub.
- exemple de code
- Scripts Shell de la tâche de préparation
- Processeur de fichiers csv Python au format JSON
Conseil / Astuce
L’exemple JavaScript dans le lien spécifié ne contient pas de code spécifique à déployer en tant qu’application de fonction Azure. Vous pouvez consulter les liens suivants pour obtenir des instructions pour en créer un.
Créer l’application
À présent, suivons le processus pas à pas pour créer le client JavaScript :
Étape 1 : Installer le Kit de développement logiciel (SDK) Azure Batch
Vous pouvez installer le Kit de développement logiciel (SDK) Azure Batch pour JavaScript à l’aide de la commande d’installation npm.
npm install @azure/batch
Cette commande installe la dernière version du Kit de développement logiciel (SDK) JavaScript Azure-batch.
Conseil / Astuce
Dans une application de fonction Azure, vous pouvez accéder à « Console Kudu » sous l’onglet Paramètres de la fonction Azure pour exécuter les commandes d’installation npm. Dans ce cas, pour installer le Kit de développement logiciel (SDK) Azure Batch pour JavaScript.
Étape 2 : Créer un compte Azure Batch
Vous pouvez le créer à partir du portail Azure ou à partir de la ligne de commande (PowerShell /Azure CLI).
Voici les commandes permettant de créer un via Azure CLI.
Créez un groupe de ressources, ignorez cette étape si vous en avez déjà un où vous souhaitez créer le compte Batch :
az group create -n "<resource-group-name>" -l "<location>"
Ensuite, créez un compte Azure Batch.
az batch account create -l "<location>" -g "<resource-group-name>" -n "<batch-account-name>"
Chaque compte Batch a ses clés d’accès correspondantes. Ces clés sont nécessaires pour créer d’autres ressources dans le compte Azure Batch. Une bonne pratique pour l’environnement de production consiste à utiliser Azure Key Vault pour stocker ces clés. Vous pouvez ensuite créer un principal de service pour l’application. À l’aide de ce principal de service, l’application peut créer un jeton OAuth pour accéder aux clés à partir du coffre de clés.
az batch account keys list -g "<resource-group-name>" -n "<batch-account-name>"
Copiez et stockez la clé à utiliser dans les étapes suivantes.
Étape 3 : Créer un client de service Azure Batch
L’extrait de code suivant importe d’abord le module JavaScript azure-batch, puis crée un client Batch Service. Vous devez d’abord créer un objet SharedKeyCredentials avec la clé de compte Batch copiée à l’étape précédente.
// 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 Azure Batch se trouve sous l’onglet Vue d’ensemble du portail Azure. Il s’agit du format suivant :
https://accountname.location.batch.azure.com
Reportez-vous à la capture d’écran :

Étape 4 : Créer un pool Azure Batch
Un pool Azure Batch se compose de plusieurs machines virtuelles (également appelées nœuds Batch). Le service Azure Batch déploie les tâches sur ces nœuds et les gère. Vous pouvez définir les paramètres de configuration suivants pour votre pool.
- Type d’image de machine virtuelle
- Taille des nœuds de machine virtuelle
- Nombre de nœuds de machine virtuelle
Conseil / Astuce
La taille et le nombre de nœuds de machine virtuelle dépendent en grande partie du nombre de tâches que vous souhaitez exécuter en parallèle et de la tâche elle-même. Nous vous recommandons de tester pour déterminer le nombre et la taille idéaux.
L’extrait de code suivant crée les objets de paramètre de configuration.
// 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";
Conseil / Astuce
Pour obtenir la liste des images de machine virtuelle Linux disponibles pour Azure Batch et leurs ID de référence SKU, consultez Liste des images de machine virtuelle.
Une fois la configuration du pool définie, vous pouvez créer le pool Azure Batch. La commande de pool Batch crée des nœuds de machine virtuelle Azure et les prépare à recevoir des tâches à exécuter. Chaque pool doit avoir un ID unique pour référence dans les étapes suivantes.
L’extrait de code suivant crée un pool 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)};
});
Vous pouvez vérifier l’état du pool créé et vous assurer que l’état est « actif » avant de poursuivre avec la soumission d’un travail à ce 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");
}
}
});
Voici un exemple d’objet de résultat retourné par la fonction 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' }}
Étape 4 : Soumettre une tâche Azure Batch
Un travail Azure Batch est un groupe logique de tâches similaires. Dans notre scénario, il s’agit de « Traiter csv en JSON ». Chaque tâche ici peut traiter les fichiers csv présents dans chaque conteneur stockage Azure.
Ces tâches s’exécuteraient en parallèle et déployées sur plusieurs nœuds, orchestrées par le service Azure Batch.
Conseil / Astuce
Vous pouvez utiliser la propriété taskSlotsPerNode pour spécifier le nombre maximal de tâches qui peuvent s’exécuter simultanément sur un seul nœud.
Tâche de préparation
Les nœuds de machine virtuelle créés sont des nœuds Ubuntu vides. Souvent, vous devez installer un ensemble de programmes en tant que prérequis. En règle générale, pour les nœuds Linux, vous pouvez avoir un script shell qui installe les prérequis avant l’exécution des tâches réelles. Toutefois, il peut s’agir de n’importe quel exécutable programmable.
Le script shell de cet exemple installe Python-pip et le Kit de développement logiciel (SDK) Blob Stockage Azure pour Python.
Vous pouvez charger le script sur un compte de stockage Azure et générer un URI SAP pour accéder au script. Ce processus peut également être automatisé à l’aide du Kit de développement logiciel (SDK) JavaScript du stockage Azure.
Conseil / Astuce
Une tâche de préparation pour un travail s’exécute uniquement sur les nœuds de machine virtuelle où la tâche spécifique doit s’exécuter. Si vous souhaitez que les conditions préalables soient installées sur tous les nœuds, quelles que soient les tâches qui s’exécutent dessus, vous pouvez utiliser la propriété startTask lors de l’ajout d’un pool. Vous pouvez utiliser la définition de tâche de préparation suivante pour référence.
Une tâche de préparation est spécifiée lors de l’envoi d’un travail Azure Batch. Voici quelques paramètres de tâche de préparation configurables :
- ID : identificateur unique pour la tâche de préparation
- commandLine : ligne de commande pour exécuter la tâche exécutable
- resourceFiles : tableau d’objets qui fournissent les détails des fichiers nécessaires pour être téléchargés pour que cette tâche s’exécute. Voici ses options
- httpUrl : URL du fichier à télécharger
- filePath : chemin d’accès local au téléchargement et à l’enregistrement du fichier
- fileMode : applicable uniquement pour les nœuds Linux, fileMode est au format octal avec une valeur par défaut de 0770
- waitForSuccess : si la valeur est true, la tâche ne s’exécute pas lors des échecs de tâche de préparation
- runElevated : définissez-le sur true si des privilèges élevés sont nécessaires pour exécuter la tâche.
L’extrait de code suivant montre l’exemple de configuration du script de tâche de préparation :
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"}}}
S’il n’existe aucun prérequis à installer pour que vos tâches s’exécutent, vous pouvez ignorer les tâches de préparation. Le code suivant crée un travail portant le nom complet « traiter les fichiers csv ».
// 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);
}
}
);
Étape 5 : Envoyer des tâches Azure Batch pour un travail
Maintenant que le travail de traitement des fichiers csv est créé, nous allons créer des tâches pour celui-ci. En supposant que nous avons quatre conteneurs, nous devons créer quatre tâches, une pour chaque conteneur.
Si nous examinons le script Python, il accepte deux paramètres :
- nom du conteneur : conteneur de stockage à partir duquel télécharger des fichiers
- modèle : paramètre facultatif du modèle de nom de fichier
En supposant que nous disposons de quatre conteneurs « con1 », « con2 », « con3 » et « con4 », le code suivant illustre la soumission des tâches pour le travail Azure Batch « process csv » que nous avons créé précédemment.
// 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");
}
});
});
Le code ajoute plusieurs tâches au pool. Et chacune des tâches est exécutée sur un nœud dans le pool de machines virtuelles créées. Si le nombre de tâches dépasse le nombre de machines virtuelles dans un pool ou la propriété taskSlotsPerNode, les tâches attendent qu’un nœud soit mis à disposition. Cette orchestration est gérée automatiquement par Azure Batch.
Le portail a des vues détaillées sur les tâches et les états des travaux. Vous pouvez également utiliser la liste et obtenir des fonctions dans le Kit de développement logiciel (SDK) JavaScript Azure. Les détails sont fournis dans le lien de documentation.
Étapes suivantes
- Apprenez-en davantage sur le workflow et les ressources principales du service Batch, telles que les pools, les nœuds, les travaux et les tâches.
- Consultez la référence JavaScript Batch pour explorer l’API Batch.