Partager via


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

Cet article explique comment créer et gérer des baux de conteneur 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 de conteneur.

Prérequis

Paramétrer votre environnement

Si vous n’avez pas de projet existant, cette section vous montre comment configurer un projet pour travailler avec la bibliothèque de client Stockage Blob Azure pour .NET. Les étapes comprennent l’installation du package, l’ajout de directives using et la création d’un objet client autorisé. Pour plus d’informations, consultez Prise en main du Stockage Blob Azure et de .NET.

Installer des packages

À partir du répertoire du projet, installez les packages des bibliothèques de client Stockage Blob Azure et Azure Identity à l’aide de la commande dotnet add package. Le package Azure.Identity est nécessaire pour les connexions sans mot de passe aux services Azure.

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

Ajoutez des directives using.

Ajoutez ces directives using au début de votre fichier de code :

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

Certains exemples de code de cet article peuvent nécessiter des directives using supplémentaires.

Créer un objet client

Pour connecter une application au Stockage Blob, créez une instance de BlobServiceClient. L’exemple suivant montre comment créer un objet client à l’aide de DefaultAzureCredential pour l’autorisation :

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

    return client;
}

Vous pouvez inscrire un client de service pour l’injection de dépendances dans une application .NET.

Vous pouvez également créer des objets clients pour des conteneurs ou des objets blob spécifiques. Pour en savoir plus sur la création et la gestion d’objets clients, consultez Créer et gérer des objets clients qui interagissent avec des ressources de données.

Autorisation

Le mécanisme d’autorisation doit avoir les autorisations nécessaires pour utiliser un bail de conteneur. Pour l’autorisation avec Microsoft Entra ID (recommandé), vous devez disposer au minimum du rôle RBAC Azure intégré Contributeur aux données Blob du stockage. Pour en savoir plus, consultez le guide des autorisations de Louer un conteneur (API REST).

À propos des baux de conteneur

Un bail établit et gère un verrou sur un conteneur pour les opérations de suppression. La durée du verrou peut être de 15 à 60 secondes, ou peut être infinie. Un bail sur un conteneur fournit un accès exclusif en suppression au conteneur. Un bail de conteneur contrôle uniquement la suppression du conteneur à l’aide de l’opération d’API REST Delete Container. Pour supprimer un conteneur avec un bail actif, le client doit inclure l'identificateur du bail actif dans la demande de suppression. Toutes les autres opérations de conteneur réussissent sur un conteneur loué sans ID de bail. Si vous avez activé la suppression réversible de conteneur, vous pouvez restaurer les conteneurs supprimés.

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.

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 blob avec la bibliothèque de client, consultez Créer et gérer des baux de blob avec .NET.

Acquérir un bail

Quand vous obtenez un bail de conteneur, vous obtenez un ID de bail que votre code peut utiliser pour agir sur le conteneur. Si le conteneur 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 conteneur :

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;
}

Renouveler un bail

Vous pouvez renouveler un bail de conteneur si l’ID de bail spécifié dans la requête correspond à l’ID de bail associé au conteneur. Le bail peut être renouvelé même s’il a expiré, tant que le conteneur 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 conteneur :

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();
}

Libérer un bail

Vous pouvez libérer un bail de conteneur si l’ID de bail spécifié dans la requête correspond à l’ID de bail associé au conteneur. La libération du bail permet à un autre client d’acquérir un bail pour le conteneur immédiatement après la libération.

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 conteneur :

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();
}

Arrêter un bail

Vous pouvez résilier un bail de conteneur si le conteneur 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 conteneur :

public static async Task BreakContainerLeaseAsync(
    BlobContainerClient containerClient)
{
    // Get a BlobLeaseClient object to work with a container lease
    BlobLeaseClient leaseClient = containerClient.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.

Diagramme montrant les états de bail de conteneur et les déclencheurs de changement d’état.

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 conteneur 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 la demande échoue, le client sait que le conteneur a été reloué ou qu’il a été supprimé depuis la dernière fois que le bail était actif.

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 le conteneur. Toutefois, le client peut renouveler le bail avec l'ID de bail expiré immédiatement.

Ressources

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

Exemples de code

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 de conteneur utilisent l’opération d’API REST suivante :

Ressources de bibliothèque cliente

Voir aussi

  • Cet article fait partie du guide du développeur Stockage Blob pour .NET. Pour en savoir plus, consultez la liste complète des articles du guide du développeur dans Générer votre application .NET.