Sdílet prostřednictvím


Odstranění a obnovení objektu blob pomocí Pythonu

Tento článek ukazuje, jak odstranit objekty blob pomocí klientské knihovny Azure Storage pro Python a jak obnovit měkce smazané objekty blob během retenční doby.

Další informace o odstranění objektu blob pomocí asynchronních rozhraní API najdete v tématu Asynchronní odstranění objektu blob.

Prerequisites

Nastavení prostředí

Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s klientskou knihovnou Azure Blob Storage pro Python. Další podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a Pythonem.

Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.

Instalace balíčků

Nainstalujte následující balíčky pomocí pip install:

pip install azure-storage-blob azure-identity

Přidejte příkazy importu

Přidejte následující import příkazy:

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

Authorization

Autorizační mechanismus musí mít potřebná oprávnění k odstranění objektu blob nebo k obnovení měkkého smazání objektu blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete integrovanou roli Azure RBAC Storage Blob Data Contributor nebo vyšší. Další informace najdete v pokynech pro autorizaci k odstranění objektu blob (REST API) a obnovení objektu blob (REST API).

Vytvoření objektu klienta

Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte instanci BlobServiceClient. Následující příklad ukazuje, jak pomocí DefaultAzureCredential vytvořit objekt klienta pro autorizaci.

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

Můžete také vytvořit klientské objekty pro konkrétní kontejnery nebo objekty blob, a to buď přímo, nebo z objektu BlobServiceClient . Další informace o vytváření a správě klientských objektů najdete v tématu Vytváření a správa klientských objektů, které pracují s datovými prostředky.

Odstranění objektu blob

Note

Pokud je pro účet úložiště povolené měkké odstranění objektů blob, nemůžete trvalé odstranění provést pomocí metod klientské knihovny. Pomocí metod v tomto článku zůstane měkce smazaný objekt blob, verze objektu blob nebo snímek k dispozici, dokud nevyprší doba uchovávání, poté je trvale odstraněn. Další informace o základní operaci rozhraní REST API najdete v tématu Odstranění objektu blob (REST API).

Pokud chcete odstranit objekt blob, zavolejte následující metodu:

Následující příklad odstraní 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()

Pokud objekt blob obsahuje nějaké přidružené snímky, musíte odstranit všechny jeho snímky, abyste objekt blob odstranili. Následující příklad odstraní objekt blob a jeho snímky:

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

Pokud chcete odstranit pouze snímky a ne samotný objekt blob, můžete předat parametr delete_snapshots="only".

Obnovení odstraněného blobu

Obnovitelné odstranění objektu blob chrání jednotlivý blob a jeho verze, snímky a metadata před náhodným odstraněním nebo přepsáním tak, že odstraněná data se po určitou dobu uchovají v systému. Během doby uchovávání můžete blob obnovit do stavu v době jeho odstranění. Po vypršení doby uchování je blob trvale odstraněn. Další informace o obnovitelném odstranění objektů blob najdete v tématu Obnovitelné odstranění objektů blob.

Klientské knihovny Azure Storage můžete použít k obnovení měkce smazaného objektu blob nebo snímku.

Obnovení obnovitelně odstraněného objektu blob závisí na tom, jestli má váš účet úložiště povolenou správu verzí objektů blob. Další informace o správě verzí objektů blob najdete v tématu Správa verzí objektů blob. V závislosti na vašem scénáři si projděte jednu z následujících částí:

Obnovení obnovitelně odstraněných objektů při zakázání správy verzí

Pokud chcete obnovit odstraněné objekty blob při zakázání správy verzí, zavolejte následující metodu:

Tato metoda obnoví obsah a metadata obnovitelně odstraněného objektu blob a všechny přidružené obnovitelné odstraněné snímky. Volání této metody pro objekt blob, který nebyl odstraněn, nemá žádný vliv.

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

Obnovení obnovitelně odstraněných objektů při povolení správy verzí

Pokud je účet úložiště nakonfigurovaný tak, aby umožňoval správu verzí objektů blob, odstranění objektu blob způsobí, že aktuální verze objektu blob se stane předchozí verzí. Pokud chcete obnovit soft smazaný objekt blob při povolení správy verzí, zkopírujte předchozí verzi do původního objektu blob. Můžete použít následující metodu:

Následující příklad kódu získá nejnovější verzi odstraněného objektu blob a obnoví nejnovější verzi zkopírováním do základního objektu blob:

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)

Odstranění objektu blob asynchronně

Klientská knihovna Azure Blob Storage pro Python podporuje asynchronní odstranění objektu blob. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.

Pomocí následujících kroků odstraňte objekt blob pomocí asynchronních rozhraní API:

  1. Přidejte následující příkazy importu:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Přidejte kód pro spuštění programu pomocí asyncio.run. Tato funkce spustí předanou korutinu v našem příkladu main() a spravuje událostní smyčku asyncio. Koroutiny jsou deklarovány syntaxí async/await. V tomto příkladu nejprve korutina main() vytvoří vrcholnou úroveň BlobServiceClient pomocí async with, a pak zavolá metodu, která odstraní datablob. Mějte na paměti, že pouze klient nejvyšší úrovně musí používat async with, protože ostatní klienti, kteří jsou z něj vytvořeni, sdílejí stejný fond připojení.

    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. Přidejte kód pro odstranění objektu blob. Kód je stejný jako synchronní příklad, s výjimkou toho, že metoda je deklarována s použitím klíčového slova async a při volání metody await se používá klíčové slovo 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()
    

S tímto základním nastavením můžete další příklady v tomto článku implementovat jako korutiny pomocí syntaxe async/await.

Resources

Další informace o odstraňování objektů blob a obnovení obnovitelně odstraněných objektů blob pomocí klientské knihovny služby Azure Blob Storage pro Python najdete v následujících zdrojích informací.

Ukázky kódu

Operace rozhraní REST API

Sada Azure SDK pro Python obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Pythonu. Metody klientské knihovny pro odstranění objektů blob a obnovení odstraněných objektů blob používají následující operace rozhraní REST API:

Prostředky klientské knihovny

Viz také

  • Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace v Pythonu.