Поделиться через


Удаление и восстановление большого двоичного объекта с помощью Python

В этой статье показано, как удалить большие двоичные объекты с помощью клиентской библиотеки служба хранилища Azure для Python. Если вы включили обратимое удаление для больших двоичных объектов, вы можете восстановить удаленные большие двоичные объекты в течение периода хранения.

Сведения об удалении большого двоичного объекта с помощью асинхронных API см. в статье "Удаление большого двоичного объекта" асинхронно.

Необходимые компоненты

  • В этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python. Сведения о настройке проекта, включая установку пакета, добавление import инструкций и создание авторизованного клиентского объекта, см. в статье "Начало работы с Хранилище BLOB-объектов Azure и Python".
  • Сведения об использовании асинхронных API в коде см. в разделе " Асинхронное программирование ".
  • Механизм авторизации должен иметь разрешения на удаление большого двоичного объекта или восстановление обратимого удаленного большого двоичного объекта. Дополнительные сведения см. в руководстве по авторизации для следующих операций REST API:

Удаление большого двоичного объекта

Чтобы удалить большой двоичный объект, вызовите следующий метод:

В следующем примере удаляется большой двоичный объект:

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

Если большой двоичный объект содержит связанные моментальные снимки, необходимо удалить все его моментальные снимки, чтобы удалить большой двоичный объект. В следующем примере удаляется большой двоичный объект и его моментальные снимки:

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

Чтобы удалить только моментальные снимки, а не сам большой двоичный объект, можно передать параметр delete_snapshots="only".

Восстановление удаленного BLOB-объекта

Обратимое удаление защищает BLOB-объект и его версии, а также моментальные снимки и метаданные от случайного удаления или перезаписи, сохраняя удаленные данные в системе в течение заданного периода времени. В течение срока хранения BLOB-объект можно восстановить до его состояния на момент удаления. По истечении срока хранения BLOB-объект удаляется окончательно. Дополнительные сведения об обратимом удалении BLOB-объектов см. в статье Обратимое удаление BLOB-объектов.

Клиентские библиотеки службы хранилища Azure позволяют восстановить обратимо удаленный BLOB-объект или моментальный снимок.

Восстановление обратимого удаленного большого двоичного объекта зависит от того, включена ли у вашей учетной записи хранения управление версиями БОЛЬШИХ двоичных объектов. Дополнительные сведения об управлении версиями BLOB-объектов см. в статье Управление версиями BLOB-объектов. См. один из следующих разделов в зависимости от вашего сценария:

Восстановление обратимо удаленных объектов, если управление версиями отключено

Чтобы восстановить удаленные большие двоичные объекты при отключении управления версиями, вызовите следующий метод:

Этот метод восстанавливает содержимое и метаданные обратимого удаленного большого двоичного объекта и всех связанных обратимо удаленных моментальных снимков. Вызов этого метода для большого двоичного объекта, который не был удален, не имеет никакого эффекта.

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

Восстановление обратимо удаленных объектов при включении управления версиями

Если учетная запись хранения настроена для включения управления версиями BLOB-объектов, удаление большого двоичного объекта приводит к тому, что текущая версия большого двоичного объекта станет предыдущей. Чтобы восстановить обратимо удаленный BLOB-объект при включении управления версиями, скопируйте предыдущую версию в основной 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)

Удаление большого двоичного объекта асинхронно

Клиентская библиотека Хранилище BLOB-объектов Azure для Python поддерживает асинхронное удаление большого двоичного объекта. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.

Выполните следующие действия, чтобы удалить большой двоичный объект с помощью асинхронных API:

  1. Добавьте в файл следующие операторы импорта:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Добавьте код для запуска программы с помощью asyncio.run. Эта функция запускает переданную корутину в main() нашем примере и управляет циклом asyncio событий. Корутины объявляются с синтаксисом async/await. В этом примере main() корутин сначала создает верхний уровень BlobServiceClient с помощью async with, а затем вызывает метод, который удаляет большой двоичный объект. Обратите внимание, что использовать только клиент верхнего уровня, так как другие клиенты, созданные из него, используют async withтот же пул подключений.

    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. Добавьте код для удаления большого двоичного объекта. Код совпадает с синхронным примером, за исключением того, что метод объявляется с async ключевое слово, а await при вызове 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()
    

С помощью этой базовой настройки вы можете реализовать другие примеры в этой статье в качестве корутин с помощью синтаксиса async/await.

Ресурсы

Дополнительные сведения об удалении больших двоичных объектов и восстановлении удаленных BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Python см. в следующих ресурсах.

Операции REST API

Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для удаления больших двоичных объектов и восстановления удаленных BLOB-объектов используют следующие операции REST API:

Примеры кода

Ресурсы клиентской библиотеки

См. также