Бөлісу құралы:


Установка или изменение уровня доступа блочного BLOB-объекта с помощью JavaScript

В этой статье показано, как задать или изменить уровень доступа большого двоичного объекта для блочных BLOB-объектов с помощью клиентской библиотеки служба хранилища Azure для JavaScript.

Необходимые компоненты

  • В примерах этой статьи предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для JavaScript. Сведения о настройке проекта, включая установку пакетов, импорт модулей и создание авторизованного клиентского объекта для работы с ресурсами данных, см. в статье "Начало работы с Хранилище BLOB-объектов Azure и JavaScript".
  • Механизм авторизации должен иметь разрешения на настройку уровня доступа большого двоичного объекта. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:

Сведения о уровнях доступа к блочных BLOB-объектов

Чтобы управлять затратами на хранение, можно упорядочить данные на основе частоты доступа к ней и длительности хранения. Хранилище Azure предоставляет различные уровни доступа, что позволяет наиболее эффективно хранить данные BLOB-объектов в зависимости от того, как они используются.

Уровни доступа к данным BLOB-объектов

Уровни доступа службы хранилища Azure:

  • Горячий уровень — сетевой уровень, оптимизированный для хранения часто используемых или изменяемых данных. Горячий уровень имеет самые высокие затраты на хранение, но самые низкие затраты на доступ.
  • Холодный уровень — сетевой уровень, оптимизированный для хранения редко используемых или изменяемых данных. Данные на холодном уровне должны храниться не менее 30 дней. Уровень "холодный" имеет более низкие затраты на хранение и более высокие затраты на доступ по сравнению с горячим уровнем.
  • Холодный уровень — сетевой уровень, оптимизированный для хранения данных, которые редко обращаются или изменяются. Данные на холодном уровне должны храниться не менее 90 дней. На холодном уровне хранилища данные хранить дешевле, зато доступ к ним стоит дороже по сравнению с горячим уровнем.
  • Архивный уровень — автономный уровень, оптимизированный для хранения данных, которые используются редко и имеют нестрогие требования к задержке (порядка нескольких часов). Данные на уровне архива должны храниться не менее 180 дней.

Дополнительные сведения о уровнях доступа см. в разделе "Уровни доступа" для данных BLOB-объектов.

Хотя BLOB-объект находится на архивном уровне хранилища, он считается автономным элементом и не может быть считан или изменен. Чтобы считывать или изменять данные в архивном BLOB-объекте, необходимо сначала восстановить большой двоичный объект на онлайн-уровне. Дополнительные сведения о повторном создании большого двоичного объекта с уровня "Архив" на онлайн-уровне см. в статье о повторном извлечении BLOB-объектов из архивного уровня.

Ограничения

Установка уровня доступа разрешена только для блочных BLOB-объектов. Дополнительные сведения об ограничениях на настройку уровня доступа блочного BLOB-объекта см. в разделе Set Blob Tier (REST API).

Примечание.

Чтобы задать уровень Cold доступа с помощью JavaScript, необходимо использовать минимальную клиентскую библиотеку версии 12.13.0.

Установка уровня доступа большого двоичного объекта во время отправки

Чтобы передать большой двоичный объект в определенный уровень доступа, используйте BlockBlobUploadOptions. Варианты tier свойств: Hot, , CoolColdили Archive.

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;
}

Изменение уровня доступа большого двоичного объекта после отправки

Чтобы изменить уровень доступа большого двоичного объекта после его отправки в хранилище, используйте setAccessTier. Наряду с уровнем можно задать приоритет восстановления свойства BlobSetTierOptions, чтобы привести блочный большой двоичный объект из архивированного состояния. Возможные значения: 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);
  }
}

Копирование большого двоичного объекта в другой уровень доступа

Используйте BLOBClient.Метод beginCopyFromURL для копирования большого двоичного объекта. Чтобы изменить уровень доступа во время операции копирования, используйте свойство BlobBeginCopyFromURLOptions tier и укажите другой уровень доступа, отличный от исходного 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')
}

Использование пакета для изменения уровня доступа для многих больших двоичных объектов

Пакет представляет агрегированный набор операций в больших двоичных объектах, таких как удаление или установка уровня доступа. Для успешного выполнения каждой операции необходимо передать правильные учетные данные. В этом примере для набора больших двоичных объектов в одном контейнере используются те же учетные данные.

Создайте BLOBBatchClient. Используйте клиент для создания пакета с помощью метода createBatch( ). Когда пакет будет готов, отправьте пакет для обработки. Используйте возвращаемую структуру для проверки успешной операции каждого большого двоичного объекта.

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}`)
  }
}

Примеры кода

Следующие шаги