Compartir a través de


Creación y administración de concesiones de contenedores con .NET

En este artículo se muestra cómo crear y administrar concesiones de contenedores mediante la biblioteca cliente para .NET de Azure Storage. Puede usar la biblioteca cliente para adquirir, renovar, liberar e interrumpir concesiones de contenedor.

Requisitos previos

Configurar el entorno

Si no tiene un proyecto existente, en esta sección se muestra cómo configurar un proyecto para que funcione con la biblioteca cliente de Azure Blob Storage para .NET. Los pasos incluyen la instalación del paquete, la adición de directivas using, y la creación de un objeto de cliente autorizado. Para más información, consulte Introducción a Azure Blob Storage y .NET.

Instalar paquetes

En el directorio del proyecto, instale los paquetes para las bibliotecas cliente de Azure Blob Storage y Azure Identity mediante el comando dotnet add package. El paquete Azure.Identity es necesario para las conexiones sin contraseña a los servicios de Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Agregue directivas using.

Agregue estas directivas using al principio del archivo de código:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Algunos ejemplos de código de este artículo pueden requerir using directivas adicionales.

Creación de un objeto de cliente

Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential para la autorización:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

También puede registrar un cliente de servicio para la inserción de dependencias en una aplicación .NET. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.

Authorization

El mecanismo de autorización debe tener los permisos necesarios para trabajar con una concesión de contenedor. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para Contenedor de concesión (API de REST).

Acerca de las concesiones de contenedor

Una concesión establece y administra un bloqueo en un contenedor para las operaciones de eliminación. La duración del bloqueo puede ser de 15 a 60 segundos, o puede ser infinita. Una concesión sobre un contenedor proporciona acceso exclusivo de eliminación sobre el contenedor. Una concesión de contenedor solo controla la capacidad de eliminar el contenedor mediante la operación Eliminar contenedor de la API de REST. Para eliminar un contenedor con una concesión activa, un cliente debe incluir el identificador de concesión activo con la solicitud de eliminación. Todas las demás operaciones de contenedor se realizarán correctamente en un contenedor sujeto a una concesión sin necesidad de incluir el identificador de concesión. Si ha habilitado la eliminación temporal de contenedores, puede restaurar los contenedores eliminados.

Para obtener más información sobre los estados de concesión y cuándo puedes realizar una acción determinada en una concesión, consulta Estados y acciones de concesión.

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 blob mediante la biblioteca cliente, consulte Creación y administración de concesiones de blob con .NET.

Adquisición de una concesión

Al adquirir una concesión de contenedor, obtienes un identificador de concesión que el código puede usar para operar en el contenedor. Si el contenedor ya tiene una concesión activa, solo puedes 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 contenedor:

public static async Task<BlobLeaseClient> AcquireContainerLeaseAsync(
    BlobContainerClient containerClient)
{
    // Get a BlobLeaseClient object to work with a container lease
    BlobLeaseClient leaseClient = containerClient.GetBlobLeaseClient();

    Response<BlobLease> response =
        await leaseClient.AcquireAsync(duration: TimeSpan.FromSeconds(30));

    // Use response.Value to get information about the container lease

    return leaseClient;
}

Renovación de una concesión

Puedes renovar una concesión de contenedor si el id. de concesión especificado en la solicitud coincide con el id. de concesión asociado al contenedor. La concesión se puede renovar incluso si ha expirado, siempre que el contenedor no se haya concedido de nuevo desde la caducidad de la 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 de contenedor:

public static async Task RenewContainerLeaseAsync(
    BlobContainerClient containerClient,
    string leaseID)
{
    // Get a BlobLeaseClient object to work with a container lease
    BlobLeaseClient leaseClient = containerClient.GetBlobLeaseClient(leaseID);

    await leaseClient.RenewAsync();
}

Liberación de una concesión

Puedes liberar una concesión de contenedor si el id. de concesión especificado en la solicitud coincide con el id. de concesión asociado al contenedor. Liberar la concesión permite a otro cliente adquirir la concesión sobre el contenedor 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:

En el ejemplo siguiente, se libera una concesión en un contenedor:

public static async Task ReleaseContainerLeaseAsync(
    BlobContainerClient containerClient,
    string leaseID)
{
    // Get a BlobLeaseClient object to work with a container lease
    BlobLeaseClient leaseClient = containerClient.GetBlobLeaseClient(leaseID);

    await leaseClient.ReleaseAsync();
}

Interrupción de una concesión

Puedes interrumpir una concesión de contenedor si el contenedor 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 impide que se adquiera una nueva concesión durante un período de tiempo 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 contenedor:

public static async Task BreakContainerLeaseAsync(
    BlobContainerClient containerClient)
{
    // Get a BlobLeaseClient object to work with a container lease
    BlobLeaseClient leaseClient = containerClient.GetBlobLeaseClient();

    await leaseClient.BreakAsync();
}

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.

Diagrama que muestra los estados de concesión de contenedores y los desencadenadores de cambio de estado.

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 contenedor 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 se produce un error en la solicitud, el cliente sabe que el contenedor se ha concedido de nuevo, o que se ha eliminado desde que la concesión estuvo activa por última vez.

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 contenedor. Sin embargo, el cliente puede renovar inmediatamente la concesión con el identificador de concesión expirada.

Recursos

Para obtener más información sobre cómo administrar concesiones de contenedor con la biblioteca cliente de Azure Blob Storage para .NET, consulte los recursos siguientes.

Operaciones de API REST

El SDK de Azure para .NET 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 .NET. Los métodos de la biblioteca cliente para administrar concesiones de contenedor usan esta operación de API de REST:

Ejemplos de código

Recursos de la biblioteca cliente

Consulte también