Aracılığıyla paylaş


TypeScript ile blok blobu erişim katmanını ayarlama veya değiştirme

Bu makalede, JavaScript için Azure Depolama istemci kitaplığıyla blob erişim katmanını ayarlama veya değiştirme adımları gösterilmektedir.

Önkoşullar

  • Bu makaledeki örneklerde JavaScript için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, modülleri içeri aktarma ve veri kaynaklarıyla çalışacak yetkili bir istemci nesnesi oluşturma gibi projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Blob Depolama ve TypeScript'i kullanmaya başlama.
  • Yetkilendirme mekanizmasının blob erişim katmanını ayarlama izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemi için yetkilendirme kılavuzuna bakın:

Blok blobu erişim katmanları hakkında

Depolama gereksinimlerinin maliyetlerini yönetmek için verilerinizi ne sıklıkta erişildiğinden ve ne kadar süreyle saklanması gerektiğinden yola çıkarak düzenlemek yararlı olabilir. Azure depolama, blob verilerinizi nasıl kullanıldığına göre en uygun maliyetli şekilde depolayabileceğiniz farklı erişim katmanları sunar.

Blob verileri için erişim katmanları

Azure Depolama erişim katmanları şunlardır:

  • Sık erişim katmanı - Sık erişilen veya değiştirilen verileri depolamak için iyileştirilmiş bir çevrimiçi katman. Sık erişim katmanı en yüksek depolama maliyetlerine, ancak en düşük erişim maliyetlerine sahiptir.
  • Seyrek erişim katmanı - Seyrek erişilen veya değiştirilen verileri depolamak için iyileştirilmiş çevrimiçi katman. Seyrek erişim katmanındaki veriler en az 30 gün boyunca depolanmalıdır. Seyrek erişim katmanı, sık erişim katmanına kıyasla daha düşük depolama maliyetlerine ve daha yüksek erişim maliyetlerine sahiptir.
  • Soğuk katman - Seyrek erişilen veya değiştirilen verileri depolamak için iyileştirilmiş çevrimiçi katman. Soğuk katmandaki veriler en az 90 gün saklanmalıdır. Soğuk katman, seyrek erişim katmanına kıyasla depolama açısından daha düşük, erişim açısından daha yüksek maliyetlidir.
  • Arşiv katmanı - Seyrek erişilen ve esnek gecikme süresi gereksinimlerine sahip verileri saat sırasına göre depolamak için iyileştirilmiş çevrimdışı katman. Arşiv katmanındaki veriler en az 180 gün boyunca depolanmalıdır.

Erişim katmanları hakkında daha fazla bilgi edinmek için bkz . Blob verileri için erişim katmanları.

Blob Arşiv erişim katmanındayken çevrimdışı olduğu kabul edilir ve okunamaz veya değiştirilemez. Arşivlenmiş bir blobdaki verileri okumak veya değiştirmek için önce blobu çevrimiçi bir katmanda yeniden doldurmanız gerekir. Bir blobu Arşiv katmanından çevrimiçi katmana yeniden doldurma hakkında daha fazla bilgi edinmek için bkz . Arşiv katmanından blob yeniden doldurma.

Kısıtlamalar

Erişim katmanının ayarlanmasına yalnızca blok bloblarında izin verilir. Blok blobu erişim katmanını ayarlama kısıtlamaları hakkında daha fazla bilgi edinmek için bkz . Blob Katmanını Ayarlama (REST API).

Not

Erişim katmanını TypeScript'i kullanacak şekilde ayarlamak için Cold en düşük istemci kitaplığı sürümü olan 12.13.0 kullanmanız gerekir.

Karşıya yükleme sırasında blob'un erişim katmanını ayarlama

Blobu belirli bir erişim katmanına yüklemek için BlockBlobUploadOptions kullanın. Özellik tier seçenekleri şunlardır: Hot, Cool, Coldveya 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;
}

Karşıya yüklemeden sonra blob'un erişim katmanını değiştirme

Depolama alanına yüklendikten sonra blobun erişim katmanını değiştirmek için setAccessTier'ı kullanın. Katmanla birlikte BlobSetTierOptions özelliği yeniden doldurma önceliğini ayarlayarak blok blobunu arşivlenmiş durumdan çıkarabilirsiniz. Olası değerler: High veya 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);
  }
}

Blobu farklı bir erişim katmanına kopyalama

BlobClient kullanın.blobu kopyalamak için beginCopyFromURL yöntemi. Kopyalama işlemi sırasında erişim katmanını değiştirmek için BlobBeginCopyFromURLOptions tier özelliğini kullanın ve kaynak blobdan farklı bir erişim katmanı belirtin.

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

Birçok blob için erişim katmanını değiştirmek için toplu iş kullanma

Toplu işlem, bloblarda silme veya erişim katmanı ayarlama gibi toplu bir işlem kümesini temsil eder. Her işlemi başarıyla gerçekleştirmek için doğru kimlik bilgilerini geçirmeniz gerekir. Bu örnekte, aynı kapsayıcıdaki bir blob kümesi için aynı kimlik bilgisi kullanılır.

BlobBatchClient oluşturun. createBatch() yöntemiyle toplu iş oluşturmak için istemcisini kullanın. Toplu iş hazır olduğunda toplu işlemi işlenmek üzere gönderin . Döndürülen yapıyı kullanarak her blob işleminin başarılı olduğunu doğrulayı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}`
    );
  }
}

Kod örnekleri

Sonraki adımlar