Créer et gérer des baux de blob avec .NET

Cet article explique comment créer et gérer des baux de blob en utilisant la bibliothèque de client du Stockage Azure pour .NET. Vous pouvez utiliser la bibliothèque de client pour acquérir, renouveler, libérer et arrêter des baux.

Prérequis

  • Cet article suppose que vous disposez déjà d'un projet configuré pour fonctionner avec la bibliothèque client Azure Blob Storage pour .NET. Pour en savoir plus sur la configuration de votre projet, y compris l’installation du package, l’ajout de directives using et la création d’un objet client autorisé, consultez Bien démarrer avec Stockage Blob Azure et .NET.
  • Le mécanisme d’autorisation doit disposer des autorisations nécessaires pour utiliser un bail d’objets blob. Pour en savoir plus, consultez les conseils d’autorisation pour l’opération d’API REST suivante :

À propos des baux d’objets blob

Un bail crée et gère un verrou sur un blob pour les opérations d’écriture et de suppression. La durée du verrou peut être de 15 à 60 secondes, ou peut être infinie. Un bail sur un objet blob fournit un accès exclusif en écriture et en suppression à l'objet blob. Pour écrire dans un objet blob avec un bail actif, un client doit inclure l'ID de bail actif à la demande d'écriture.

Pour en savoir plus sur les états de bail et sur le moment où vous pouvez effectuer une action donnée sur un bail, consultez États et actions de bail.

Toutes les opérations de conteneur sont autorisées sur un conteneur qui comprend des blobs avec un bail actif, notamment Delete Container. Par conséquent, un conteneur peut être supprimé même si les blobs qu’il contient ont des baux actifs. Utilisez l’opération Lease Container pour contrôler les droits de suppression d’un conteneur.

Les opérations de bail sont gérées par la classe BlobLeaseClient qui fournit un client contenant toutes les opérations de bail pour des objets blob et des conteneurs. Pour en savoir plus sur les baux de conteneur avec la bibliothèque de client, consultez Créer et gérer des baux de conteneur avec .NET.

Acquérir un bail

Quand vous obtenez un objet blob, vous obtenez un ID de bail que votre code peut utiliser pour agir sur le blob. Si l’objet blob a déjà un bail actif, vous pouvez uniquement demander un nouveau bail à l’aide de l’ID de bail actif. Toutefois, vous pouvez spécifier une nouvelle durée de bail.

Pour acquérir un bail, créez une instance de la classe BlobLeaseClient, puis utilisez l’une des méthodes suivantes :

L’exemple suivant acquiert un bail de 30 secondes pour un blob :

public static async Task<BlobLeaseClient> AcquireBlobLeaseAsync(
    BlobClient blobClient)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient();

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

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

    return leaseClient;
}

Renouveler un bail

Vous pouvez renouveler un bail d’objet blob si l’ID de bail spécifié dans la requête correspond à l’ID de bail associé à l’objet blob. Le bail peut être renouvelé même s’il a expiré, tant que l’objet blob n’a pas été modifié ou n’a pas été reloué depuis l’expiration de ce bail. Lorsque vous renouvelez un bail, la durée de bail se réinitialise.

Pour renouveler un bail, utilisez l’une des méthodes suivantes sur une instance BlobLeaseClient :

L’exemple suivant renouvelle un bail de blob :

public static async Task RenewBlobLeaseAsync(
    BlobClient blobClient,
    string leaseID)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient(leaseID);

    await leaseClient.RenewAsync();
}

Libérer un bail

Vous pouvez louer un bail d’objet blob si l’ID de bail spécifié dans la requête correspond à l’ID de bail associé à l’objet blob. L’arrêt du bail permet à un autre client d’acquérir le bail pour l’objet blob immédiatement après la mise en production.

Vous pouvez libérer un bail avec l’une des méthodes suivantes sur une instance BlobLeaseClient :

L’exemple suivant libère un bail d’un blob :

public static async Task ReleaseBlobLeaseAsync(
    BlobClient blobClient,
    string leaseID)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient(leaseID);

    await leaseClient.ReleaseAsync();
}

Arrêter un bail

Vous pouvez arrêter un bail d’objet blob si l’objet blob a un bail actif. Toute requête autorisée peut arrêter le bail ; la demande ne spécifie pas obligatoirement un ID de bail correspondant. Un bail ne peut pas être renouvelé après son arrêt et la rupture d’un bail empêche l’acquisition d’un nouveau bail pendant un certain temps jusqu’à l’expiration ou la libération du bail d’origine.

Vous pouvez résilier un bail avec l’une des méthodes suivantes sur une instance BlobLeaseClient :

L’exemple suivant résilie un bail d’un blob :

public static async Task BreakBlobLeaseAsync(
    BlobClient blobClient)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient();

    await leaseClient.BreakAsync();
}

États et actions de bail

Le diagramme suivant montre les cinq états d'un bail, et les commandes ou les événements qui peuvent entraîner des modifications d'état du bail.

A diagram showing blob lease states and state change triggers.

Le tableau suivant liste les cinq états de bail, en fournit une brève description et liste les actions de bail autorisées dans un état donné. Ces actions de bail entraînent des transitions d’état, comme illustré dans le diagramme.

État du bail Description Actions de bail autorisées
Disponible Le bail est déverrouillé et peut être acquis. acquire
Loué Le bail est verrouillé. acquire (ID de bail identique uniquement), renew, change, release et break
Expired La durée du bail a expiré. acquire, renew, release et break
Rupture Le bail a été résilié, mais continue d’être verrouillé jusqu’à l’expiration de la période de résiliation. release et break
Rompu Le bail a été résilié et la période de résiliation a expiré. acquire, release et break

Une fois un bail expiré, l’ID de bail est conservé par le service BLOB jusqu’à ce que le blob soit modifié ou loué de nouveau. Un client peut tenter de renouveler ou de libérer le bail en utilisant l’ID de bail expiré. Si cette opération réussit, le client sait que le blob n’a pas changé depuis la dernière fois que l’ID de bail était valide. Si la demande échoue, le client sait que le blob a été modifié ou qu’il a été reloué depuis la dernière fois que le bail était actif. Le client doit ensuite acquérir un nouveau bail sur l'objet blob.

Si un bail expire au lieu d'être explicitement libéré, un client doit attendre jusqu'à une minute avant qu'un nouveau bail puisse être acquis pour l'objet blob. Toutefois, le client peut renouveler le bail avec son ID de bail immédiatement si le blob n’a pas été modifié.

Un bail ne peut pas être accordé pour un instantané de blob, car les instantanés sont en lecture seule. La demande d’un bail sur un instantané entraîne le code d’état 400 (Bad Request).

Ressources

Pour en savoir plus sur la gestion des actions de bail d’objets blob à l’aide de la bibliothèque de client Stockage Blob Azure pour .NET, consultez les ressources suivantes.

Opérations de l'API REST

Le Kit de développement logiciel (SDK) Azure pour .NET contient des bibliothèques qui s’appuient sur l’API REST Azure et vous permettant d’interagir avec des opérations de l’API REST par le biais de paradigmes .NET familiers. Les méthodes de bibliothèque de client pour la gestion des baux d’objets blob utilisent l’opération d’API REST suivante :

Exemples de code

Ressources de bibliothèque cliente

Voir aussi