次の方法で共有


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

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

前提条件

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

BLOB を削除する

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

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

public void deleteBlob(BlobClient blobClient) {
    blobClient.delete();
}

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

public void deleteBlobWithSnapshots(BlobClient blobClient) {
    Response<Boolean> response = blobClient.deleteIfExistsWithResponse(DeleteSnapshotsOptionType.INCLUDE, null,
            null,
            new Context("key", "value"));
    if (response.getStatusCode() == 404) {
        System.out.println("Blob does not exist");
    } else {
        System.out.printf("Delete blob completed with status %d%n", response.getStatusCode());
    }
}

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

削除された BLOB を復元する

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

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

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

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

削除した BLOB を復元するには、次のメソッドを呼び出します。

このメソッドは、論理的に削除された BLOB と、関連付けられている論理的に削除されたスナップショットのコンテンツとメタデータを復元します。 削除されていない BLOB に対してこのメソッドを呼び出しても効果はありません。

public void restoreBlob(BlobClient blobClient) {
    blobClient.undelete();
}

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

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

このメソッドは、論理的に削除された BLOB と、関連付けられている論理的に削除されたスナップショットのコンテンツとメタデータを復元します。 削除されていない BLOB に対してこのメソッドを呼び出しても効果はありません。

public void restoreBlobVersion(BlobContainerClient containerClient, BlobClient blobClient){
    // List blobs in this container that match the prefix
    // Include versions in the listing
    ListBlobsOptions options = new ListBlobsOptions()
            .setPrefix(blobClient.getBlobName())
            .setDetails(new BlobListDetails()
                    .setRetrieveVersions(true));
    Iterator<BlobItem> blobItem = containerClient.listBlobs(options, null).iterator();
    List<String> blobVersions = new ArrayList<>();
    while (blobItem.hasNext()) {
        blobVersions.add(blobItem.next().getVersionId());
    }

    // Sort the list of blob versions and get the most recent version ID
    Collections.sort(blobVersions, Collections.reverseOrder());
    String latestVersion = blobVersions.get(0);

    // Get a client object with the name of the deleted blob and the specified version
    BlobClient blob = containerClient.getBlobVersionClient("sampleBlob.txt", latestVersion);

    // Restore the most recent version by copying it to the base blob
    blobClient.copyFromUrl(blob.getBlobUrl());
}

論理的に削除された BLOB とディレクトリを復元する (階層型名前空間)

重要

このセクションは、階層型名前空間があるアカウントにのみ適用されます。

  1. 開始するには、テキスト エディターで pom.xml ファイルを開きます。 依存関係のグループに、次の dependency 要素を追加します。

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. 次に、これらの import ステートメントをコード ファイルに追加します。

    Put imports here
    
  3. 次のスニペットは、my-file という名前の論理的に削除されたファイルを復元します。

    この方法では、DataLakeServiceClient インスタンスが作成されていることを前提としています。 DataLakeServiceClient インスタンスを作成する方法については、「アカウントに接続する」を参照してください。

    
    public void RestoreFile(DataLakeServiceClient serviceClient){
    
        DataLakeFileSystemClient fileSystemClient =
            serviceClient.getFileSystemClient("my-container");
    
        DataLakeFileClient fileClient =
            fileSystemClient.getFileClient("my-file");
    
        String deletionId = null;
    
        for (PathDeletedItem item : fileSystemClient.listDeletedPaths()) {
    
            if (item.getName().equals(fileClient.getFilePath())) {
               deletionId = item.getDeletionId();
            }
        }
    
        fileSystemClient.restorePath(fileClient.getFilePath(), deletionId);
     }
    
    

    論理的に削除された項目が含まれているディレクトリの名前を変更すると、それらの項目はディレクトリから切断されます。 それらの項目を復元するには、ディレクトリの名前を元の名前に戻すか、元のディレクトリ名を使用する別のディレクトリを作成する必要があります。 そうしないと、これらの論理的に削除された項目を復元しようとしたときにエラーが発生します。

リソース

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

REST API の操作

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

コード サンプル

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

こちらもご覧ください