すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ライフサイクル (Node.js SDK)

最終更新日:Nov 30, 2025

OSS にアップロードされたすべてのデータが、頻繁なアクセスを必要とするわけではありません。データコンプライアンスやアーカイブなどの目的で、一部のデータはコールドストレージクラスに保存する必要があります。他のシナリオでは、不要になったデータをバケットから一括で削除したい場合があります。最終更新日時にもとづいてライフサイクルルールを設定することで、ストレージコストを削減できます。これらのルールは、オブジェクトをホットストレージクラスからコールドストレージクラスに定期的に移行したり、オブジェクトを削除したりできます。

注意事項

  • オブジェクトの最終更新日時にもとづいてライフサイクルルールを設定する前に、この機能についてよく理解しておいてください。詳細については、「最終更新日時にもとづくライフサイクルルール」をご参照ください。

  • ライフサイクルルールを設定するには、oss:PutBucketLifecycle 権限が必要です。ライフサイクルルールを表示するには、oss:GetBucketLifecycle 権限が必要です。すべてのライフサイクルルールを削除するには、oss:DeleteBucketLifecycle 権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

ライフサイクルルールの設定

次のコードは、最終更新日時にもとづいてライフサイクルルールを設定する方法を示しています。ルールを設定した後、1 つ以上のルールを変更する場合は、「1 つ以上のライフサイクルルール構成を変更するにはどうすればよいですか?」をご参照ください。

const OSS = require('ali-oss')

const client = new OSS({
  // バケットが配置されているリージョンに region を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、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: {
    // オブジェクトの現行バージョンを、最終更新日時から 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: {
    // オブジェクトの現行バージョンを、最終更新日時から 20 日後にアーカイブストレージクラスに移行します。
    days: 20,
    storageClass: 'Archive'
  },
  expiration: {
    // オブジェクトの現行バージョンを、最終更新日時から 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/', 
  // オブジェクトの非現行バージョンを、非現行になってから 10 日後に低頻度アクセス (IA) ストレージクラスに移行します。
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  }
}
putBucketLifecycle(lifecycle8)

const lifecycle9 = {
  id: 'rule9',
  status: 'Enabled',
  prefix: 'foo/', 
  // オブジェクトの非現行バージョンを、非現行になってから 10 日後に低頻度アクセス (IA) ストレージクラスに移行します。
  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({
  // バケットが配置されているリージョンに region を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、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); // ライフサイクルルールを取得します。

    result.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)
      // 非現行バージョンのオブジェクトのストレージクラス移行ルールを表示します。
      console.log(rule.noncurrentVersionTransition.noncurrentDays) // 非現行バージョンのオブジェクトのストレージクラス移行時間を表示します。
      console.log(rule.noncurrentVersionTransition.storageClass) // 非現行バージョンのオブジェクトが移行されるストレージクラスを表示します。
    })
  } catch (e) {
    console.log(e);
  }
}
getBucketLifecycle();

ライフサイクルルールの削除

次のコードは、バケットからすべてのライフサイクルルールを削除する方法を示しています。特定の 1 つ以上のライフサイクルルールのみを削除する場合は、「1 つ以上のライフサイクルルールを削除するにはどうすればよいですか?」をご参照ください。

const OSS = require('ali-oss')

const client = new OSS({
  // バケットが配置されているリージョンに region を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、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();

関連ドキュメント

  • ライフサイクルルールの完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • ライフサイクルルールを設定するために使用される API 操作の詳細については、「PutBucketLifecycle」をご参照ください。

  • ライフサイクルルールを表示するために使用される API 操作の詳細については、「GetBucketLifecycle」をご参照ください。

  • すべてのライフサイクルルールを削除するために使用される API 操作の詳細については、「DeleteBucketLifecycle」をご参照ください。