Impostare o modificare il livello di accesso di un BLOB in blocchi con JavaScript

Questo articolo illustra come impostare o modificare il livello di accesso di un BLOB per i BLOB in blocchi con la libreria client di Archiviazione di Azure per JavaScript.

Prerequisiti

  • Gli esempi in questo articolo presuppongono che sia già stato configurato un progetto per l'uso con la libreria client di Archiviazione BLOB di Azure per JavaScript. Per informazioni sulla configurazione del progetto, incluse l'installazione del pacchetto, l'importazione di moduli e la creazione di un oggetto client autorizzato per l'uso con le risorse dati, consultare Introduzione ad Archiviazione BLOB di Azure e JavaScript.
  • Il meccanismo di autorizzazione deve disporre delle autorizzazioni per impostare il livello di accesso del BLOB. Per maggiori informazioni, consultare il materiale sussidiario per l'autorizzazione per l'operazione API REST seguente:

Informazioni sui livelli di accesso blob in blocchi

Per gestire i costi per le esigenze di archiviazione, può essere utile organizzare i dati in base alla frequenza di accesso e alla durata della conservazione. Archiviazione di Azure offre livelli di accesso diversi in modo da poter archiviare i dati BLOB nel modo più conveniente in base all'utilizzo.

Livelli di accesso per i dati BLOB

I livelli di accesso di Archiviazione di Azure includono:

  • Livello di accesso frequente: livello online ottimizzato per l'archiviazione dei dati a cui si accede o che vengono modificati di frequente. Il livello di accesso frequente ha i costi di archiviazione più elevati, ma i costi di accesso più bassi.
  • Livello di accesso sporadico: livello online ottimizzato per l'archiviazione dei dati a cui si accede o che vengono modificati non di frequente. I dati nel livello di accesso sporadico devono rimanere archiviati per almeno 30 giorni. Il livello di accesso sporadico presenta costi di archiviazione più bassi e costi di accesso più alti rispetto al livello di accesso frequente.
  • Livello di accesso sporadico: livello online ottimizzato per l'archiviazione dei dati a cui si accede o che vengono modificati non di frequente. I dati nel livello di accesso saltuario devono rimanere archiviati per almeno 90 giorni. Il livello di accesso saltuario presenta costi di archiviazione più bassi e costi di accesso più alti rispetto al livello di accesso frequente.
  • Livello di accesso archivio: livello offline ottimizzato per l'archiviazione dei dati a cui si accede raramente e che prevede requisiti di latenza flessibili, nell'ordine di ore. I dati che si trovano nel livello archivio devono rimanere archiviati per almeno 180 giorni.

Per altre informazioni sui livelli di accesso, vedere Livelli di accesso per i dati BLOB.

Quando un BLOB si trova nel livello di accesso archivio, viene considerato offline e non può essere letto o modificato. Per leggere o modificare i dati in un BLOB archiviato, è prima necessario riattivare il BLOB in un livello online. Per altre informazioni sulla riattivazione di un BLOB dal livello Archivio a un livello online, vedere Riattivazione blob dal livello Archivio.

Restrizioni

L'impostazione del livello di accesso è consentita solo per i BLOB in blocchi. Per altre informazioni sulle restrizioni relative all'impostazione del livello di accesso di un BLOB in blocchi, vedere Impostare il livello BLOB (API REST).

Nota

Per impostare il livello di accesso su Cold usando JavaScript, è necessario usare una versione minima della libreria client 12.13.0.

Impostare il livello di accesso di un BLOB durante il caricamento

Per caricare un BLOB in un livello di accesso specifico, usare BlockBlobUploadOptions. Le scelte delle proprietà tier sono: Hot, Cool, Cold o Archive.

async function uploadWithAccessTier(containerClient) {

  // Create blob
  const timestamp = Date.now();
  const blobName = `myblob-${timestamp}`;
  console.log(`creating blob ${blobName}`);

  const fileContentsAsString = `Hello from a string`

  // upload blob to `Cool` access tier
  const uploadOptions = {

    // access tier setting
    // 'Hot', 'Cool', or 'Archive'
    tier: 'Cool',

    // other properties
    metadata: undefined,
    tags: undefined,
  }

  // Create blob client from container client
  const blockBlobClient = await containerClient.getBlockBlobClient(blobName);

  // Upload string
  await blockBlobClient.upload(fileContentsAsString, fileContentsAsString.length, uploadOptions);

  // Return client to continue with other operations
  return blockBlobClient;
}

Modificare il livello di accesso di un BLOB dopo il caricamento

Per modificare il livello di accesso di un BLOB dopo il caricamento nell'archiviazione, usare setAccessTier. Insieme al livello, è possibile impostare la priorità di riattivazione della proprietà BlobSetTierOptions per far uscire il BLOB in blocchi da uno stato archiviato. I possibili valori sono High o Standard.

async function main(blockBlobClient) {

  // Get current access tier
  const { accessTier } = await blockBlobClient.getProperties();
  console.log(`Current access tier: ${accessTier}`);

  // 'Hot', 'Cool', or 'Archive'
  const newAccessTier = 'Cool';

  // Rehydrate priority: 'High' or 'Standard'
  const rehydratePriority = 'High';

  const result = await blockBlobClient.setAccessTier(
    newAccessTier,
    { rehydratePriority }
  );

  if (result?.errorCode == undefined) {
    console.log(`Change to access was successful`);
  } else {
    console.log(result);
  }
}

Copiare un BLOB in un livello di accesso diverso

Usare BlobClient.metodo beginCopyFromURL per copiare un BLOB. Per modificare il livello di accesso durante l'operazione di copia, usare la proprietà tier BlobBeginCopyFromURLOptions e specificare un livello di accesso diverso rispetto al BLOB di origine.

async function copyBlobWithDifferentAccessTier(containerClient) {

  // create blob clients
  const sourceBlobClient = await containerClient.getBlobClient(originalBlob);
  const destinationBlobClient = await containerClient.getBlobClient(copyBlob);

  // start copy, access tiers include `Hot`, `Cool`, `Archive`
  const copyPoller = await destinationBlobClient.beginCopyFromURL(sourceBlobClient.url, { tier: 'Hot' });
  console.log('start copy from original to copy');

  // wait until done
  await copyPoller.pollUntilDone();
  console.log('copy finished')
}

Usare un batch per modificare il livello di accesso per molti BLOB

Il batch rappresenta un set aggregato di operazioni sui BLOB, ad esempio eliminare o impostare il livello di accesso. Per eseguire correttamente ogni operazione, è necessario passare le credenziali corrette. In questo esempio viene usata la stessa credenziale per un set di BLOB nello stesso contenitore.

Creare un BLOBBatchClient. Usare il client per creare un batch con il metodo createBatch(). Quando il batch è pronto, inviare il batch per l'elaborazione. Usare la struttura restituita per verificare che l'operazione di ogni BLOB abbia avuto esito positivo.

async function main(containerClient) {

  // Prep array
  const blockBlobCount = 3;
  const blockBlobClients = new Array(blockBlobCount);

  // Create container and blobs in `Hot` tier
  await prepContainer(containerClient, blockBlobCount, blockBlobClients);

  // Blob batch client and batch
  const containerScopedBatchClient = containerClient.getBlobBatchClient();
  const blobBatch = containerScopedBatchClient.createBatch();

  // Assemble batch to set tier to `Cool` tier
  for (let i = 0; i < blockBlobCount; i++) {
    await blobBatch.setBlobAccessTier(blockBlobClients[i].url, sharedKeyCredential, "Cool", {});
  }

  // Submit batch request and verify response
  const resp = await containerScopedBatchClient.submitBatch(blobBatch, {});
  console.log(`Requested ${blockBlobCount}, batched ${resp.subResponses.length}, success ${resp.subResponsesSucceededCount}, failure ${resp.subResponsesFailedCount}`);

  // Examine each batch item
  for (let i = 0; i < blockBlobCount; i++) {

    // Check blob tier set properly
    const resp2 = await blockBlobClients[i].getProperties();
    console.log(`[${i}] access tier ${resp2.accessTier}, status ${resp.subResponses[i].status}, message ${resp.subResponses[i].statusMessage}`)
  }
}

Esempi di codice

Passaggi successivi