Java を使用してブロック BLOB のアクセス層を設定または変更する

この記事では、Java 用の Azure Storage クライアント ライブラリを使用して、ブロック BLOB のアクセス層を設定または変更する方法について説明します。

必須コンポーネント

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

ブロック BLOB アクセス層について

ストレージ ニーズのコストを管理するには、アクセス頻度と必要な保持期間に基づいてデータを整理するのが有効です。 Azure ストレージには、使用方法に応じて最もコスト効率の高い方法で BLOB データを保存できるように複数のアクセス層が用意されています。

BLOB データのアクセス層

Azure Storage アクセス層には次のものがあります。

  • ホット アクセス層 - 頻繁にアクセスまたは変更するデータの保存に最適なオンライン層。 ホット アクセス層はストレージ コストが最も高く、アクセス コストは最も安いです。
  • クール アクセス層 - アクセスおよび変更の頻度が低いデータの保存に最適なオンライン層。 クール アクセス層のデータは、最低 30 日間は保存する必要があります。 クール アクセス層は、ホット アクセス層と比べてストレージ コストが安く、アクセス コストが高いです。
  • コールド アクセス層 - アクセスおよび変更の頻度が低いデータの保存に最適なオンライン層。 コールド アクセス層のデータは、最低 90 日間は保存する必要があります。 コールド アクセス層は、クール アクセス層と比べてストレージ コストが安く、アクセス コストが高くなります。
  • アーカイブ アクセス層 - めったにアクセスせず、数時間規模の待機時間の変動を許容できるデータ保存に最適なオフライン層。 アーカイブ アクセス層のデータは、最低 180 日間は保存する必要があります。

アクセス層の詳細については、「BLOB データのアクセス層」を参照してください。

BLOB はアーカイブ アクセス層に含まれていますが、オフラインと見なされ、読み取りや変更はできません。 アーカイブされた BLOB 内のデータを読み取りまたは変更するには、まず、オンライン層に BLOB をリハイドレートする必要があります。 アーカイブ層からオンライン層への BLOB のリハイドレートの詳細については、「アーカイブ層からの BLOB のリハイドレート」を参照してください。

制限

アクセス層の設定はブロック BLOB でのみ許可されています。 ブロック BLOB のアクセス層の設定に関する制限の詳細については、BLOB 層の設定 (REST API)に関する記事を参照してください。

注意

Java を使用してアクセス層を Cold に設定するには、最小クライアント ライブラリ バージョン 12.21.0 を使用する必要があります。

アップロード中に BLOB のアクセス層を設定する

BlobUploadFromFileOptions クラスを使用して、アップロード時に BLOB のアクセス層を設定できます。 次のコード例は、BLOB をアップロードするときにアクセス層を設定する方法を示しています。

public void uploadBlobWithAccessTier(BlobContainerClient blobContainerClient, Path filePath) {
    String fileName = filePath.getFileName().toString();
    BlobClient blobClient = blobContainerClient.getBlobClient(fileName);

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString())
            .setTier(AccessTier.COOL);

    try {
        Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

Java を使用した BLOB のアップロードの詳細については、「Java を使用して BLOB をアップロードする」を参照してください。

既存のブロック BLOB のアクセス層を変更する

次のいずれかのメソッドを使用して、既存のブロック BLOB のアクセス層を変更できます。

次のコード例は、既存の BLOB のアクセス層をクールに変更する方法を示しています。

public void changeBlobAccessTier(BlobClient blobClient) {
    // Change the blob's access tier to cool
    blobClient.setAccessTier(AccessTier.COOL);
}

アーカイブされた BLOB をリハイドレートする場合は、setAccessTierWithResponse メソッドを使用します。 tier パラメータを有効な AccessTier 値 (HOTCOOLCOLD、または ARCHIVE) に設定します。 必要に応じて、priority パラメータを有効な RehydratePriority 値 (HIGH または STANDARD) に設定できます。

次のコード例は、アクセス層をホットに変更してアーカイ済み BLOB をリハイドレートする方法を示しています。

public void rehydrateBlobSetAccessTier(BlobClient blobClient) {
    // Rehydrate the blob to hot tier using a standard rehydrate priority
    blobClient.setAccessTierWithResponse(
        AccessTier.HOT,
        RehydratePriority.STANDARD,
        null, 
        null, 
        null);
}

setAccessTierWithResponse メソッドは、BlobSetAccessTierOptions パラメータを受け取って構成オプションを指定することもできます。

BLOB を別のアクセス層にコピーする

コピー操作の一部としてアクセス層を指定することで、既存のブロック BLOB のアクセス層を変更できます。 コピー操作中にアクセス層を変更するには、BlobBeginCopyOptions クラスを使用します。

setTier メソッドを使用して、AccessTier 値を HOTCOOLCOLD、または ARCHIVE として指定できます。 コピー操作を使用してアーカイブ層から BLOB をリハイドレートする場合は、setRehydratePriority メソッドを使用してRehydratePriority 値を HIGH または STANDARD として指定します。

次のコード例は、コピー操作を使用してアーカイブされた BLOB をホット層にリハイドレートする方法を示しています。

public void rehydrateBlobUsingCopy(
    BlobClient sourceArchiveBlob,
    BlobClient destinationRehydratedBlob) {
    // Note: the destination blob must have a different name than the archived source blob

    // Start the copy operation and wait for it to complete
    final SyncPoller<BlobCopyInfo, Void> poller = destinationRehydratedBlob.beginCopy(
            new BlobBeginCopyOptions(sourceArchiveBlob.getBlobUrl())
                    .setTier(AccessTier.HOT)
                    .setRehydratePriority(RehydratePriority.STANDARD));
                    
    PollResponse<BlobCopyInfo> response = poller
            .waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED);
}

Java を使用した BLOB のコピーの詳細については、「Java を使用して BLOB をコピーする」を参照してください。

リソース

Java 用 Azure Blob Storage クライアント ライブラリを使用したアクセス層の設定の詳細については、次のリソースをご覧ください。

REST API の操作

Azure SDK for Java には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Java パラダイムを通じて REST API 操作を実施できます。 アクセス層を設定するためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。

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

コード サンプル

こちらもご覧ください