Partager via


Supprimer et restaurer un blob avec Python

Cet article montre comment supprimer des objets blob en utilisant la bibliothèque de client Stockage Azure pour Python et restaurer des objets blob supprimés de manière réversible pendant la période de rétention.

Pour en savoir plus sur la suppression d’un blob à l’aide d’API asynchrones, consultez Supprimer un blob de manière asynchrone.

Prérequis

Paramétrer votre environnement

Si vous n’avez aucun projet existant, cette section vous montre comment configurer un projet de façon à utiliser la bibliothèque de client Stockage Blob Azure pour Python. Pour plus d’informations, consultez Bien démarrer avec le service Stockage Blob Azure et Python.

Pour utiliser les exemples de code de cet article, effectuez les étapes suivantes pour configurer votre projet.

Installer des packages

Installez les packages suivants en utilisant pip install :

pip install azure-storage-blob azure-identity

Ajouter des instructions import

Ajoutez les instructions import suivantes :

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

Autorisation

Le mécanisme d’autorisation doit disposer des autorisations nécessaires pour supprimer un blob ou restaurer un blob supprimé de manière réversible. 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 les conseils d’autorisation pour les opérations Delete Blob (API REST) et Undelete Blob (API REST).

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 :

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)

Vous pouvez également créer des objets clients pour des conteneurs ou des objets blob spécifiques, directement ou à partir de l’objet BlobServiceClient. 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.

Supprimer un objet blob

Remarque

Lorsque la suppression réversible d’objets blob est activée pour un compte de stockage, vous ne pouvez pas effectuer de suppression définitive en utilisant des méthodes de bibliothèque de client. L’utilisation des méthodes de cet article permet de conserver une capture instantanée, une version d’objet blob ou un objet blob supprimé de manière réversible disponible jusqu’à l’expiration de la période de rétention, après quoi ils sont définitivement supprimés. Pour en savoir plus sur l’opération d’API REST sous-jacente, consultez Supprimer un blob (API REST).

Pour supprimer un blob, appelez la méthode suivante :

L’exemple suivant supprime un blob :

def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    blob_client.delete_blob()

Si le blob a des instantanés associés, vous devez supprimer tous ses instantanés pour le supprimer. L’exemple suivant supprime un blob et ses instantanés :

def delete_blob_snapshots(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    blob_client.delete_blob(delete_snapshots="include")

Pour supprimer uniquement les instantanés et non le blob lui-même, vous pouvez passer le paramètre delete_snapshots="only".

Restaurer un objet blob supprimé

La suppression réversible d’objets blob protège un objet blob et ses versions, instantanés et métadonnées contre les suppressions ou les remplacements accidentels en conservant les données supprimées dans le système pendant un laps de temps spécifié. Pendant la période de rétention, vous pouvez restaurer l’objet blob à son état au moment de la suppression. Une fois la période de conservation expirée, l’objet est supprimé définitivement. Pour plus d’informations sur la suppression réversible d’objets blob, consultez Suppression réversible pour les objets blob.

Vous pouvez utiliser les bibliothèques de client de Stockage Azure pour restaurer un objet blob ou une capture instantanée supprimés de manière réversible.

La façon de restaurer un objet blob supprimé de manière réversible dépend de l’activation du contrôle de version d’objets blob de votre compte de stockage. Pour plus d’informations sur la gestion de versions des objets blob, consultez Gestion de versions des objets blob. Consultez l’une des sections suivantes en fonction de votre scénario :

Restaurer des objets supprimés de manière réversible quand le contrôle de version est désactivé

Pour restaurer des blobs supprimés quand le versioning est désactivé, appelez l’une des méthodes suivantes :

Cette méthode restaure le contenu et les métadonnées d’un blob supprimé de manière réversible et de tous les instantanés associés supprimés de manière réversible. L’appel de cette méthode pour un blob qui n’a pas été supprimé est sans effet.

def restore_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    blob_client.undelete_blob()

Restaurer des objets supprimés de manière réversible quand le versioning est activé

Si un compte de stockage est configuré pour activer le contrôle de version de blobs, la suppression d’un blob définit la version actuelle du blob comme version précédente. Pour restaurer un blob supprimé de manière réversible quand le versioning est activé, copiez une version précédente sur le blob de base. Vous pouvez utiliser la méthode suivante :

L’exemple de code suivant obtient la dernière version d’un blob supprimé et la restaure en la copiant dans le blob de base :

def restore_blob_version(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    container_client = blob_service_client.get_container_client(container=container_name)

    # Get a reference to the soft-deleted base blob and list all the blob versions
    blob_client = container_client.get_blob_client(blob=blob_name)
    blob_list = container_client.list_blobs(name_starts_with=blob_name, include=['deleted','versions'])
    blob_versions = []
    for blob in blob_list:
        blob_versions.append(blob.version_id)
    
    # Get the latest version of the soft-deleted blob
    blob_versions.sort(reverse=True)
    latest_version = blob_versions[0]

    # Build the blob URI and add the version ID as a query string
    versioned_blob_url = f"{blob_client.url}?versionId={latest_version}"

    # Restore the latest version by copying it to the base blob
    blob_client.start_copy_from_url(versioned_blob_url)

Supprimer un blob de manière asynchrone

La bibliothèque cliente Stockage Blob Azure pour Python prend en charge la suppression asynchrone d’un blob. Pour en savoir plus sur les exigences de configuration de projet, consultez programmation asynchrone.

Procédez comme suit pour supprimer un blob à l’aide d’API asynchrones :

  1. Ajoutez les instructions d’importation suivantes :

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Ajoutez du code pour exécuter le programme à l’aide de asyncio.run. Cette fonction exécute la coroutine passée, main() dans notre exemple et gère la boucle d’événement asyncio. Les coroutines sont déclarées avec la syntaxe asynchrone/await. Dans cet exemple, la coroutine main() crée d’abord BlobServiceClient de niveau supérieur à l’aide de async with, puis appelle la méthode qui supprime le blob. Notez que seul le client de niveau supérieur doit utiliser async with, car d’autres clients créés à partir de celui-ci partagent le même pool de connexions.

    async def main():
        sample = BlobSamples()
    
        # TODO: Replace <storage-account-name> with your actual storage account name
        account_url = "https://<storage-account-name>.blob.core.windows.net"
        credential = DefaultAzureCredential()
    
        async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
            await sample.delete_blob(blob_service_client, "sample-container", "sample-blob.txt")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Ajoutez du code pour supprimer le blob. Le code est identique à l’exemple synchrone, sauf que la méthode est déclarée avec le mot clé async et que le mot clé await est utilisé lors de l’appel de la méthode delete_blob.

    async def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
        blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
        await blob_client.delete_blob()
    

Avec cette configuration de base en place, vous pouvez implémenter d’autres exemples dans cet article en tant que coroutines à l’aide de la syntaxe asynchrone/await.

Ressources

Pour découvrir plus d’informations sur la suppression de blobs et la restauration de blobs supprimés de manière réversible en utilisant la bibliothèque de client de Stockage Blob Azure pour Python, consultez les ressources suivantes.

Exemples de code

Opérations de l'API REST

Le SDK Azure pour Python contient des bibliothèques qui reposent sur l’API REST Azure, ce qui vous permet d’interagir avec les opérations d’API REST en utilisant des paradigmes Python familiers. Les méthodes de bibliothèque de client pour supprimer des blobs et restaurer des blob supprimés utilisent les opérations d’API REST suivantes :

Ressources de bibliothèque cliente

Voir aussi

  • Cet article fait partie du guide Stockage Blob pour Python pour les développeurs. Pour découvrir plus d’informations, consultez la liste complète des articles du guide du développeur dans Générer votre application Python.