共用方式為


使用 JavaScript 設定或變更區塊 Blob 的存取層

本文說明如何使用適用於 JavaScript 的 Azure 儲存體用戶端程式庫來設定或變更 Blob 的存取層

必要條件

  • 本文中的範例假設您已設定專案,以搭配使用適用於 JavaScript 的 Azure Blob 儲存體用戶端程式庫。 若要了解如何設定專案,包括套件安裝、匯入模組,以及建立授權的用戶端物件來處理資料資源,請參閱開始使用 Azure Blob 儲存體和 JavaScript
  • 授權機制必須具有設定 Blob 存取層的權限。 若要深入了解,請參閱下列 REST API 作業的授權指導:

關於區塊 Blob 存取層

為了管理儲存體需求的成本,根據資料的存取頻率和需要保留的時間長度來組織資料,會很有幫助。 Azure 儲存體提供不同的存取層,讓您可以根據 Blob 資料的使用方式,以最符合成本效益的方式來儲存 Blob 資料。

blob 資料的存取層

Azure 儲存體存取層包括:

  • 經常性存取層:已針對儲存經常存取或修改的資料最佳化的線上層。 經常性存取層的儲存體成本最高,但存取成本最低。
  • 非經常性儲存層:已針對儲存不常存取或修改的資料最佳化的線上層。 非經常性存取層中的資料至少應儲存 30 天。 相較於經常性存取層,非經常性存取層的儲存體成本較低且存取成本較高。
  • 非經常性存取層:已針對儲存不常存取或修改的資料最佳化的線上層。 極非經常性存取層中的資料至少應儲存 90 天。 相較於非經常性存取層,極非經常性存取層的儲存體成本較低但存取成本較高。
  • 封存層:已針對儲存極少存取且具有彈性延遲需求的資料最佳化 (以小時為單位) 的離線層。 封存層中的資料至少應儲存 180 天。

若要深入了解存取層,請參閱 Blob 資料的存取層(部分機器翻譯)。

位於封存存取層的 Blob 會被視為離線,而且無法讀取或修改。 若要讀取或修改封存 Blob 中的資料,您必須先將 Blob 解除凍結至線上層。 若要深入了解如何將 Blob 從封存層解除凍結至線上層,請參閱從封存層將 Blob 解除凍結

限制

只有區塊 Blob 才能設定存取層。 若要深入了解設定區塊 Blob 存取層的限制,請參閱設定 Blob 層 (REST API) (部分機器翻譯)。

注意

若要使用 JavaScript 將存取層設定為 Cold,您必須至少使用用戶端程式庫版本 12.13.0。

在 Blob 上傳期間設定存取層

若要將 Blob 上傳至特定存取層,請使用 BlockBlobUploadOptionstier 屬性選項包括:HotCoolColdArchive

async function uploadWithAccessTier(containerClient) {

  // Create blob
  const timestamp = Date.now();
  const blobName = `myblob-${timestamp}`;
  console.log(`creating blob ${blobName}`);

  const fileContentsAsString = `Hello from a string`

  // upload blob to `Cool` access tier
  const uploadOptions = {

    // access tier setting
    // 'Hot', 'Cool', or 'Archive'
    tier: 'Cool',

    // other properties
    metadata: undefined,
    tags: undefined,
  }

  // Create blob client from container client
  const blockBlobClient = await 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 脫離封存狀態。 可能的值為 HighStandard

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 方法。 若要在複製作業期間變更存取層,請使用 BlobBeginCopyFromURLOptionstier 屬性,並指定與來源 Blob 不同的存取

async function copyBlobWithDifferentAccessTier(containerClient) {

  // create blob clients
  const sourceBlobClient = await containerClient.getBlobClient(originalBlob);
  const destinationBlobClient = await containerClient.getBlobClient(copyBlob);

  // start copy, access tiers include `Hot`, `Cool`, `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}`)
  }
}

程式碼範例

下一步