JavaScript または TypeScript を使ってブロック BLOB のアクセス層を設定または変更する
この記事では、JavaScript 用の Azure Storage クライアント ライブラリを使用してブロック BLOB について、BLOB のアクセス層を設定または変更する方法について説明します。
前提条件
- この記事の例では、JavaScript 用の Azure Blob Storage クライアント ライブラリを操作するように設定されたプロジェクトが、既にあることを前提としています。 パッケージのインストール、モジュールのインポート、データ ソースの操作が認可されたクライアント オブジェクトの作成を含むプロジェクトの設定については、「Azure Blob Storage と JavaScript の使用開始」を参照してください。
- 認可メカニズム には、BLOB のアクセス層を設定するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。
ブロック BLOB アクセス層について
ストレージ ニーズのコストを管理するには、アクセス頻度と必要な保持期間に基づいてデータを整理するのが有効です。 Azure ストレージには、使用方法に応じて最もコスト効率の高い方法で BLOB データを保存できるように複数のアクセス層が用意されています。
BLOB データのアクセス層
Azure Storage アクセス層には次のものがあります。
- ホット アクセス層 - 頻繁にアクセスまたは変更するデータの保存に最適なオンライン層。 ホット アクセス層はストレージ コストが最も高く、アクセス コストは最も安いです。
- クール アクセス層 - アクセスおよび変更の頻度が低いデータの保存に最適なオンライン層。 クール アクセス層のデータは、最低 30 日間は保存する必要があります。 クール アクセス層は、ホット アクセス層と比べてストレージ コストが安く、アクセス コストが高いです。
- コールド アクセス層 - アクセスおよび変更の頻度が低いデータの保存に最適なオンライン層。 コールド アクセス層のデータは、最低 90 日間は保存する必要があります。 コールド アクセス層は、クール アクセス層と比べてストレージ コストが安く、アクセス コストが高くなります。
- アーカイブ アクセス層 - めったにアクセスせず、数時間規模の待機時間の変動を許容できるデータ保存に最適なオフライン層。 アーカイブ アクセス層のデータは、最低 180 日間は保存する必要があります。
アクセス層の詳細については、「BLOB データのアクセス層」を参照してください。
BLOB はアーカイブ アクセス層に含まれていますが、オフラインと見なされ、読み取りや変更はできません。 アーカイブされた BLOB 内のデータを読み取りまたは変更するには、まず、オンライン層に BLOB をリハイドレートする必要があります。 アーカイブ層からオンライン層への BLOB のリハイドレートの詳細については、「アーカイブ層からの BLOB のリハイドレート」を参照してください。
制限
アクセス層の設定はブロック BLOB でのみ許可されています。 ブロック BLOB のアクセス層の設定に関する制限の詳細については、BLOB 層の設定 (REST API)に関する記事を参照してください。
注意
JavaScript を使用してアクセス層を Cold
に設定するには、最小クライアント ライブラリ バージョン 12.13.0 を使用する必要があります。
アップロード中に BLOB のアクセス層を設定する
特定のアクセス層に BLOB をアップロードするには、BlockBlobUploadOptions を使用します。 tier
プロパティの選択肢は Hot
、Cool
、Cold
、または Archive
です。
async function uploadWithAccessTier(containerClient, blobName) {
const fileContentsAsString = `Hello from a string`
// upload blob to `Cool` access tier
const uploadOptions = {
// 'Hot', 'Cool', 'Cold', or 'Archive'
tier: 'Cool',
}
// Create blob client from container client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
// Upload string
await blockBlobClient.upload(fileContentsAsString, fileContentsAsString.length, uploadOptions);
// Return client to continue with other operations
return blockBlobClient;
}
アップロード後に BLOB のアクセス層を変更する
ストレージへのアップロード後に BLOB のアクセス層を変更するには、setAccessTier を使用します。 層と共に、BlobSetTierOptions プロパティのリハイドレートの優先度を設定して、ブロック BLOB をアーカイブ済み状態から取り出すことができます。 指定できる値は High
または Standard
です。
async function main(blockBlobClient) {
// Get current access tier
const { accessTier } = await blockBlobClient.getProperties();
console.log(`Current access tier: ${accessTier}`);
// 'Hot', 'Cool', or 'Archive'
const newAccessTier = 'Cool';
// Rehydrate priority: 'High' or 'Standard'
const rehydratePriority = 'High';
const result = await blockBlobClient.setAccessTier(
newAccessTier,
{ rehydratePriority }
);
if (result?.errorCode == undefined) {
console.log(`Change to access was successful`);
} else {
console.log(result);
}
}
BLOB を別のアクセス層にコピーする
BLOB をコピーするには、BlobClient.beginCopyFromURL メソッドを使用します。 コピー操作中にアクセス層を変更するには、BlobBeginCopyFromURLOptions tier
プロパティを使用し、ソース BLOB とは異なるアクセス層を指定します。
async function copyBlobWithDifferentAccessTier(containerClient) {
// create blob clients
const sourceBlobClient = containerClient.getBlobClient(originalBlob);
const destinationBlobClient = containerClient.getBlobClient(copyBlob);
// start copy, access tiers include `Hot`, `Cool`, `Cold`, `Archive`
const copyPoller = await destinationBlobClient.beginCopyFromURL(sourceBlobClient.url, { tier: 'Hot' });
console.log('start copy from original to copy');
// wait until done
await copyPoller.pollUntilDone();
console.log('copy finished')
}
バッチを使用して多数の BLOB のアクセス層を変更する
バッチは、削除やアクセス層の設定など、BLOB に対する操作の集合を表します。 各操作を正常に実行するには、正しい資格情報を渡す必要があります。 この例では、同じコンテナー内の一連の BLOB に対して同じ資格情報が使用されます。
BlobBatchClient を作成します。 クライアントを使用して、createBatch() メソッドでバッチを作成します。 バッチの準備ができたら、処理するバッチを送信します。 返された構造体を使用して、各 BLOB の操作が成功したことを検証します。
async function main(containerClient) {
// Prep array
const blockBlobCount = 3;
const blockBlobClients = new Array(blockBlobCount);
// Create container and blobs in `Hot` tier
await prepContainer(containerClient, blockBlobCount, blockBlobClients);
// Blob batch client and batch
const containerScopedBatchClient = containerClient.getBlobBatchClient();
const blobBatch = containerScopedBatchClient.createBatch();
// Assemble batch to set tier to `Cool` tier
for (let i = 0; i < blockBlobCount; i++) {
await blobBatch.setBlobAccessTier(blockBlobClients[i].url, sharedKeyCredential, "Cool", {});
}
// Submit batch request and verify response
const resp = await containerScopedBatchClient.submitBatch(blobBatch, {});
console.log(`Requested ${blockBlobCount}, batched ${resp.subResponses.length}, success ${resp.subResponsesSucceededCount}, failure ${resp.subResponsesFailedCount}`);
// Examine each batch item
for (let i = 0; i < blockBlobCount; i++) {
// Check blob tier set properly
const resp2 = await blockBlobClients[i].getProperties();
console.log(`[${i}] access tier ${resp2.accessTier}, status ${resp.subResponses[i].status}, message ${resp.subResponses[i].statusMessage}`)
}
}
コード サンプル
- JavaScript または TypeScript でアップロード中に BLOB のアクセス層を設定する
- JavaScript または TypeScript でアップロード後に BLOB のアクセス層を変更する
- JavaScript または TypeScript で BLOB を別のアクセス層にコピーする
- JavaScript または TypeScript でバッチを使って多数の BLOB のアクセス層を変更する