Bagikan melalui


Mulai menggunakan Batch SDK untuk JavaScript

Pelajari dasar-dasar membangun klien Batch di JavaScript menggunakan Azure Batch JavaScript SDK. Kami mengambil pendekatan langkah demi langkah untuk memahami skenario untuk aplikasi batch dan kemudian mengaturnya menggunakan JavaScript.

Prasyarat

Artikel ini mengasumsikan bahwa Anda memiliki pengetahuan kerja tentang JavaScript dan familier dengan Linux. Artikel ini juga mengasumsikan bahwa Anda memiliki pengaturan akun Azure dengan hak akses untuk membuat layanan Batch dan Storage.

Sebaiknya baca Gambaran Umum Teknis Azure Batch sebelum Anda menelusuri langkah-langkah yang diuraikan artikel ini.

Memahami skenario

Di sini, kami memiliki skrip sederhana yang ditulis di Python yang mengunduh semua file csv dari kontainer penyimpanan Azure Blob dan mengonversinya ke JSON. Untuk memproses beberapa kontainer akun penyimpanan secara paralel, kami dapat menerapkan skrip sebagai pekerjaan Azure Batch.

Arsitektur Azure Batch

Diagram berikut menggambarkan bagaimana kita dapat menskalakan skrip Python menggunakan Azure Batch dan klien.

Diagram memperlihatkan arsitektur skenario.

Sampel JavaScript menggunakan pekerjaan batch dengan tugas persiapan (dijelaskan secara rinci nanti) dan satu set tugas tergantung pada jumlah kontainer di akun penyimpanan. Anda dapat mengunduh skrip dari repositori GitHub.

Tip

Sampel JavaScript dalam tautan yang ditentukan tidak berisi kode tertentu untuk digunakan sebagai aplikasi fungsi Azure. Anda dapat merujuk ke tautan berikut untuk instruksi cara membuatnya.

Membangun aplikasi

Sekarang, mari kita ikuti proses langkah demi langkah untuk membangun klien JavaScript:

Langkah 1: Instal Azure Batch SDK

Anda dapat menginstal Azure Batch SDK untuk JavaScript menggunakan perintah instal npm.

npm install @azure/batch

Perintah ini menginstal versi terbaru azure-batch JavaScript SDK.

Tip

Di aplikasi Azure Function, Anda dapat masuk ke "Konsol Kudu" di tab Pengaturan fungsi Azure untuk menjalankan perintah npm install. Dalam hal ini guna menginstal Azure Batch SDK untuk JavaScript.

Langkah 2: Membuat akun Azure Batch

Anda dapat membuatnya dari portal Microsoft Azure atau dari baris perintah (PowerShell /Azure CLI).

Berikut ini adalah perintah untuk membuatnya melalui Azure CLI.

Buat Grup Sumber Daya, lewati langkah ini jika Anda sudah memiliki Grup sumber daya tempat Anda ingin membuat Akun Batch:

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

Selanjutnya, membuat akun Azure Batch.

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

Setiap akun Batch memiliki kunci akses yang sesuai. Kunci ini diperlukan untuk membuat sumber daya lebih lanjut di akun batch Azure. Praktik yang baik untuk lingkungan produksi adalah menggunakan Azure Key Vault untuk menyimpan kunci ini. Anda kemudian dapat membuat perwakilan Layanan untuk aplikasi. Dengan menggunakan perwakilan layanan ini, aplikasi dapat membuat token OAuth untuk mengakses kunci dari brankas kunci.

az batch account keys list -g "<resource-group-name>" -n "<batch-account-name>"

Salin dan simpan kunci yang akan digunakan dalam langkah berikutnya.

Langkah 3: Membuat klien layanan Azure Batch

Cuplikan kode berikut terlebih dahulu mengimpor modul JavaScript azure-batch lalu membuat klien Layanan Batch. Anda harus terlebih dahulu membuat objek SharedKeyCredentials dengan kunci akun Batch yang disalin dari langkah sebelumnya.

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

URI Azure Batch dapat ditemukan di tab Gambaran Umum portal Microsoft Azure. Ini adalah formatnya:

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

Merujuk pada cuplikan layar:

Uri Azure Batch

Langkah 4: Membuat kumpulan Azure Batch

Kumpulan Azure Batch terdiri dari beberapa VM (juga dikenal sebagai Simpul Batch). Layanan Azure Batch menerapkan tugas pada simpul ini dan mengelolanya. Anda dapat menentukan parameter konfigurasi berikut untuk kumpulan Anda.

  • Jenis citra Komputer Virtual
  • Ukuran simpul Komputer Virtual
  • Jumlah simpul Komputer Virtual

Tip

Ukuran dan jumlah Simpul Komputer Virtual sangat tergantung pada jumlah tugas yang ingin Anda jalankan secara paralel dan juga tugas itu sendiri. Sebaiknya lakukan uji coba untuk menentukan jumlah dan ukuran ideal.

Cuplikan kode berikut membuat objek parameter konfigurasi.

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

Tip

Untuk daftar gambar Linux VM yang tersedia untuk Azure Batch dan SKU-nya, lihat Daftar gambar komputer virtual.

Setelah konfigurasi kumpulan ditentukan, Anda dapat membuat kumpulan Azure Batch. Perintah kumpulan Batch membuat simpul Azure Virtual Machine dan mempersiapkannya agar siap menerima tugas untuk dijalankan. Setiap kumpulan harus memiliki ID unik untuk referensi dalam langkah-langkah berikutnya.

Cuplikan kode berikut membuat kumpulan 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)};
});

Anda dapat memeriksa status kumpulan yang dibuat dan memastikan bahwa statusnya "aktif" sebelum melanjutkan dengan pengiriman Pekerjaan ke kumpulan itu.

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");
            }
        }
        });

Berikut ini adalah objek hasil sampel yang dihasilkan oleh fungsi 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' }}

Langkah 4: Kirim pekerjaan Azure Batch

Tugas Azure Batch adalah grup logis dengan tugas serupa. Dalam skenario kami, itu adalah "Proses csv ke JSON." Setiap tugas di sini bisa memproses file csv yang ada di setiap kontainer Azure Storage.

Tugas-tugas ini akan berjalan secara paralel dan disebarkan di beberapa simpul, yang diatur oleh layanan Azure Batch.

Tip

Anda dapat menggunakan properti taskSlotsPerNode untuk menentukan jumlah tugas maksimum yang dapat berjalan bersamaan pada satu simpul.

Tugas persiapan

Simpul VM yang dibuat adalah simpul Ubuntu kosong. Seringkali, Anda perlu menginstal serangkaian program sebagai prasyarat. Biasanya, untuk simpul Linux Anda dapat memiliki skrip shell yang menginstal prasyarat tersebut sebelum tugas yang sebenarnya berjalan. Namun hal itu bisa menjadi semua yang dapat eksekusi dan diprogram.

Skrip shell dalam contoh ini menginstal Python-pip dan Azure Storage Blob SDK untuk Python.

Anda dapat mengunggah skrip di Akun Azure Storage dan membuat SAS URI untuk mengakses skrip. Proses ini juga dapat diotomatisasi menggunakan Azure Storage JavaScript SDK.

Tip

Tugas persiapan untuk pekerjaan hanya berjalan pada simpul VM tempat tugas tertentu perlu dijalankan. Jika Anda ingin prasyarat diinstal pada semua simpul terlepas dari tugas yang berjalan padanya, Anda dapat menggunakan properti startTask sambil menambahkan kumpulan. Anda bisa menggunakan definisi tugas persiapan berikut untuk referensi.

Tugas persiapan ditentukan selama penyerahan pekerjaan Azure Batch. Berikut ini adalah beberapa parameter tugas persiapan yang dapat dikonfigurasi:

  • ID: Pengidentifikasi unik untuk tugas persiapan
  • commandLine: Baris perintah untuk menjalankan tugas yang dapat dieksekusi
  • resourceFiles: Array objek yang menyediakan detail file yang perlu diunduh agar tugas ini dapat dijalankan. Berikut ini adalah opsinya
    • httpUrl: URL file yang akan diunduh
    • filePath: Jalur lokal untuk mengunduh dan menyimpan file
    • fileMode: Hanya berlaku untuk simpul Linux, fileMode dalam format oktal dengan nilai default 0770
  • waitForSuccess: Jika diatur ke true, tugas tidak berjalan jika terjadi kegagalan tugas persiapan
  • runElevated: Atur ke true jika hak istimewa yang ditinggikan diperlukan untuk menjalankan tugas tersebut.

Cuplikan kode berikut menunjukkan contoh konfigurasi skrip tugas persiapan:

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"}}}

Jika tidak ada prasyarat yang perlu diinstal agar tugas Anda dapat berjalan, Anda bisa melewati tugas persiapan. Mengikuti kode membuat pekerjaan dengan nama tampilan "file proses 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);
        }
    }
);

Langkah 5: Kirim pekerjaan untuk tugas Azure Batch

Sekarang pekerjaan proses csv telah dibuat, mari membuat tugas untuk pekerjaan itu. Dengan asumsi kita memiliki empat kontainer, kita harus membuat empat tugas, satu untuk setiap kontainer.

Jika kita melihat skrip Python, skrip itu menerima dua parameter:

  • nama kontainer: Kontainer Storage untuk mengunduh file dari
  • pola: Parameter opsional pola nama file

Dengan asumsi kami memiliki empat kontainer "con1", "con2", "con3", "con4", kode berikut menunjukkan mengirimkan empat tugas ke tugas batch Azure "proses csv" yang kami buat sebelumnya.

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

Kode menambahkan beberapa tugas ke kumpulan. Dan setiap tugas dijalankan pada simpul di kumpulan VM yang dibuat. Jika jumlah tugas melebihi jumlah VM dalam kumpulan atau properti taskSlotsPerNode, tugas akan menunggu hingga simpul tersedia. Orkestrasi ini ditangani oleh Azure Batch secara otomatis.

Portal ini memiliki tampilan terperinci tentang status tugas dan pekerjaan. Anda juga bisa menggunakan daftar dan mendapatkan fungsi di Azure JavaScript SDK. Detail disediakan dalam tautan dokumentasi.

Langkah berikutnya