Установка или изменение уровня доступа блочного BLOB-объекта с помощью JavaScript или TypeScript
В этой статье показано, как задать или изменить уровень доступа большого двоичного объекта для блочных 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
, , 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;
}
Изменение уровня доступа большого двоичного объекта после отправки
Чтобы изменить уровень доступа большого двоичного объекта после его отправки в хранилище, используйте 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 = 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')
}
Использование пакета для изменения уровня доступа для многих больших двоичных объектов
Пакет представляет агрегированный набор операций в больших двоичных объектах, таких как удаление или установка уровня доступа. Для успешного выполнения каждой операции необходимо передать правильные учетные данные. В этом примере для набора больших двоичных объектов в одном контейнере используются те же учетные данные.
Создайте 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}`)
}
}
Примеры кода
- Установка уровня доступа к BLOB-объектам во время отправки для JavaScript или TypeScript
- Изменение уровня доступа к BLOB-объектам после отправки для JavaScript или TypeScript
- Копирование большого двоичного объекта в другой уровень доступа для JavaScript или TypeScript
- Использование пакета для изменения уровня доступа для многих больших двоичных объектов для JavaScript или TypeScript