Bagikan melalui


Mengatur atau mengubah tingkat akses blob blok dengan TypeScript

Artikel ini memperlihatkan cara mengatur atau mengubah tingkat akses blob dengan pustaka klien Azure Storage untuk JavaScript.

Prasyarat

  • Contoh dalam artikel ini mengasumsikan Anda sudah menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk JavaScript. Untuk mempelajari tentang menyiapkan proyek Anda, termasuk penginstalan paket, mengimpor modul, dan membuat objek klien resmi untuk bekerja dengan sumber daya data, lihat Mulai menggunakan Azure Blob Storage dan TypeScript.
  • Mekanisme otorisasi harus memiliki izin untuk mengatur tingkat akses blob. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk operasi REST API berikut:

Tentang tingkat akses blob blok

Untuk mengelola biaya untuk kebutuhan penyimpanan, akan sangat membantu untuk mengatur data Anda berdasarkan seberapa sering data diakses dan berapa lama perlu dipertahankan. Penyimpanan Azure menawarkan tingkat penyimpanan yang berbeda sehingga Anda dapat menyimpan data blob dengan cara yang paling hemat biaya berdasarkan cara data digunakan.

Tingkat penyimpanan untuk data blob

Tingkat penyimpanan Azure Storage meliputi:

  • Tingkat panas - Tingkatan online yang dioptimalkan untuk menyimpan data yang sering diakses atau diubah. Tingkat panas memiliki biaya penyimpanan tertinggi tetapi biaya aksesnya paling rendah.
  • Tingkat dingin - Tingkatan online yang dioptimalkan untuk menyimpan data yang jarang diakses atau diubah. Data di tingkat dingin harus disimpan selama minimal 30 hari. Tingkat dingin memiliki biaya penyimpanan yang lebih rendah dan biaya akses yang lebih tinggi dibandingkan dengan tingkat panas.
  • Tingkat dingin - Tingkat online yang dioptimalkan untuk menyimpan data yang jarang diakses atau dimodifikasi. Data di tingkat dingin harus disimpan selama minimal 90 hari. Tingkat dingin memiliki biaya penyimpanan yang lebih rendah dan biaya akses yang lebih tinggi dibandingkan dengan tingkat panas.
  • Tingkat arsip - Tingkatan offline yang dioptimalkan untuk menyimpan data yang jarang diakses, dan memiliki persyaratan latensi yang fleksibel, pada urutan jam. Data di tingkat arsip harus disimpan selama minimal 180 hari.

Untuk mempelajari selengkapnya tentang tingkat akses, lihat Tingkat akses untuk data blob.

Saat blob berada di tingkat akses Arsip, maka dianggap offline dan tidak dapat dibaca atau dimodifikasi. Untuk membaca atau memodifikasi data dalam blob yang diarsipkan, Anda harus terlebih dahulu merehidrasi blob ke tingkat online. Untuk mempelajari selengkapnya tentang rehidrasi blob dari tingkat Arsip ke tingkat online, lihat Rehidrasi blob dari tingkat Arsip.

Batasan

Mengatur tingkat akses hanya diperbolehkan pada blob blok. Untuk mempelajari selengkapnya tentang pembatasan pengaturan tingkat akses blob blok, lihat Mengatur Tingkat Blob (REST API).

Catatan

Untuk mengatur tingkat akses ke Cold menggunakan TypeScript, Anda harus menggunakan pustaka klien minimum versi 12.13.0.

Mengatur tingkat akses blob selama unggahan

Untuk mengunggah blob ke tingkat akses tertentu, gunakan BlockBlobUploadOptions. Pilihan tier properti adalah: Hot, , Cool, Coldatau 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;
}

Mengubah tingkat akses blob setelah diunggah

Untuk mengubah tingkat akses blob setelah diunggah ke penyimpanan, gunakan setAccessTier. Bersama dengan tingkatan, Anda dapat mengatur prioritas rehidrasi properti BlobSetTierOptions untuk membawa blob blok keluar dari status yang diarsipkan. Nilai yang mungkin adalah High atau 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);
  }
}

Menyalin blob ke tingkat akses yang berbeda

Gunakan BlobClient.metode beginCopyFromURL untuk menyalin blob. Untuk mengubah tingkat akses selama operasi salin, gunakan properti BlobBeginCopyFromURLOptions tier dan tentukan tingkat akses yang berbeda dari blob sumber.

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

Menggunakan batch untuk mengubah tingkat akses untuk banyak blob

Batch mewakili serangkaian operasi agregat pada blob, seperti menghapus atau mengatur tingkat akses. Anda perlu meneruskan kredensial yang benar agar berhasil melakukan setiap operasi. Dalam contoh ini, kredensial yang sama digunakan untuk sekumpulan blob dalam kontainer yang sama.

Buat BlobBatchClient. Gunakan klien untuk membuat batch dengan metode createBatch(). Ketika batch siap, kirimkan batch untuk diproses. Gunakan struktur yang dikembalikan untuk memvalidasi setiap operasi blob berhasil.

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

Sampel kode

Langkah berikutnya