Dela via


Ange eller ändra åtkomstnivån för en blockblob med JavaScript

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. Information om hur du konfigurerar projektet, inklusive paketinstallation, import av moduler och att skapa 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, Coldeller 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;
}

Ä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 = 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')
}

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

Nästa steg