Définir ou modifier le niveau d’accès d’un objet blob de blocs avec JavaScript ou TypeScript
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, 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;
}
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 = 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')
}
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
- Définir le niveau d’accès d’objet blob pendant le chargement pour JavaScript ou TypeScript
- Modifier le niveau d’accès d’objet blob après le chargement pour JavaScript ou TypeScript
- Copier un objet blob dans un niveau d’accès différent pour JavaScript ou TypeScript
- Utiliser un lot pour modifier le niveau d’accès pour de nombreux objets blob pour JavaScript ou TypeScript