Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Моментальный снимок — это объект 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.