Создание моментального снимка BLOB-объектов и управление ими с помощью .NET
Моментальный снимок — это версия BLOB-объекта только для чтения, сделанная в определенный момент времени. В этой статье показано, как создавать моментальные снимки BLOB-объектов и управлять ими с помощью клиентской библиотеки службы хранилища Azure для .NET.
Дополнительные сведения о моментальных снимках BLOB-объектов в службе хранилища Azure см. в статье Моментальные снимки BLOB-объектов.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Последний пакет SDK для .NET для операционной системы. Обязательно получите пакет SDK, а не среду выполнения.
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для .NET. Ниже приведены шаги по установке пакета, добавлению using
директив и созданию авторизованного клиентского объекта. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и .NET".
Установка пакетов
В каталоге проекта установите пакеты для клиентских библиотек Хранилище BLOB-объектов Azure и удостоверений Azure с помощью dotnet add package
команды. Пакет Azure.Identity необходим для бессерверных подключений к службам Azure.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Добавьте директивы using
.
Добавьте эти using
директивы в начало файла кода:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Для некоторых примеров кода в этой статье могут потребоваться дополнительные using
директивы.
Создание клиентского объекта
Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential
авторизации:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
Вы можете зарегистрировать клиент службы для внедрения зависимостей в приложении .NET.
Вы также можете создавать клиентские объекты для определенных контейнеров или больших двоичных объектов. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Авторизация
Механизм авторизации должен иметь необходимые разрешения для работы с моментальными снимками BLOB-объектов. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), требуется встроенный участник данных хранилища BLOB-объектов хранилища ролей или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для BLOB-объекта моментального снимка.
Создание моментального снимка
Чтобы создать моментальный снимок блочного большого двоичного объекта, используйте один из следующих методов:
В следующем примере кода показано, как создать моментальный снимок. Включите ссылку на библиотеку Azure.Identity , чтобы использовать учетные данные Microsoft Entra для авторизации запросов к службе. Дополнительные сведения об использовании класса DefaultAzureCredential для авторизации управляемого удостоверения для доступа к службе хранилища Azure см. в статье Клиентская библиотека Azure Identity для .NET.
private static async Task CreateBlockBlobSnapshot(
string accountName,
string containerName,
string blobName,
Stream data)
{
const string blobServiceEndpointSuffix = ".blob.core.windows.net";
Uri containerUri =
new Uri("https://" + accountName + blobServiceEndpointSuffix + "/" + containerName);
// Get a container client object and create the container.
BlobContainerClient containerClient = new BlobContainerClient(containerUri,
new DefaultAzureCredential());
await containerClient.CreateIfNotExistsAsync();
// Get a blob client object.
BlobClient blobClient = containerClient.GetBlobClient(blobName);
try
{
// Upload text to create a block blob.
await blobClient.UploadAsync(data);
// Add blob metadata.
IDictionary<string, string> metadata = new Dictionary<string, string>
{
{ "ApproxBlobCreatedDate", DateTime.UtcNow.ToString() },
{ "FileType", "text" }
};
await blobClient.SetMetadataAsync(metadata);
// Sleep 5 seconds.
System.Threading.Thread.Sleep(5000);
// Create a snapshot of the base blob.
// You can specify metadata at the time that the snapshot is created.
// If no metadata is specified, then the blob's metadata is copied to the snapshot.
await blobClient.CreateSnapshotAsync();
}
catch (RequestFailedException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
Удаление моментальных снимков
Чтобы удалить BLOB-объект, необходимо сначала удалить все его моментальные снимки. Можно удалить моментальный снимок отдельно или указать, чтобы при удалении исходного большого двоичного объекта были удалены и все его моментальные снимки. Попытка удалить большой двоичный объект, у которого еще есть моментальные снимки, завершится ошибкой.
Чтобы удалить большой двоичный объект и его моментальные снимки, используйте один из следующих методов и включите перечисление DeleteSnapshotsOption :
В следующем примере кода показано, как удалить большой двоичный объект и его моментальные снимки в .NET, где blobClient
находится объект типа BlobClient:
await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);
Копирование моментального снимка большого двоичного объекта по базовому BLOB-объекту
Вы можете выполнить операцию копирования, чтобы повысить уровень моментального снимка по его базовому BLOB-объекту, если базовый большой двоичный объект находится на сетевом уровне (горячий или холодный). Моментальный снимок остается, но его назначение перезаписывается с копией, в которую можно считывать и записывать.
В следующем примере кода показано, как скопировать моментальный снимок БОЛЬШОго двоичного объекта по базовому BLOB-объекту:
public static async Task<BlockBlobClient> CopySnapshotOverBaseBlobAsync(
BlockBlobClient client,
string snapshotTimestamp)
{
// Instantiate BlockBlobClient with identical URI and add snapshot timestamp
BlockBlobClient snapshotClient = client.WithSnapshot(snapshotTimestamp);
// Restore the specified snapshot by copying it over the base blob
await client.SyncUploadFromUriAsync(snapshotClient.Uri, overwrite: true);
// Return the client object after the copy operation
return client;
}
Ресурсы
Дополнительные сведения об управлении моментальными снимками BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для .NET см. в следующих ресурсах.
Дополнительные примеры кода, использующие устаревшие пакеты SDK для .NET версии 11.x, см. в примерах кода с помощью .NET версии 11.x.