Sdílet prostřednictvím


Nastavení nebo změna úrovně přístupu objektu blob bloku pomocí TypeScriptu

Tento článek ukazuje, jak nastavit nebo změnit úroveň přístupu objektu blob pomocí klientské knihovny služby Azure Storage pro JavaScript.

Požadavky

  • Příklady v tomto článku předpokládají, že už máte projekt nastavený tak, aby fungoval s klientskou knihovnou Azure Blob Storage pro JavaScript. Další informace o nastavení projektu, včetně instalace balíčku, importu modulů a vytvoření autorizovaného klientského objektu pro práci s datovými prostředky, najdete v tématu Začínáme se službou Azure Blob Storage a TypeScriptem.
  • Autorizační mechanismus musí mít oprávnění k nastavení úrovně přístupu objektu blob. Další informace najdete v pokynech k autorizaci pro následující operaci rozhraní REST API:

Informace o úrovních přístupu k objektům blob bloku

Pokud chcete spravovat náklady na potřeby úložiště, může být užitečné uspořádat data na základě toho, jak často se k nim přistupuje a jak dlouho je potřeba uchovávat. Azure Storage nabízí různé úrovně přístupu, takže data objektů blob můžete ukládat nákladově nejefektivnějším způsobem na základě způsobu jejich použití.

Úrovně přístupu k datům v objektech blob

Mezi úrovně přístupu ke službě Azure Storage patří:

  • Horká úroveň – online úroveň optimalizovaná pro ukládání dat, ke kterým se přistupuje nebo mění často. Horká úroveň má nejvyšší náklady na úložiště, ale nejnižší náklady na přístup.
  • Studená úroveň – online úroveň optimalizovaná pro ukládání dat, která jsou zřídka přístupná nebo upravená. Data ve studené vrstvě by měla být uložena minimálně po dobu 30 dnů. Studená úroveň má nižší náklady na úložiště a vyšší náklady na přístup v porovnání s horkou úrovní.
  • Studená úroveň – online úroveň optimalizovaná pro ukládání dat, která jsou zřídka přístupná nebo upravená. Data na úrovni Zřídkavý přístup by měla být uložená minimálně 90 dnů. Úroveň Zřídkavý přístup má v porovnání se studenou úrovní nižší náklady na úložiště a vyšší náklady na přístup.
  • Archivní úroveň – offline úroveň optimalizovaná pro ukládání zřídka používaných dat a s flexibilními požadavky na latenci v řádu hodin. Data v archivní úrovni by měla být uložena minimálně po dobu 180 dnů.

Další informace oúrovních

I když je objekt blob v archivní úrovni přístupu, považuje se za offline a nedá se číst ani upravovat. Chcete-li číst nebo upravovat data v archivovaného objektu blob, musíte nejprve znovu dosadit objekt blob do online vrstvy. Další informace o dosazování objektu blob z archivní úrovně do online úrovně najdete v tématu Dosazování objektů blob z archivní úrovně.

Omezení

Nastavení úrovně přístupu je povolené jenom u objektů blob bloku. Další informace o omezeních nastavení úrovně přístupu objektu blob bloku najdete v tématu Nastavení úrovně objektů blob (REST API).

Poznámka:

Pokud chcete nastavit úroveň přístupu na Cold použití TypeScriptu, musíte použít minimální verzi klientské knihovny 12.13.0.

Nastavení úrovně přístupu objektu blob během nahrávání

Pokud chcete nahrát objekt blob do konkrétní úrovně přístupu, použijte BlockBlobUploadOptions. Možnosti tier vlastností: Hot, Cool, Coldnebo 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;
}

Změna úrovně přístupu objektu blob po nahrání

Pokud chcete změnit úroveň přístupu objektu blob po nahrání do úložiště, použijte setAccessTier. Společně s úrovní můžete nastavit prioritu dosazování vlastnosti BlobSetTierOptions tak, aby objekt blob bloku přešel z archivovaného stavu. Možné hodnoty jsou High nebo 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);
  }
}

Kopírování objektu blob do jiné úrovně přístupu

Použijte Objekt blobClient.beginCopyFromURL metoda pro zkopírování objektu blob. Pokud chcete změnit úroveň přístupu během operace kopírování, použijte vlastnost BlobBeginCopyFromURLOptions tier a zadejte jinou úroveň přístupu než zdrojový objekt 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');
}

Změna úrovně přístupu pro mnoho objektů blob pomocí dávky

Dávka představuje agregovanou sadu operací s objekty blob, jako je odstranění nebo nastavení úrovně přístupu. Abyste mohli úspěšně provést každou operaci, musíte předat správné přihlašovací údaje. V tomto příkladu se stejné přihlašovací údaje používají pro sadu objektů blob ve stejném kontejneru.

Vytvořte objekt BlobBatchClient. Pomocí klienta vytvořte dávku pomocí metody createBatch(). Jakmile je dávka připravená, odešlete dávku ke zpracování. Pomocí vrácené struktury ověřte, že operace každého objektu blob proběhla úspěšně.

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

Ukázky kódu

Další kroky