Kezdje el a Batch SDK használatát JavaScripthez

Ismerje meg a Batch-ügyfél JavaScriptben való létrehozásának alapjait a Azure Batch JavaScript SDK használatával. Lépésről lépésre megközelítést alkalmazunk, hogy megértsünk egy tételes alkalmazás forgatókönyvet, majd JavaScript segítségével beállítjuk azt.

Előfeltételek

Ez a cikk feltételezi, hogy van munkaképes JavaScript-tudása valamint ismerete a Linux-ról. Azt is feltételezi, hogy rendelkezik egy Azure-fiók beállításával, amely hozzáférési jogosultságokkal rendelkezik a Batch és a Storage-szolgáltatások létrehozásához.

Javasoljuk, hogy olvassa el Azure Batch műszaki áttekintést mielőtt végighalad a cikkben ismertetett lépéseken.

Értse meg a helyzetet

Itt egy egyszerű szkriptet írt Python, amely letölti az összes CSV-fájlt egy Azure Blob Storage-tárolóból, és JSON-ra konvertálja őket. Ha több tárfióktárolót szeretne párhuzamosan feldolgozni, Azure Batch feladatként üzembe helyezhetjük a szkriptet.

Azure Batch architektúra

Az alábbi ábra bemutatja, hogyan skálázhatjuk a Python szkriptet Azure Batch és ügyfél használatával.

Forgatókönyvarchitektúrát bemutató ábra.

A JavaScript-minta üzembe helyez egy kötegelt feladatot egy előkészítési feladattal (később részletesen ismertetve), valamint a tárfiókban lévő tárolók számától függően egy feladatkészletet. A szkripteket a GitHub adattárból töltheti le.

Jótanács

A megadott hivatkozásBan található JavaScript-minta nem tartalmaz Azure függvényalkalmazásként üzembe helyezendő konkrét kódot. A következő linkeken talál útmutatást egy létrehozatalához.

Az alkalmazás létrehozása

Most kövessük lépésről lépésre a folyamatot a JavaScript kliens létrehozásához:

1. lépés: Azure Batch SDK telepítése

Az npm telepítési paranccsal telepítheti Azure Batch JavaScripthez készült SDK-t. A Microsoft Entra ID hitelesítéséhez a @azure/identity csomagra is szüksége van.

npm install @azure/batch @azure/identity

Ez a parancs telepíti a Azure Batch JavaScript SDK legújabb verzióját, valamint az Azure Identitástárat.

Jótanács

Egy Azure függvényalkalmazásban az npm telepítési parancsainak futtatásához lépjen a "Kudu Console" (Kudu-konzol) elemre a Azure függvény Beállítások lapján. Ebben az esetben telepítse Azure Batch JavaScripthez készült SDK-t.

2. lépés: Azure Batch-fiók létrehozása

Létrehozhatja a Azure portálon vagy parancssorból (PowerShell /Azure CLI).

Az alábbi parancsok segítségével hozhat létre egyet Azure CLI.

Hozzon létre egy erőforráscsoportot, hagyja ki ezt a lépést, ha már van egy olyan, ahol létre szeretné hozni a Batch-fiókot:

az group create -n "<resource-group-name>" -l "<location>"

Ezután hozzon létre egy Azure Batch fiókot.

az batch account create -l "<location>" -g "<resource-group-name>" -n "<batch-account-name>"

Fiókhozzáférési kulcsok használata helyett ez a minta a Microsoft Entra ID-val hitelesít a(z) DefaultAzureCredential használatával. Győződjön meg arról, hogy a kódot futtató identitás (fejlesztői bejelentkezés, felügyelt identitás vagy szolgáltatásnév) megfelelő Azure RBAC-szerepkörhöz lett hozzárendelve a Batch-fiókban, például Azure Batch adatszolgáltató vagy Azure Batch Adatolvasó. További információkért lásd: Batch szolgáltatásmegoldások Microsoft Entra ID-val történő hitelesítése.

Helyi futtatáskor a DefaultAzureCredential átveheti a hitelesítő adatokat a Azure CLI (az login), Azure PowerShell, Visual Studio Code vagy környezeti változókból. A Azure üzemeltetett környezetekben, például Azure Functions vagy Azure virtuális gépeken használhat felügyelt identitást.

3. lépés: Azure Batch szolgáltatásügyfél létrehozása

Az alábbi kódrészlet importálja a @azure/batch és @azure/identity modulokat, majd a BatchClient használatával létrehoz egy DefaultAzureCredential-t.

// Initializing Azure Batch variables

import { DefaultAzureCredential } from "@azure/identity";
import { BatchClient } from "@azure/batch";

// Replace value below with your Batch account URL
const batchEndpoint = '<batch-account-url>';

const credentials = new DefaultAzureCredential();
const batchClient = new BatchClient(batchEndpoint, credentials);

A Azure Batch URI a Azure portál Áttekintés lapján található. Ilyen formátumban van:

https://accountname.location.batch.azure.com

A képernyőkép megtekintése:

Azure batch uri

4. lépés: Azure Batch-készlet létrehozása

A Azure Batch-készlet több virtuális gépből (más néven Batch-csomópontokból) áll. Azure Batch szolgáltatás üzembe helyezi a feladatokat ezeken a csomópontokon, és kezeli őket. Meghatározhatja a következő konfigurációs paramétereket a medencéjéhez.

  • Virtuális gép képtípusa
  • Virtuálisgép-csomópontok mérete
  • Virtuális gép csomópontok száma

Jótanács

A virtuálisgép-csomópontok mérete és száma nagyban függ a párhuzamosan futtatni kívánt tevékenységek számától, és magát a feladatot is. Javasoljuk, hogy végezzen tesztelést az ideális darabszám és méret meghatározásához.

Az alábbi kódrészlet létrehozza a konfigurációs paraméterobjektumokat.

// 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";

Jótanács

A Azure Batch és termékváltozatuk azonosítóihoz elérhető Linux rendszerű virtuálisgép-rendszerképek listáját a virtuálisgép-rendszerképek List of virtual machine images című témakörben találja.

A készletkonfiguráció definiálása után létrehozhatja a Azure Batch készletet. A Batch-készlet parancs Azure virtuálisgép-csomópontokat hoz létre, és előkészíti őket a végrehajtandó feladatok fogadására. Minden poolhoz egyedi azonosítót kell rendelni, hogy a későbbi lépésekben hivatkozásként használható legyen.

Az alábbi kódrészlet létrehoz egy Azure Batch készletet.

// 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
try {
    await batchClient.createPool(poolConfig);
} catch (error) {
    console.log(error);
}

Ellenőrizheti a létrehozott készlet állapotát, és gondoskodhat arról, hogy az állapot "aktív" legyen, mielőtt elküld egy feladatot abba a készletbe.

try {
    const cloudPool = await batchClient.getPool(poolId);
    if (cloudPool.state === "active") {
        console.log("Pool is active");
    }
} catch (error) {
    if (error.statusCode === 404) {
        console.log("Pool not found yet returned 404...");
    } else {
        console.log("Error occurred while retrieving pool data");
    }
}

Az alábbi minta eredményobjektumot a pool.get függvény adja vissza.

{
  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' }}

4. lépés: Azure Batch feladat elküldése

A Azure Batch feladatok hasonló tevékenységek logikai csoportja. A mi esetünkben ez a "Csv feldolgozása JSON-ra". Itt minden feladat az egyes Azure Storage tárolókban található CSV-fájlok feldolgozását jelentheti.

Ezek a feladatok párhuzamosan futnának, és több csomóponton is üzembe helyeznék őket, amelyeket a Azure Batch szolgáltatás vezényl.

Jótanács

A taskSlotsPerNode tulajdonsággal megadhatja az egy csomóponton egyidejűleg futtatható feladatok maximális számát.

Előkészítési feladat

Az elkészített VM csomópontok üres Ubuntu csomópontok. Gyakran egy sor programot kell telepíteni, mint előfeltételt. Általában, a Linux csomópontokhoz rendelkezhet egy shell szkripttel, amely telepíti az előfeltételeket, mielőtt a tényleges feladatok futnának. Azonban ez bármilyen programozható végrehajtható fájl lehet.

A példában szereplő shell-szkript telepíti a Python-pipet és a Azure Storage Blob SDK-t Python.

Feltöltheti a szkriptet egy Azure Storage-fiókba, és létrehozhat egy SAS URI-t a szkript eléréséhez. Ez a folyamat a Azure Storage JavaScript SDK-val is automatizálható.

Jótanács

Egy feladat előkészítése csak azon a VM csomópontokon fut, ahol a konkrét feladatnak kell futnia. Ha azt szeretné, hogy az előfeltételek minden csomópontra telepítve legyenek, függetlenül a rajta futó feladatoktól, használhatja a startTask tulajdonságot készlet hozzáadásakor. Az alábbi előkészítési feladat definíciót használhatja hivatkozási pontként.

Az előkészítési feladat Azure Batch feladat elküldése során van megadva. Az alábbiakban találhatók néhány konfigurálható előkészítési feladat paraméterei:

  • Azonosító: Az előkészítési tevékenység egyedi azonosítója
  • parancssor: Parancssor a végrehajtható feladat végrehajtásához
  • resourceFiles: Olyan objektumok tömbje, amelyek megadják a feladat futtatásához letöltendő fájlok részleteit. A következőek az opciói
    • httpUrl: A letöltendő fájl URL-je
    • filePath: A fájl letöltésére és mentésére szolgáló helyi útvonal
    • fileMode: Csak Linux-csomópontokra alkalmazható, a fileMode oktális formátumban van, alapértelmezett értéke 0770
  • waitForSuccess: Ha igaz értékre van állítva, a végrehajtási tevékenység nem fut, ha az előkészítési tevékenység sikertelen.
  • runElevated: Állítsa igazra, ha emelt szintű jogosultságokra van szükség a feladat futtatásához.

A következő kódrészlet bemutatja az előkészítési feladat szkript konfigurációs mintáját:

const jobPrepTaskConfig = {
    id: "installprereq",
    commandLine: "sudo sh startup_prereq.sh > startup.log",
    resourceFiles: [{ httpUrl: 'Blob sh url', filePath: 'startup_prereq.sh' }],
    waitForSuccess: true,
    userIdentity: { autoUser: { elevationLevel: "admin", scope: "pool" } }
};

Ha nincs szükséges előfeltétel a feladatok futtatásához, kihagyhatja az előkészítési feladatokat. A következő kód létrehoz egy feladatot a következő megjelenített névvel: "csv fájlok feldolgozása."

// 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
try {
    await batchClient.createJob(jobConfig);
} catch (error) {
    console.log("An error occurred while creating the job...");
    console.log(error);
}

5. lépés: Azure Batch feladatok benyújtása egy munkához.

Most, hogy létrejött a folyamat csv-feladata, hozzunk létre feladatokat ehhez a feladathoz. Feltételezve, hogy van négy tárolónk, négy feladatot kell létrehoznunk, egyet-egyet minden tárolóhoz.

Ha megnézzük a Python szkriptet, két paramétert fogad el:

  • tároló neve: A tároló, ahonnan fájlokat tölthet le
  • minta: Egy opcionális paraméter a fájlnevek mintázatára

Feltételezve, hogy van négy "con1", "con2", "con3", "con4" tárolónk, az alábbi kód azt mutatja, hogy négy feladatot küldünk be az általunk korábban létrehozott "process csv" nevű Azure kötegelt feladatba.

// storing container names in an array
const containerList = ["con1", "con2", "con3", "con4"];      //Replace with list of blob containers within storage account
for (const val of containerList) {
    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' }]
    };

    try {
        await batchClient.createTask(jobId, taskConfig);
        console.log("Task for container : " + containerName + " submitted successfully");
    } catch (error) {
        console.log("Error occurred while creating task for container " + containerName + ". Details : " + error);
    }
}

A kód több feladatot ad hozzá a feladatlistához. Az egyes feladatokat pedig a létrehozott virtuális gépek készletében lévő csomóponton hajtja végre a rendszer. Ha a feladatok száma meghaladja a VM-ek számát egy csoportban, vagy a taskSlotsPerNode tulajdonság értékét, a feladatok várakoznak, amíg egy node elérhetővé nem válik. Ezt a vezénylést az Azure Batch automatikusan kezeli.

A portál részletes nézeteket tartalmaz a feladatokról és a munkák állapotáról. A listát a Azure JavaScript SDK-ban is használhatja és lekérheti a függvényeket. A részleteket a dokumentációs hivatkozás tartalmazza.

Következő lépések