Compartir a través de


Establecer o cambiar el nivel de acceso de un blob en bloques con JavaScript

Este artículo muestra cómo establecer o cambiar el nivel de acceso de un blob para blobs en bloques con la biblioteca cliente de Azure Storage para JavaScript.

Requisitos previos

  • Los ejemplos de este artículo asumen que ya tiene un proyecto configurado para trabajar con la librería cliente Azure Blob Storage para JavaScript. Para obtener más información sobre la configuración del proyecto, incluida la instalación de paquetes, la importación de módulos y la creación de un objeto cliente autorizado para trabajar con recursos de datos, consulte Introducción a Azure Blob Storage y JavaScript.
  • El mecanismo de autorización debe tener permisos para establecer el nivel de acceso del blob. Para obtener más información, consulte la guía de autorización para la siguiente operación de la API de REST:

Acerca de los niveles de acceso de blobs en bloques

Para administrar los costes de las necesidades de almacenamiento, podría resultar útil organizar los datos en función de la frecuencia con la que se acceda a ellos y del tiempo que se conserven. Azure Storage ofrece diferentes niveles de acceso para que pueda almacenar los datos de blobs de la manera más rentable en función de cómo se usen.

Niveles de acceso frecuente, esporádico y de archivo para los datos de blobs

Los niveles de acceso de Azure Storage incluyen:

  • Nivel de acceso frecuente: nivel en línea optimizado para almacenar datos a los que se accede o se modifican con frecuencia. El nivel de acceso frecuente tiene los costos de almacenamiento más altos, pero los costos de acceso más bajos.
  • Nivel de acceso esporádico: nivel en línea optimizado para almacenar datos a los que se accede o se modifican con poca frecuencia. Los datos del nivel de acceso esporádico se deben almacenar durante un mínimo de 30 días. El nivel de acceso esporádico tiene menores costos de almacenamiento y mayores costos de acceso en comparación con el nivel de acceso frecuente.
  • Nivel de acceso esporádico: nivel en línea optimizado para almacenar datos a los que se accede o se modifican con poca frecuencia. Los datos del nivel de acceso esporádico se deben almacenar durante un mínimo de 90 días. El nivel de acceso esporádico tiene menores costes de almacenamiento y mayores costes de acceso en comparación con el nivel de acceso esporádico.
  • Nivel de acceso de archivo: nivel sin conexión optimizado para almacenar datos a los que se accede muy pocas veces y que tienen requisitos de latencia flexibles, p. ej., horas. Los datos del nivel de acceso de archivo se deben almacenar durante un mínimo de 180 días.

Si desea obtener más información sobre los niveles de acceso, consulte Niveles de acceso para los datos de blobs.

Mientras un blob se encuentra en el nivel de acceso de archivo, se considera que está sin conexión y no se puede leer ni modificar. Para leer o modificar los datos de un blob archivado, primero debe rehidratar el blob en un nivel en línea. Para obtener más información sobre la rehidratación de un blob del nivel de archivo a un nivel en línea, consulte Rehidratación de blobs desde el nivel de archivo.

Restricciones

Solo se permite establecer el nivel de acceso en los blobs en bloques. Para más información sobre las restricciones sobre cómo establecer el nivel de acceso de un blob en bloques, consulte Establecimiento del nivel de blob (API de REST).

Nota:

Para establecer que el nivel de acceso Cold utilice JavaScript, debe utilizar una versión mínima de la biblioteca cliente de 12.13.0.

Establecimiento del nivel de acceso de un blob durante la carga

Para cargar un blob en un nivel de acceso específico, use BlockBlobUploadOptions. Las opciones de la propiedad tier son: 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;
}

Cambio del nivel de acceso de un blob después de la carga

Para cambiar el nivel de acceso de un blob después de cargarlo en el almacenamiento, use setAccessTier. Junto con el nivel, puede establecer la prioridad de rehidratación de la propiedad BlobSetTierOptions para sacar el blob en bloques de un estado archivado. Los valores posibles son 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);
  }
}

Copiar un blob en otro nivel de acceso

Para copiar un blob, use el método beginCopyFromURL. Para cambiar el nivel de acceso durante la operación de copia, use la propiedad BlobBeginCopyFromURLOptionstier y especifique un nivel de acceso diferente al del blob de origen.

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

Uso de un lote para cambiar el nivel de acceso de varios blobs

El lote representa un conjunto agregado de operaciones en blobs, como eliminar o establecer el nivel de acceso. Debe pasar la credencial adecuada para realizar correctamente cada operación. En este ejemplo, se usa la misma credencial para un conjunto de blobs en el mismo contenedor.

Cree un BlobBatchClient. Use el cliente para crear un lote con el método createBatch(). Cuando el lote esté listo, envíelo para su procesamiento. Use la estructura devuelta para validar que la operación de cada blob se ha realizado correctamente.

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}`)
  }
}

Ejemplos de código

Pasos siguientes