.NET を使用して BLOB を削除して復元する

この記事では、.NET 用の Azure Storage クライアント ライブラリを使用して BLOB を削除する方法と、保有期間中に論理的に削除された BLOB を復元する方法について説明します。

前提条件

環境を設定する

既存のプロジェクトがない場合、このセクションでは、.NET 用 Azure Blob Storage クライアント ライブラリを使用するようにプロジェクトを設定する方法について説明します。 このステップには、パッケージのインストール、usingディレクティブの追加、承認されたクライアント オブジェクトの作成が含まれます。 詳細については、「Azure Blob Storage と .NET の概要」に関するページを参照してください。

パッケージをインストールする

プロジェクト ディレクトリから、dotnet add package コマンドを使用して、Azure Blob Storage と Azure ID のクライアント ライブラリのパッケージをインストールします。 Azure サービスへのパスワードレス接続には、Azure.Identity パッケージが必要です。

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 Storage に接続するには、 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 の削除、または論理的に削除された BLOB の復元のために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールのストレージ BLOB データ共同作成者以上が必要です。 詳しくは、「Delete Blob (REST API)」と「Undelete Blob (REST API)」の認可のガイダンスを参照してください。

BLOB を削除する

Note

ストレージ アカウントで BLOB の論理的な削除が有効になっている場合、クライアント ライブラリのメソッドを使用して完全削除を実行することはできません。 この記事の方法では、論理的に削除された BLOB、BLOB のバージョン、またはスナップショットは、保持期間が切れるまで使用でき、その時点になると完全に削除されます。 基になる REST API 操作の詳細については、Delete BLOB (REST API) を参照してください。

BLOB を削除するには、次のいずれかのメソッドを呼び出します。

次の例では、BLOB を削除します。

public static async Task DeleteBlobAsync(BlobClient blob)
{
    await blob.DeleteAsync();
}

BLOB にスナップショットが関連付けられている場合は、そのスナップショットをすべて削除してから BLOB を削除する必要があります。 次の例では、BLOB とそのスナップショットを削除します。

public static async Task DeleteBlobSnapshotsAsync(BlobClient blob)
{
    // Delete a blob and all of its snapshots
    await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.IncludeSnapshots);

    // Delete only the blob's snapshots
    //await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.OnlySnapshots);
}

BLOB 自体ではなくスナップショットのみを削除する場合は、パラメーター DeleteSnapshotsOption.OnlySnapshots を渡します。

削除された BLOB を復元する

BLOB の論理的な削除を使用すると、削除されたデータがシステムに一定の期間保有されることにより、個々の BLOB とその複数バージョン、スナップショット、およびメタデータが誤った削除や上書きから保護されます。 保持期間中は、BLOB を削除時の状態に復元できます。 保持期間が過ぎると、BLOB オブジェクトは完全に削除されます。 BLOB の論理的な削除の詳細については、「BLOB の論理的な削除」を参照してください。

Azure Storage クライアント ライブラリを使用して、論理的に削除された BLOB またはスナップショットを復元できます。

論理的に削除された BLOB を復元する方法は、ストレージ アカウントで BLOB のバージョン管理が有効になっているかどうかに応じて異なります。 BLOB のバージョン管理の詳細については、「BLOB のバージョン管理」を参照してください。 実際のシナリオに応じて、次のいずれかのセクションを参照してください。

バージョン管理が無効になっている場合に論理的に削除されたオブジェクトを復元する

バージョン管理が有効になっていないときに削除された BLOB を復元するには、次のいずれかのメソッドを呼び出します。

これらのメソッドでは、削除された BLOB と、それらに関連付けられている削除済みスナップショットが復元されます。 削除されていない BLOB に対してこれらのいずれかのメソッドを呼び出した場合、何も影響はありません。 次の例では、コンテナー内の論理的に削除されたすべての BLOB とそのスナップショットを復元します。

public static async Task RestoreBlobsAsync(BlobContainerClient container)
{
    foreach (BlobItem blob in container.GetBlobs(BlobTraits.None, BlobStates.Deleted))
    {
        await container.GetBlockBlobClient(blob.Name).UndeleteAsync();
    }
}

論理的に削除された特定のスナップショットを復元するには、最初にベース BLOB に対して Undelete または UndeleteAsync を呼び出し、次に目的のスナップショットをベース BLOB にコピーします。 次の例では、ブロック BLOB を、最後に生成されたスナップショットに復元します。

public static async Task RestoreSnapshotsAsync(
    BlobContainerClient container,
    BlobClient blob)
{
    // Restore the deleted blob
    await blob.UndeleteAsync();

    // List blobs in this container that match prefix
    // Include snapshots in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Snapshots,
        prefix: blob.Name);

    // Get the URI for the most recent snapshot
    BlobUriBuilder blobSnapshotUri = new BlobUriBuilder(blob.Uri)
    {
        Snapshot = blobItems
            .OrderByDescending(snapshot => snapshot.Snapshot)
            .ElementAtOrDefault(0)?.Snapshot
    };

    // Restore the most recent snapshot by copying it to the blob
    await blob.StartCopyFromUriAsync(blobSnapshotUri.ToUri());
}

バージョン管理が有効になっている場合に論理的に削除された BLOB を復元する

ストレージ アカウントが BLOB のバージョン管理を有効にするように構成されている場合、BLOB を削除すると、BLOB の現在のバージョンが以前のバージョンになります。 バージョン管理が有効になっている場合に論理的に削除された BLOB を復元するには、ベース BLOB に以前のバージョンをコピーします。 次のいずれかの方法を使用できます。

次のコード例では、削除された BLOB の最新バージョンを取得し、それをベース BLOB にコピーして最新バージョンを復元する方法を示しています。

public static void RestoreBlobWithVersioning(
    BlobContainerClient container,
    BlobClient blob)
{
    // List blobs in this container that match prefix
    // Include versions in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Version,
        prefix: blob.Name);

    // Get the URI for the most recent version
    BlobUriBuilder blobVersionUri = new BlobUriBuilder(blob.Uri)
    {
        VersionId = blobItems.
            OrderByDescending(version => version.VersionId).
            ElementAtOrDefault(0)?.VersionId
    };

    // Restore the most recently generated version by copying it to the base blob
    blob.StartCopyFromUri(blobVersionUri.ToUri());
}

リソース

.NET 用 Azure Blob Storage クライアント ライブラリを使用して、BLOB を削除したり、削除済みの BLOB を復元したりする方法の詳細については、次のリソースを参照してください。

コード サンプル

REST API の操作

Azure SDK for .NET には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた .NET パラダイムを通じて REST API 操作を利用できます。 BLOB の削除および削除した BLOB の復元のためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。

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

こちらもご覧ください

  • この記事は、.NET の Blob Storage 開発者ガイドの一部です。 詳細については、「.NET アプリのビルド」にある開発者ガイドの記事の完全な一覧を参照してください。