Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этой статье показано, как удалить большие двоичные объекты с помощью клиентской библиотеки службы хранилища Azure для Python и как восстановить обратимо удаленные большие двоичные объекты в течение периода хранения.
Сведения об удалении большого двоичного объекта с помощью асинхронных API см. в статье "Удаление большого двоичного объекта" асинхронно.
Prerequisites
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Python 3.8+
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой хранилища BLOB-объектов Azure для Python. Дополнительные сведения см. в статье "Начало работы с хранилищем BLOB-объектов Azure" и Python.
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Установка пакетов
Установите следующие пакеты с помощью pip install:
pip install azure-storage-blob azure-identity
Добавьте инструкции импорта
Добавьте следующие import инструкции:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Authorization
Механизм авторизации должен иметь необходимые разрешения для удаления объекта blob или восстановления мягко удаленного объекта blob. Для авторизации с помощью Microsoft Entra ID (рекомендуется) требуется встроенная роль Сотрудник по данным объектов хранилища BLOB или выше. Чтобы узнать больше, ознакомьтесь с рекомендациями по авторизации для операций Удаление Blob (REST API) и Восстановление Blob (REST API).
Создание клиентского объекта
Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential авторизации:
# 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)
Можно также создавать клиентские объекты для конкретных контейнеров или объектов BLOB, как напрямую, так и из объекта BlobServiceClient. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Удалить BLOB
Note
Если мягкое удаление BLOB-объектов включено для учетной записи хранения, невозможно выполнить постоянное удаление с помощью методов клиентской библиотеки. Используя методы, приведенные в этой статье, мягко удаленный большой двоичный объект, его версия или моментальный снимок остаются доступными до истечения срока хранения, после чего он будет окончательно удален. Дополнительные сведения о базовой операции REST API см. в статье "Удаление BLOB-объектов (REST API)".
Чтобы удалить BLOB, вызовите следующий метод:
В следующем примере удаляется 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()
Если блоб имеет связанные с ним моментальные снимки, необходимо удалить все его моментальные снимки, чтобы удалить сам блоб. В следующем примере удаляются объект 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 окончательно удаляется. Дополнительные сведения об обратимом удалении BLOBs см. раздел "Обратимое удаление для BLOBs".
Можно использовать клиентские библиотеки Azure Storage для восстановления мягко удаленного большого двоичного объекта или моментального снимка.
Восстановление мягко удаленного BLOB зависит от того, включено ли у вашей учетной записи хранения версионирование BLOB. Дополнительные сведения об управлении версиями BLOB-объектов см. в статье Управление версиями 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 приводит к тому, что текущая версия становится предыдущей версией. Чтобы восстановить мягко удаленный двоичный объект, когда управление версиями включено, скопируйте предыдущую версию поверх базового двоичного объекта. Можно использовать следующий метод:
Следующий пример кода получает последнюю версию удаленного большого двоичного объекта и восстанавливает последнюю версию, скопировав его в базовый большой двоичный объект:
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 Blob Storage для Python поддерживает асинхронное удаление облака. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.
Выполните следующие действия, чтобы удалить большой двоичный объект с помощью асинхронных API:
Добавьте в файл следующие операторы импорта:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClientДобавьте код для запуска программы с помощью
asyncio.run. Эта функция запускает переданную корутину, в нашем примере,main(), и управляет циклом событийasyncio. Корутины объявляются с помощью синтаксиса async/await. В этом примереmain()корутина сначала создает топ-уровеньBlobServiceClientс помощьюasync with, а затем вызывает метод, который удаляет blob. Обратите внимание, что только клиент верхнего уровня должен использовать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())Добавьте код для удаления объекта blob. Код совпадает с синхронным примером, за исключением того, что метод объявляется с
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.
Resources
Дополнительные сведения об удалении BLOB-объектов и восстановлении обратимо удаленных BLOB-объектов с помощью клиентской библиотеки хранилища BLOB-объектов Azure для Python см. в следующих ресурсах.
Примеры кода
- Просмотр примеров синхронного или асинхронного кода из этой статьи (GitHub)
Операции REST API
Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для удаления BLOB-объектов и восстановления удаленных BLOB-объектов используют следующие операции REST API:
- Удаление BLOB-объекта (REST API)
- Отмена удаления БОЛЬШОго двоичного объекта (REST API)
Ресурсы клиентской библиотеки
См. также
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Python. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Python.