Установка или изменение уровня доступа блочного BLOB-объекта с помощью TypeScript
В этой статье показано, как задать или изменить уровень доступа большого двоичного объекта с помощью клиентской библиотеки служба хранилища Azure для JavaScript.
Необходимые компоненты
- В примерах этой статьи предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для JavaScript. Сведения о настройке проекта, включая установку пакетов, импорт модулей и создание авторизованного клиентского объекта для работы с ресурсами данных, см. в статье "Начало работы с Хранилище BLOB-объектов Azure и TypeScript".
- Механизм авторизации должен иметь разрешения на настройку уровня доступа большого двоичного объекта. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:
Сведения о уровнях доступа к блочных BLOB-объектов
Чтобы управлять затратами на хранение, можно упорядочить данные на основе частоты доступа к ней и длительности хранения. Хранилище Azure предоставляет различные уровни доступа, что позволяет наиболее эффективно хранить данные BLOB-объектов в зависимости от того, как они используются.
Уровни доступа к данным BLOB-объектов
Уровни доступа службы хранилища Azure:
- Горячий уровень — сетевой уровень, оптимизированный для хранения часто используемых или изменяемых данных. Горячий уровень имеет самые высокие затраты на хранение, но самые низкие затраты на доступ.
- Холодный уровень — сетевой уровень, оптимизированный для хранения редко используемых или изменяемых данных. Данные на холодном уровне должны храниться не менее 30 дней. Уровень "холодный" имеет более низкие затраты на хранение и более высокие затраты на доступ по сравнению с горячим уровнем.
- Холодный уровень — сетевой уровень, оптимизированный для хранения данных, которые редко обращаются или изменяются. Данные на холодном уровне должны храниться не менее 90 дней. На холодном уровне хранилища данные хранить дешевле, зато доступ к ним стоит дороже по сравнению с горячим уровнем.
- Архивный уровень — автономный уровень, оптимизированный для хранения данных, которые используются редко и имеют нестрогие требования к задержке (порядка нескольких часов). Данные на уровне архива должны храниться не менее 180 дней.
Дополнительные сведения о уровнях доступа см. в разделе "Уровни доступа" для данных BLOB-объектов.
Хотя BLOB-объект находится на архивном уровне хранилища, он считается автономным элементом и не может быть считан или изменен. Чтобы считывать или изменять данные в архивном BLOB-объекте, необходимо сначала восстановить большой двоичный объект на онлайн-уровне. Дополнительные сведения о повторном создании большого двоичного объекта с уровня "Архив" на онлайн-уровне см. в статье о повторном извлечении BLOB-объектов из архивного уровня.
Ограничения
Установка уровня доступа разрешена только для блочных BLOB-объектов. Дополнительные сведения об ограничениях на настройку уровня доступа блочного BLOB-объекта см. в разделе Set Blob Tier (REST API).
Примечание.
Чтобы задать уровень Cold
доступа с помощью TypeScript, необходимо использовать минимальную версию клиентской библиотеки 12.13.0.
Установка уровня доступа большого двоичного объекта во время отправки
Чтобы передать большой двоичный объект в определенный уровень доступа, используйте BlockBlobUploadOptions. Варианты tier
свойств: Hot
, , Cool
Cold
или Archive
.
async function uploadWithAccessTier(
containerClient: ContainerClient
): Promise<BlockBlobClient> {
// Create blob
const timestamp = Date.now();
const blobName = `myblob-${timestamp}`;
console.log(`creating blob ${blobName}`);
const fileContentsAsString = `Hello from a string`;
const tags: Tags = {};
// Upload blob to cool tier
const uploadOptions: BlockBlobUploadOptions = {
// access tier setting
// 'Hot', 'Cool', or 'Archive'
tier: 'Cool',
// other properties
metadata: undefined,
tags
};
// Create blob client from container client
const blockBlobClient: BlockBlobClient =
await containerClient.getBlockBlobClient(blobName);
// Upload string
const uploadResult = await blockBlobClient.upload(
fileContentsAsString,
fileContentsAsString.length,
uploadOptions
);
if (uploadResult.errorCode) throw Error(uploadResult.errorCode);
// Return client to continue with other operations
return blockBlobClient;
}
Изменение уровня доступа большого двоичного объекта после отправки
Чтобы изменить уровень доступа большого двоичного объекта после его отправки в хранилище, используйте setAccessTier. Наряду с уровнем можно задать приоритет восстановления свойства BlobSetTierOptions, чтобы привести блочный большой двоичный объект из архивированного состояния. Возможные значения: High
или Standard
.
async function main(blockBlobClient: BlockBlobClient): Promise<void> {
const options: BlobGetPropertiesOptions = {};
// Get current access tier
const { errorCode, accessTier } = await blockBlobClient.getProperties(
options
);
if (!errorCode) {
console.log(`Current access tier: ${accessTier}`);
}
// 'Hot', 'Cool', or 'Archive'
const newAccessTier = 'Cool';
// Rehydrate priority: 'High' or 'Standard'
const tierOptions: BlobSetTierOptions = {
rehydratePriority: 'High'
};
const result: BlobSetTierResponse = await blockBlobClient.setAccessTier(
newAccessTier,
tierOptions
);
if (!result?.errorCode) {
console.log(`Change to access was successful`);
} else {
console.log(result);
}
}
Копирование большого двоичного объекта в другой уровень доступа
Используйте BLOBClient.Метод beginCopyFromURL для копирования большого двоичного объекта. Чтобы изменить уровень доступа во время операции копирования, используйте свойство BlobBeginCopyFromURLOptionstier
и укажите другой уровень доступа, отличный от исходного BLOB-объекта.
async function copyBlobWithDifferentAccessTier(
containerClient: ContainerClient
): Promise<void> {
// create blob clients
const sourceBlobClient: BlobClient = await containerClient.getBlobClient(
originalBlob
);
const destinationBlobClient: BlobClient = await containerClient.getBlobClient(
copyBlob
);
const copyOptions: BlobBeginCopyFromURLOptions = { tier: 'Hot' };
// start copy, access tiers include `Hot`, `Cool`, `Archive`
const copyPoller = await destinationBlobClient.beginCopyFromURL(
sourceBlobClient.url,
copyOptions
);
console.log('start copy from original to copy');
// wait until done
await copyPoller.pollUntilDone();
console.log('copy finished');
}
Использование пакета для изменения уровня доступа для многих больших двоичных объектов
Пакет представляет агрегированный набор операций в больших двоичных объектах, таких как удаление или установка уровня доступа. Для успешного выполнения каждой операции необходимо передать правильные учетные данные. В этом примере для набора больших двоичных объектов в одном контейнере используются те же учетные данные.
Создайте BLOBBatchClient. Используйте клиент для создания пакета с помощью метода createBatch( ). Когда пакет будет готов, отправьте пакет для обработки. Используйте возвращаемую структуру для проверки успешной операции каждого большого двоичного объекта.
async function batchChangeAccessTier(
containerClient: ContainerClient
): Promise<void> {
// Prep array
const blockBlobCount = 3;
const blockBlobClients: BlockBlobClient[] = new Array(blockBlobCount);
// Create container and blobs in `Hot` tier
await prepContainer(containerClient, blockBlobCount, blockBlobClients);
// Blob batch client and batch
const containerScopedBatchClient: BlobBatchClient =
containerClient.getBlobBatchClient();
const blobBatch: 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, {});
if (resp.errorCode) throw Error(resp.errorCode);
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();
if (resp2.errorCode) throw Error(resp2.errorCode);
console.log(
`[${i}] access tier ${resp2.accessTier}, status ${resp.subResponses[i].status}, message ${resp.subResponses[i].statusMessage}`
);
}
}
Примеры кода
- Установка уровня доступа большого двоичного объекта во время отправки
- Изменение уровня доступа большого двоичного объекта после отправки
- Копирование большого двоичного объекта в другой уровень доступа
- Использование пакета для изменения уровня доступа для многих больших двоичных объектов
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по