Partager via


Définir ou modifier le niveau d’accès d’un objet blob de blocs avec JavaScript

Cet article montre comment utiliser les niveaux d’accèsdes objets blob de blocs avec la bibliothèque de client Stockage Azure pour JavaScript.

Prérequis

  • Les exemples de cet article supposent que vous disposez déjà d'un projet configuré pour fonctionner avec la bibliothèque client Azure Blob Storage pour JavaScript. Pour en savoir plus sur la configuration de votre projet, y compris l’installation du package, l’importation de modules et la création d’un objet client autorisé à utiliser les ressources de données, consultez Prise en main de Stockage Blob Azure et JavaScript.
  • Le mécanisme d’autorisation doit disposer des autorisations nécessaires pour définir le niveau d’accès des objets blob. Pour en savoir plus, consultez les conseils d’autorisation pour l’opération d’API REST suivante :

Comprendre les niveaux d’accès aux objets blob de blocs

Pour gérer les coûts liés à vos besoins en matière de stockage, il peut être utile d’organiser vos données en fonction de la fréquence à laquelle elles sont accessibles et de la durée pendant laquelle elles devront conservées. Le Stockage Azure offre différents niveaux d’accès afin que vous puissiez stocker vos données d’objet blob de la manière la plus économique en fonction de la façon dont elles sont utilisées.

Niveaux d’accès pour les données d’objets blob

Les niveaux d’accès Stockage Azure comprennent les suivants :

  • Niveau chaud : niveau en ligne optimisé pour le stockage des données qui sont fréquemment consultées ou modifiées. Le niveau chaud offre les coûts de stockage les plus élevés, mais les coûts d’accès les plus faibles.
  • Niveau froid : niveau en ligne optimisé pour le stockage des données rarement consultées ou modifiées. Les données dans le niveau d’accès froid doivent être stockées pendant un minimum de 30 jours. Le niveau d’accès froid possède des coûts de stockage plus faibles et des coûts d’accès plus élevés que le niveau chaud.
  • Niveau froid : niveau en ligne optimisé pour le stockage des données rarement consultées ou modifiées. Les données dans le niveau d’accès froid doivent être stockées pendant un minimum de 90 jours. Le niveau d’accès froid possède des coûts de stockage plus faibles et des coûts d’accès plus élevés que le niveau sporadique.
  • Niveau Archive : un niveau hors connexion optimisé pour le stockage des données rarement sollicitées, sous des conditions de latence flexibles, de l’ordre de quelques heures. Les données dans le niveau Archive doivent être stockées pendant un minimum de 180 jours.

Pour en savoir plus sur les niveaux d’accès, consultez Niveaux d’accès pour les données blob.

Lorsqu’un objet blob se trouve dans le niveau d’accès Archive, il est considéré comme hors connexion et ne peut être ni lu ni modifié. Pour lire ou modifier les données d'un blob archivé, vous devez d'abord réhydrater le blob à un niveau en ligne. Pour en savoir plus sur la réactivation d’objets blob à partir du niveau archive vers un niveau en ligne, consultez Réhydratation d’objets blob à partir du niveau archive.

Restrictions

La définition du niveau d’accès est autorisée seulement sur les objets blob de blocs. Pour en savoir plus sur les restrictions relatives à la définition du niveau d’accès d’un objet blob de blocs, consultez Définir le niveau d’objet blob (API REST).

Remarque

Pour définir le niveau d'accès sur Cold en utilisant JavaScript, vous devez utiliser une version de bibliothèque cliente minimale de 12.13.0.

Définir le niveau d’accès d’un objet blob pendant le chargement

Pour charger un objet blob dans un niveau d’accès spécifique, utilisez BlockBlobUploadOptions. Les choix de propriétés tier sont les suivants : Hot, Cool, Cold ou 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;
}

Modifier le niveau d’accès d’un objet blob après le chargement

Pour modifier le niveau d’accès d’un objet blob après son chargement dans le stockage, utilisez setAccessTier. Avec le niveau, vous pouvez définir la priorité de réhydratation de la propriété BlobSetTierOptions pour sortir l’objet blob de bloc d’un état archivé. Les valeurs possibles sont High ou 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);
  }
}

Copier un objet blob dans un niveau d’accès différent

Utilisez la méthode BlobClient.beginCopyFromURL pour copier un objet blob. Pour modifier le niveau d’accès pendant l’opération de copie, utilisez la propriété tier BlobBeginCopyFromURLOptions et spécifiez un niveau d’accès différent de celui de l’objet blob source.

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

Utiliser un lot pour modifier le niveau d’accès pour de nombreux objets blob

Le lot représente un ensemble agrégé d’opérations sur des objets blob, telles que supprimer ou définir le niveau d’accès. Vous devez transmettre les informations d’identification appropriées pour effectuer correctement chaque opération. Dans cet exemple, les mêmes informations d’identification sont utilisées pour un ensemble d’objets blob dans le même conteneur.

Créez un BlobBatchClient. Utilisez le client pour créer un lot avec la méthode createBatch(). Lorsque le lot est prêt, le soumettre pour traitement. Utilisez la structure retournée pour vérifier que l’opération de chaque objet blob s’est bien passée.

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

Exemples de code

Étapes suivantes