.NET での BLOB スナップショットの作成と管理

スナップショットは、ある時点で作成された読み取り専用の BLOB です。 この記事では、.NET 用の Azure Storage クライアント ライブラリを使用して BLOB スナップショットを作成および管理する方法について説明します。

Azure Storage での BLOB のスナップショットの詳細については、「BLOB のスナップショット」を参照してください。

前提条件

  • この記事では、.NET 用の Azure Blob Storage クライアント ライブラリを操作するようにプロジェクトが既に設定されていることを前提としています。 パッケージのインストール、using ディレクティブの追加、認可済みクライアント オブジェクトの作成など、プロジェクトの設定については、「Azure Blob Storage と .NET の作業を始める」を参照してください。
  • 認可メカニズムには、BLOB スナップショットを操作するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。

スナップショットの作成

ブロック BLOB のスナップショットを作成するには、次のいずれかの方法を使用します。

次のコード例は、スナップショットを作成する方法を示しています。 Microsoft Entra の資格情報を使用してサービスへの要求を承認するには、Azure.Identity ライブラリへの参照を含めます。 DefaultAzureCredential クラスを使用して、Azure Storage にアクセスするためのマネージド ID を認可するための方法の詳細については、.NET 用の Azure ID クライアント ライブラリを参照してください。

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 が削除されたときにすべてのスナップショットを削除するように指定することもできます。 スナップショットがまだ存在する BLOB を削除しようとすると、エラーが発生します。

BLOB とそのスナップショットを削除するには、次のいずれかの方法を使用して、DeleteSnapshotsOption 列挙型を含めます。

次のコード例は、.NET で BLOB とそのスナップショットを削除する方法を示しています。blobClientBlobClient 型のオブジェクトです。

await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);

BLOB スナップショットをベース 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;
}

リソース

.NET 用 Azure Blob Storage クライアント ライブラリを使用した BLOB スナップショットの管理の詳細については、次のリソースを参照してください。

非推奨の .NET バージョン 11.x SDK を使用する関連コード サンプルについて、詳しくは「.NET バージョン 11.x を使用したコード サンプル」をご覧ください。

クライアント ライブラリのリソース

こちらもご覧ください