Creación y administración de concesiones de blobs con JavaScript o TypeScript
En este artículo se muestra cómo crear y administrar las concesiones de blob mediante la biblioteca cliente para JavaScript de Azure Storage. Puede usar la biblioteca cliente para adquirir, renovar, liberar e interrumpir concesiones de blobs.
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 trabajar con una concesión de blobs. 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 las concesiones de blobs
Una concesión crea y administra un bloqueo en un blob para las operaciones de escritura y eliminación. La duración del bloqueo puede ser de 15 a 60 segundos, o puede ser infinita. Una concesión sobre un blob proporciona acceso exclusivo de escritura y eliminación sobre el blob. Para escribir en un blob con una concesión activa, un cliente debe incluir el identificador de la concesión activa en la solicitud de escritura.
Para obtener más información sobre los estados de concesión y cuándo puede realizar una acción determinada en una concesión, consulte Estados y acciones de concesión.
Se admiten todas las operaciones de contenedor en un contenedor que incluye blobs con una concesión activa, como Delete Container. Por lo tanto, un contenedor puede eliminarse aunque los blobs que contiene tengan concesiones activas. Utilice la operación Lease Container para controlar los derechos para eliminar un contenedor.
Las operaciones de concesión se controlan mediante la clase BlobLeaseClient, que proporciona un cliente que contiene todas las operaciones de concesión para blobs y contenedores. Para más información sobre las concesiones de contenedor mediante la biblioteca cliente, consulte Creación y administración de concesiones de contenedor con JavaScript.
Adquisición de una concesión
Al adquirir una concesión de blob, obtiene un id. de concesión que el código puede usar para operar en el blob. Si el blob ya tiene una concesión activa, solo puede solicitar una nueva concesión mediante el id. de concesión activo. No obstante, puede especificar una nueva duración de concesión.
Para adquirir una concesión, cree una instancia de la clase BlobLeaseClient y luego use uno de los siguientes métodos:
En el ejemplo siguiente, se adquiere una concesión de 30 segundos para un blob.
async function acquireBlobLeaseAsync(blobClient) {
const leaseClient = blobClient.getBlobLeaseClient();
await leaseClient.acquireLease(30);
return leaseClient;
}
Renovación de una concesión
Puede renovar una concesión de blob si el id. de concesión especificado en la solicitud coincide con el id. de concesión asociado al blob. La concesión se puede renovar incluso si expira, siempre y cuando el blob no se haya modificado o concedido de nuevo desde la expiración de esa concesión. Cuando se renueva una concesión, se restablece su duración.
Para renovar una concesión, use uno de estos métodos en una instancia de BlobLeaseClient:
En el ejemplo siguiente, se renueva una concesión para un blob:
async function renewBlobLeaseAsync(blobClient, leaseID) {
const leaseClient = blobClient.getBlobLeaseClient(leaseID);
await leaseClient.renewLease();
}
Liberación de una concesión
Puede liberar una concesión de blob si el id. de concesión especificado en la solicitud coincide con el id. de concesión asociado al blob. Liberar la concesión permite a otro cliente adquirir la concesión sobre el blob inmediatamente después de que finalice la operación de liberación.
Puede liberar una concesión mediante uno de los métodos siguientes en una instancia de BlobLeaseClient de JavaScript:
En el ejemplo siguiente, se libera la concesión en un contenedor:
async function releaseBlobLeaseAsync(blobClient, leaseID) {
const leaseClient = blobClient.getBlobLeaseClient(leaseID);
await leaseClient.releaseLease();
}
Interrupción de una concesión
Puede interrumpir una concesión de blobs si el blob tiene una concesión activa. Cualquier solicitud autorizada puede interrumpir la concesión; no es necesario que la solicitud especifique un identificador de concesión que coincida. Una concesión no se puede renovar después de que se interrumpa, e interrumpir una concesión impedirá que se adquiera una nueva concesión hasta que expire o se libere la concesión original.
Puede interrumpir una concesión mediante uno de los métodos siguientes en una instancia de BlobLeaseClient:
En el ejemplo siguiente, se interrumpe una concesión de un blob:
async function breakBlobLeaseAsync(blobClient) {
const leaseClient = blobClient.getBlobLeaseClient();
await leaseClient.breakLease();
}
Estados y acciones de concesión
En el diagrama siguiente se muestran los cinco estados de una concesión y los comandos o los eventos que provocan cambios en el estado de la misma.
En la tabla siguiente se enumeran los cinco estados de concesión, se proporciona una breve descripción de cada uno y se enumeran las acciones de concesión permitidas en un estado determinado. Estas acciones de concesión provocan transiciones de estado, como se muestra en el diagrama.
Estado de concesión | Descripción | Acciones de concesión permitidas |
---|---|---|
Disponible | La concesión está desbloqueada y se puede adquirir. | acquire |
Leased | La concesión está bloqueada. | acquire (solo con el mismo identificador de concesión), renew , change , release y break . |
Expired | La duración de la concesión ha expirado. | acquire , renew , release y break . |
Problemático | La concesión se ha interrumpido, pero seguirá bloqueada hasta que haya expirado el período de interrupción. | release y break |
Interrumpido | La concesión se ha interrumpido y el período de interrupción ha expirado. | acquire , release y break |
Cuando expira una concesión, Blob service mantiene el identificador de concesión hasta que el blob se modifica o se concede de nuevo. Un cliente puede intentar renovar o liberar la concesión mediante el identificador de concesión expirado. Si esta operación se realiza correctamente, el cliente sabe que el blob no se ha cambiado desde que el identificador de concesión era el último válido. Si se produce un error en la solicitud, el cliente sabe que el blob se ha modificado o se ha concedido de nuevo desde que la concesión estuvo activa por última vez. En ese caso, el cliente deberá adquirir una nueva concesión sobre el blob.
Si una concesión expira en lugar de liberarse explícitamente, es posible que el cliente tenga que esperar hasta un minuto para poder adquirir una nueva concesión sobre el blob. Sin embargo, el cliente puede renovar la concesión inmediatamente con el identificador de concesión si el blob no se ha modificado.
No se puede conceder una concesión para una instantánea de blob, dado que las instantáneas son de solo lectura. Si se solicita una concesión sobre una instantánea, se obtiene el código de estado 400 (Bad Request)
.
Recursos
Para más información sobre cómo administrar concesiones de blob con la biblioteca cliente de Azure Blob Storage para JavaScript, consulte los recursos siguientes.
Ejemplos de código
- Ver JavaScript y ejemplos de código de TypeScript de este artículo (GitHub)
Operaciones de API REST
El SDK de Azure para JavaScript contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de JavaScript. Los métodos de la biblioteca cliente para administrar concesiones de blob usan esta operación de API de REST:
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (npm)
Consulte también
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para JavaScript/Typescript. Para obtener más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación JavaScript/Typescript.