Freigeben über


Festlegen oder Ändern der Zugriffsebene eines Blockblobs mit TypeScript

In diesem Artikel wird beschrieben, wie die Zugriffsebene eines Blobs mithilfe der Azure Storage-Clientbibliothek für JavaScript festgelegt oder geändert wird.

Voraussetzungen

  • Bei den Beispielen in diesem Artikel wird davon ausgegangen, dass Sie bereits ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für JavaScript eingerichtet haben. Wie Sie Ihr Projekt einrichten, einschließlich der Installation von Paketen, dem Import von Modulen und der Erstellung eines autorisierten Client-Objekts für die Arbeit mit Datenressourcen, erfahren Sie unter Erste Schritte mit Azure Blob Storage und TypeScript.
  • Der Autorisierungsmechanismus muss über Berechtigungen zum Festlegen der Zugriffsebene des Blobs verfügen. Weitere Informationen finden Sie im Autorisierungsleitfaden für die folgenden REST-API-Vorgänge:

Informationen zu Zugriffsebenen für Blockblobs

Um die Kosten für die Speicheranforderungen im Blick zu behalten, kann es hilfreich sein, die Daten anhand ihrer Zugriffshäufigkeit und Aufbewahrungsdauer zu organisieren. Azure Storage weist verschiedene Zugriffsebenen auf, sodass Sie Blobdaten basierend auf ihrer Verwendung auf die kostengünstigste Weise speichern können.

Zugriffsebenen für Blobdaten

Folgende Azure Storage-Zugriffsebenen stehen zur Verfügung:

  • Heiße Zugriffsebene: Onlineebene, die für die Speicherung von Daten optimiert ist, auf die häufig zugegriffen wird oder die häufig geändert werden. Die heiße Ebene hat die höchsten Speicherkosten, aber auch die niedrigsten Zugriffskosten.
  • Kalte Zugriffsebene: Onlineebene, die für die Speicherung von Daten optimiert ist, auf die nicht häufig zugegriffen wird oder die nicht häufig geändert werden. Daten auf der kalten Ebene sollten für mindestens 30 Tage gespeichert werden. Für die kalte Ebene fallen im Vergleich zur heißen Ebene niedrigere Speicherkosten, aber höhere Zugriffskosten an.
  • Ebene „Cold“ – Eine Onlineebene, die für die Speicherung von Daten optimiert ist, auf die nur selten zugegriffen wird oder die selten geändert werden. Daten auf der Ebene „Cold“ sollten für mindestens 90 Tage gespeichert werden. Für die Ebene „Cold“ fallen im Vergleich zur kalten Ebene niedrigere Speicherkosten und höhere Zugriffskosten an.
  • Archivebene – Eine Offline-Dienstebene, welche für die Speicherung von Daten optimiert ist, auf die nur selten zugegriffen wird und die flexible Wartezeitanforderungen in der Größenordnung von Stunden aufweist. Daten auf Archivzugriffsebene müssen mindestens 180 Tage lang gespeichert werden.

Weitere Informationen zu Zugriffsebenen finden Sie unter Zugriffsebenen für Blobdaten.

Während ein Blob sich auf der Archivebene befindet, wird es als offline betrachtet und kann nicht gelesen oder geändert werden. Wenn Daten in einem archivierten Blob gelesen oder geändert werden sollen, müssen Sie das Blob zuerst auf einer Onlineebene aktivieren. Weitere Informationen zum Aktivieren eines Blobs aus der Archivebene auf einer Onlineebene finden Sie unter Aktivierung von Blobs aus der Archivebene.

Beschränkungen

Das Festlegen der Zugriffsebene ist nur für Blockblobs gestattet. Weitere Informationen zu Einschränkungen beim Festlegen der Zugriffsebene eines Blockblobs finden Sie unter Festlegen der Blobebene (REST-API).

Hinweis

Um mithilfe von TypeScript die Zugriffsebene auf Cold festzulegen, müssen Sie mindestens die Version 12.13.0 der Clientbibliothek verwenden.

Festlegen der Zugriffsebene eines Blobs während dem Upload

Um ein Blob in eine bestimmte Zugriffsebene hochzuladen, verwenden Sie BlockBlobUploadOptions. Die Wahlmöglichkeiten für die tier-Eigenschaft sind: Hot, Cool, Cold oder 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;
}

Ändern der Zugriffsebene eines Blobs nach dem Hochladen

Um die Zugriffsebene eines Blobs zu ändern, nachdem es in den Speicher hochgeladen wurde, verwenden Sie setAccessTier. Zusammen mit der Ebene können Sie die BlobSetTierOptions-Eigenschaft Aktivierungspriorität festlegen, um das Blockblob aus einem archivierten Zustand zu bringen. Mögliche Werte sind High oder 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);
  }
}

Kopieren eines Blobs in eine andere Zugriffsebene

Verwenden Sie die Methode BlobClient.beginCopyFromURL, um ein Blob zu kopieren. Um die Zugriffsebene während des Kopiervorgangs zu ändern, verwenden Sie die Eigenschaft BlobBeginCopyFromURLOptionstier, und geben Sie eine andere Zugriffsebene an, als das Quellblob aufweist.

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

Verwenden eines Batches zum Ändern der Zugriffsebene für mehrere Blobs

Der Batch stellt einen aggregierten Satz von Vorgängen für Blobs dar, z. B, löschen oder Zugriffsebene festlegen. Sie müssen die korrekten Anmeldeinformationen übergeben, um jeden Vorgang erfolgreich ausführen zu können. In diesem Beispiel werden die gleichen Anmeldeinformationen für eine Gruppe von Blobs im selben Container verwendet.

Erstellen eines BlobBatchClient. Verwenden Sie den Client, um einen Batch mit der Methode createBatch() zu erstellen. Wenn der Batch bereit ist, übermitteln Sie ihn zur Verarbeitung. Verwenden Sie die zurückgegebene Struktur, um zu überprüfen, ob der Vorgang jedes Blobs erfolgreich war.

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

Codebeispiele

Nächste Schritte