Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Моментальный снимок — это объект BLOB в режиме только для чтения, сделанный в определенный момент времени. В этой статье показано, как создавать мгновенные снимки BLOB-объектов и управлять ими с помощью клиентской библиотеки хранилища Azure для .NET.
Дополнительные сведения о моментальных снимках BLOB-объектов в службе хранилища Azure см. в статье Моментальные снимки BLOB-объектов.
Предварительные требования
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Новейший .NET SDK для вашей операционной системы. Обязательно получите пакет SDK, а не среду выполнения.
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для .NET. Ниже приведены шаги по установке пакета, добавлению using
директив и созданию авторизованного клиентского объекта. Дополнительные сведения см. в статье «Начало работы с Azure Blob Storage и .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-объектов. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Авторизация
Механизм авторизации должен иметь необходимые разрешения для работы с моментальными снимками BLOB-объектов. Для авторизации с использованием Microsoft Entra ID (рекомендуется) требуется встроенная роль Azure RBAC Storage Blob Data Contributor или более высокая. Дополнительные сведения см. в руководстве по авторизации для моментального снимка 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-объект, необходимо сначала удалить все его моментальные снимки. Можно удалить моментальный снимок отдельно или указать, чтобы при удалении исходного объекта BLOB удалялись все его моментальные снимки. Если попытаться удалить блоб, у которого все еще есть моментальные снимки, это вызовет ошибку.
Чтобы удалить объект BLOB и его моментальные снимки, используйте один из следующих методов с перечислением DeleteSnapshotsOption.
В следующем примере кода показано, как удалить блоб и его моментальные снимки в .NET, где blobClient
— это объект типа BlobClient.
await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);
Копирование моментального снимка BLOB-объекта на базовый BLOB-объект.
Вы можете выполнить операцию копирования, чтобы продвинуть моментальный снимок перед его базовым 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.