Ange eller ändra åtkomstnivån för en blockblob med JavaScript eller TypeScript
Den här artikeln visar hur du ställer in eller ändrar en blobs åtkomstnivå för blockblobar med Azure Storage-klientbiblioteket för JavaScript.
Förutsättningar
- Exemplen i den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för JavaScript. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, import av moduler och skapande av ett auktoriserat klientobjekt för att arbeta med dataresurser finns i Kom igång med Azure Blob Storage och JavaScript.
- Auktoriseringsmekanismen måste ha behörighet att ange blobens åtkomstnivå. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärd:
Om blockblobåtkomstnivåer
För att hantera kostnader för lagringsbehov kan det vara bra att organisera dina data baserat på hur ofta de används och hur länge de behöver behållas. Azure Storage erbjuder olika åtkomstnivåer så att du kan lagra dina blobdata på det mest kostnadseffektiva sättet baserat på hur de används.
Åtkomstnivåer för blobdata
Azure Storage-åtkomstnivåer omfattar:
- Frekvent nivå – en onlinenivå som är optimerad för att lagra data som används eller ändras ofta. Den frekventa nivån har de högsta lagringskostnaderna, men de lägsta åtkomstkostnaderna.
- Lågfrekvent nivå – en onlinenivå som är optimerad för lagring av data som sällan används eller ändras. Data på lågfrekvent nivå ska lagras i minst 30 dagar. Den lågfrekventa nivån har lägre lagringskostnader och högre åtkomstkostnader jämfört med den frekventa nivån.
- Kall nivå – en onlinenivå som är optimerad för lagring av data som inte används sällan eller ändras. Data på nivån Infrekvent ska lagras i minst 90 dagar. Den infrekventa åtkomstnivån har lägre lagringskostnader och högre åtkomstkostnader jämfört med lågfrekvent lagringsnivå.
- Arkivnivå – en offlinenivå som är optimerad för lagring av data som sällan används och som har flexibla svarstidskrav i timmar. Data på arkivnivån ska lagras i minst 180 dagar.
Mer information om åtkomstnivåer finns i Åtkomstnivåer för blobdata.
Även om en blob finns på arkivåtkomstnivån anses den vara offline och kan inte läsas eller ändras. För att kunna läsa eller ändra data i en arkiverad blob måste du först extrahera bloben till en onlinenivå. Mer information om hur du extraherar en blob från arkivnivån till en onlinenivå finns i Blob rehydrering från arkivnivån.
Begränsningar
Att ange åtkomstnivån tillåts endast för blockblobar. Mer information om begränsningar för att ange en blockblobs åtkomstnivå finns i Ange BLOB-nivå (REST API).
Kommentar
Om du vill ange åtkomstnivån till Cold
att använda JavaScript måste du använda en lägsta klientbiblioteksversion på 12.13.0.
Ange åtkomstnivån för en blob under uppladdningen
Om du vill ladda upp en blob till en specifik åtkomstnivå använder du BlockBlobUploadOptions. Egenskapsalternativen tier
är: Hot
, Cool
, Cold
eller 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;
}
Ändra åtkomstnivån för en blob efter uppladdning
Om du vill ändra åtkomstnivån för en blob när den har laddats upp till lagring använder du setAccessTier. Tillsammans med nivån kan du ange egenskapen BlobSetTierOptions rehydreringsprioritet för att få blockbloben ur ett arkiverat tillstånd. Möjliga värden är High
eller 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);
}
}
Kopiera en blob till en annan åtkomstnivå
Använd BlobClient.beginCopyFromURL-metod för att kopiera en blob. Om du vill ändra åtkomstnivån under kopieringsåtgärden använder du egenskapen BlobBeginCopyFromURLOptions tier
och anger en annan åtkomstnivå än källbloben.
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')
}
Använda en batch för att ändra åtkomstnivå för många blobar
Batchen representerar en aggregerad uppsättning åtgärder på blobar, till exempel ta bort eller ange åtkomstnivå. Du måste skicka in rätt autentiseringsuppgifter för att kunna utföra varje åtgärd. I det här exemplet används samma autentiseringsuppgifter för en uppsättning blobar i samma container.
Skapa en BlobBatchClient. Använd klienten för att skapa en batch med metoden createBatch(). När batchen är klar skickar du batchen för bearbetning. Använd den returnerade strukturen för att verifiera att varje blobåtgärd lyckades.
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}`)
}
}
Kodexempel
- Ange blobåtkomstnivå under uppladdning för JavaScript eller TypeScript
- Ändra blobåtkomstnivå efter uppladdning för JavaScript eller TypeScript
- Kopiera blob till en annan åtkomstnivå för JavaScript eller TypeScript
- Använd en batch för att ändra åtkomstnivå för många blobar för JavaScript eller TypeScript