Megosztás a következőn keresztül:


Blob törlése és visszaállítása a Pythonnal

Ez a cikk bemutatja, hogyan törölhet blobokat a PythonHoz készült Azure Storage ügyfélkódtár használatával, és hogyan állíthatja vissza a helyreállíthatóan törölt blobokat a megőrzési időszak alatt.

A blob aszinkron API-k használatával történő törléséről további információt a blob aszinkron törlése című témakörben talál.

Előfeltételek

Saját környezet beállítása

Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a PythonHoz készült Azure Blob Storage ügyfélkódtár használatához. További részletekért tekintse meg az Azure Blob Storage és a Python használatának első lépéseit.

A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.

Csomagok telepítése

Telepítse a következő csomagokat a következő használatával pip install:

pip install azure-storage-blob azure-identity

Importálási utasítások hozzáadása

Adja hozzá a következő import-utasításokat:

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

Engedélyezés

Az engedélyezési mechanizmusnak rendelkeznie kell a blob törléséhez vagy a helyreállíthatóan törölt blob visszaállításához szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített szerepkörű Storage Blob Data Közreműködő vagy újabb szerepkörre van szüksége. További információkért tekintse meg a Blob törlése (REST API) és az Undelete Blob (REST API) engedélyezési útmutatóját.

Ügyfélobjektum létrehozása

Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt. Az alábbi példa bemutatja, hogyan hozhat létre ügyfélobjektumot DefaultAzureCredential engedélyezés céljából:

# 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)

Ügyfélobjektumokat is létrehozhat adott tárolókhoz vagy blobokhoz közvetlenül vagy az BlobServiceClient objektumból. Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.

Blob törlése

Feljegyzés

Ha a blob helyreállítható törlése engedélyezve van egy tárfiókhoz, nem hajthat végre végleges törlést ügyfélkódtár-metódusokkal. A cikkben ismertetett módszerekkel a helyreállíthatóan törölt blobok, blobverziók vagy pillanatképek a megőrzési időszak lejártáig elérhetők maradnak, és ekkor véglegesen törlődnek. A mögöttes REST API-művelettel kapcsolatos további információkért lásd a Blob törlése (REST API) című témakört.

Blob törléséhez hívja meg a következő metódust:

Az alábbi példa egy blobot töröl:

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

Ha a blob rendelkezik társított pillanatképekkel, a blob törléséhez törölnie kell az összes pillanatképét. Az alábbi példa töröl egy blobot és annak pillanatképeit:

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")

Ha csak a pillanatképeket szeretné törölni, és magát a blobot nem, akkor átadhatja a paramétertdelete_snapshots="only".

Törölt blob visszaállítása

A blob helyreállítható törlésével megóvhatja az egyéni blobokat és azok verzióit, pillanatképeit és metaadatait a véletlen törléstől és felülírástól, mivel ezzel a művelettel a rendszer egy meghatározott ideig még megőrzi a törölt adatokat. A megőrzési időszak alatt a blobot visszaállíthatja a törléskor érvényes állapotába. A megőrzési időszak lejárta után a blob véglegesen törlődik. A blobok helyreállítható törlésével kapcsolatos további információkért lásd a blobok helyreállítható törlését ismertető szakaszt.

Az Azure Storage-ügyfélkódtárak használatával helyreállíthatja a helyreállíthatóan törölt blobokat vagy pillanatképeket.

A helyreállíthatóan törölt blobok visszaállításának módjától függ, hogy a tárfiók engedélyezve van-e a blobok verziószámozása. A blobok verziószámozásával kapcsolatos további információkért lásd a Blob verziószámozását. A forgatókönyvtől függően tekintse meg az alábbi szakaszok egyikét:

Helyreállíthatóan törölt objektumok visszaállítása, ha a verziószámozás le van tiltva

Ha vissza szeretné állítani a törölt blobokat, ha a verziószámozás le van tiltva, hívja meg a következő módszert:

Ez a módszer visszaállítja a helyreállíthatóan törölt blobok és a kapcsolódó helyreállíthatóan törölt pillanatképek tartalmát és metaadatait. A metódus nem törölt blob meghívásának nincs hatása.

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

Helyreállíthatóan törölt objektumok visszaállítása a verziószámozás engedélyezésekor

Ha egy tárfiók úgy van konfigurálva, hogy engedélyezze a blobok verziószámozását, a blob törlésével a blob aktuális verziója lesz az előző verzió. Ha vissza szeretne állítani egy helyreállíthatóan törölt blobot, ha engedélyezve van a verziószámozás, másolja az előző verziót az alapblobba. A következő módszert használhatja:

Az alábbi példakód lekéri egy törölt blob legújabb verzióját, és visszaállítja a legújabb verziót az alapblobba való másolással:

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)

Blob aszinkron törlése

A Pythonhoz készült Azure Blob Storage ügyfélkódtár támogatja a blobok aszinkron törlését. A projektbeállítási követelményekről további információt az Aszinkron programozás című témakörben talál.

A blob aszinkron API-k használatával történő törléséhez kövesse az alábbi lépéseket:

  1. Adja hozzá a következő importálási utasításokat:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Kód hozzáadása a program futtatásához a következő használatával asyncio.run: . Ez a függvény a példánkban futtatja az átadott koroutint, main() és kezeli az asyncio eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában a main() coroutine először a legfelső szintet BlobServiceClient async withhozza létre, majd meghívja a blobot törlő metódust. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használnia async with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.

    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. Adjon hozzá kódot a blob törléséhez. A kód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval async van deklarálva, és a await kulcsszót a metódus meghívásakor használja a delete_blob rendszer.

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

Ezzel az alapszintű beállítással a cikkben más példákat is implementálhat coroutinesként az aszinkron/várakozási szintaxis használatával.

Források

Ha többet szeretne megtudni a blobok törléséről és a helyreállíthatóan törölt blobok visszaállításáról a PythonHoz készült Azure Blob Storage ügyfélkódtár használatával, tekintse meg az alábbi erőforrásokat.

Kódminták

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A blobok törlésére és a törölt blobok visszaállítására szolgáló ügyfélkódtár-metódusok a következő REST API-műveleteket használják:

Ügyfélkódtár erőforrásai

Lásd még