全部產品
Search
文件中心

Object Storage Service:Node.js生命週期

更新時間:Nov 01, 2024

並不是所有上傳至OSS的資料都需要頻繁訪問,但基於資料合規或者存檔等原因,部分資料仍需要繼續以冷儲存類型進行儲存。或者基於業務使用情境,希望大量刪除Bucket內不再需要儲存的資料。您可以配置基於最後一次修改時間(Last Modified Time)的生命週期規則,定期將Object從熱儲存類型轉為冷儲存類型或者刪除Object,以降低儲存成本。

注意事項

  • 在配置基於最後一次修改時間的生命週期規則之前,請確保您已瞭解該功能。詳情請參見基於最後一次修改時間的生命週期規則

  • 要設定生命週期規則,您必須具有oss:PutBucketLifecycle許可權;要查看生命週期規則,您必須具有oss:GetBucketLifecycle許可權;要清空生命週期規則,您必須具有oss:DeleteBucketLifecycle許可權。具體操作,請參見為RAM使用者授權自訂的權限原則

設定生命週期規則

以下代碼用於設定基於最後一次修改時間的生命週期規則。設定完成後,如果您希望修改其中的一條或多條生命週期規則,請參見如何修改其中一條或多條生命週期規則配置?

const OSS = require('ali-oss')

const client = new OSS({
  // yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填寫儲存空間名稱。
  bucket: 'yourbucketname'
});

async function putBucketLifecycle(lifecycle) {
  try {
    const result = await client.putBucketLifecycle('yourbucketname', [
    lifecycle
  ]);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

const lifecycle1 = {
  id: 'rule1',
  status: 'Enabled',
  prefix: 'foo/',
  expiration: {
    // 指定目前的版本Object距其最後修改時間3天后到期。
    days: 3 
  }
}
putBucketLifecycle(lifecycle1)

const lifecycle2 = {
  id: 'rule2',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // 指定日期之前建立的檔案到期。
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle2)

const lifecycle3 = {
  id: 'rule3',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // 指定分區3天后到期。
    days: 3 
  },
}
putBucketLifecycle(lifecycle3)

const lifecycle4 = {
  id: 'rule4',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // 指定日期之前建立的分區到期。
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle4)

const lifecycle5 = {
  id: 'rule5',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    // 指定目前的版本Object距其最後修改時間20天后轉Archive Storage類型。
    days: 20,
    storageClass: 'Archive'
  },
  expiration: {
    // 指定目前的版本Object距其最後修改時間21天后到期。
    days: 21 
  },
}
putBucketLifecycle(lifecycle5)

const lifecycle6 = {
  id: 'rule6',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    // 達到指定日期後自動將檔案轉為歸檔類型。
    createdBeforeDate: '2023-02-19T00:00:00.000Z', 
    storageClass: 'Archive'
  },
  expiration: {
    // 達到指定日期後自動將檔案刪除。
    createdBeforeDate: '2023-01-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle6)

const lifecycle7 = {
  id: 'rule7',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // 設定自動移除到期刪除標記。
    expiredObjectDeleteMarker: true 
  }
}
putBucketLifecycle(lifecycle7)

const lifecycle8 = {
  id: 'rule8',
  status: 'Enabled',
  prefix: 'foo/', 
  // 設定非目前的版本的Object距其最後修改時間10天之後轉為低頻訪問類型。
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  }
}
putBucketLifecycle(lifecycle8)

const lifecycle9 = {
  id: 'rule9',
  status: 'Enabled',
  prefix: 'foo/', 
  // 設定非目前的版本的Object距其最後修改時間10天之後轉為低頻訪問類型。
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  },
  // 指定規則所適用的對象標籤。
  tag: [{
    key: 'key1',
    value: 'value1'
  },
   {
     key: 'key2',
     value: 'value2'
   }]
}
putBucketLifecycle(lifecycle9)

查看生命週期規則

以下代碼用於查看生命週期規則。

const OSS = require('ali-oss')

const client = new OSS({
  // yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填寫儲存空間名稱。
  bucket: 'yourbucketname'
});

async function getBucketLifecycle () {
  try {
    const result = await client.getBucketLifecycle('Yourbucketname');
    console.log(result.rules); // 擷取生命週期規則。

    rules.forEach(rule => {
      console.log(rule.id) //  查看生命週期規則ID。 
      console.log(rule.status) // 查看生命週期規則狀態。
      console.log(rule.tags) // 查看生命週期規則標籤。
      console.log(rule.expiration.days) // 查看到期天數規則。
      console.log(rule.expiration.createdBeforeDate) // 查看到期日期規則。
      // 查看到期分區規則。
      console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate)
      // 查看儲存類型轉換規則。
      console.log(rule.transition.days || rule.transition.createdBeforeDate) // 查看儲存類型轉換時間。
      console.log(rule.transition.storageClass) // 轉換儲存類型。
      // 查看是否自動刪除到期刪除標記。
      console.log(rule.transition.expiredObjectDeleteMarker)
      // 查看非目前的版本Object儲存類型轉換規則。
      console.log(rule.noncurrentVersionTransition.noncurrentDays) // 查看非目前的版本Object儲存類型轉換時間。
      console.log(rule.noncurrentVersionTransition.storageClass) // 查看非目前的版本Object轉換的儲存類型。
    })
  } catch (e) {
    console.log(e);
  }
}
getBucketLifecycle();

清空生命週期規則

以下代碼用於清空Bucket的所有生命週期規則。如果您需要刪除其中一條或者多條生命週期規則,請參見如何刪除其中一條或多條生命週期規則?

const OSS = require('ali-oss')

const client = new OSS({
  // yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填寫儲存空間名稱。
  bucket: 'yourbucketname'
});

async function deleteBucketLifecycle () {
  try {
    const result = await client.deleteBucketLifecycle('Yourbucketname');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}
deleteBucketLifecycle();

相關文檔