Object Storage Service (OSS) バケットにアップロードされるすべてのデータが頻繁にアクセスされるわけではありません。 めったにアクセスされないデータは、コンプライアンスとアーカイブの目的でコールドストレージに保存されます。 ビジネスシナリオに基づいて、バッチで保存する必要がなくなったデータをバケットから削除することができます。 この場合、オブジェクトの最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスをホットからコールドに定期的に変更したり、オブジェクトを削除してストレージコストを削減したりできます。
使用上の注意
オブジェクトの最終変更時刻に基づいてライフサイクルルールを設定する前に、この機能に慣れていることを確認してください。 詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
ライフサイクルルールを設定するには、
oss:PutBucketLifecycle
権限が必要です。 ライフサイクルルールをクエリするには、oss:GetBucketLifecycle
権限が必要です。 ライフサイクルルールを削除するには、oss:DeleteBucketLifecycle
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
バケットのライフサイクルルールの設定
次のコードは、バケットのオブジェクトの最終変更時刻に基づいてライフサイクルルールを設定する方法の例を示しています。 ライフサイクルルールを設定した後、ビジネス要件に基づいてライフサイクルルールを変更できます。 既存のライフサイクルルールを変更する方法については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
const OSS = require('ali-oss')
const client = new OSS({
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Specify the name of the bucket.
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: {
// Specify that the current versions of objects expire three days after the objects are last modified.
days: 3
}
}
putBucketLifecycle(lifecycle1)
const lifecycle2 = {
id: 'rule2',
status: 'Enabled',
prefix: 'foo/',
expiration: {
// Specify that the objects that are created before the specified date expire.
createdBeforeDate: '2020-02-18T00:00:00.000Z'
},
}
putBucketLifecycle(lifecycle2)
const lifecycle3 = {
id: 'rule3',
status: 'Enabled',
prefix: 'foo/',
abortMultipartUpload: {
// Specify that parts expire in three days.
days: 3
},
}
putBucketLifecycle(lifecycle3)
const lifecycle4 = {
id: 'rule4',
status: 'Enabled',
prefix: 'foo/',
abortMultipartUpload: {
// Specify that parts created before the specified date expire.
createdBeforeDate: '2020-02-18T00:00:00.000Z'
},
}
putBucketLifecycle(lifecycle4)
const lifecycle5 = {
id: 'rule5',
status: 'Enabled',
prefix: 'foo/',
transition: {
// Specify that the storage classes of the current versions of objects are changed to Archive 20 days after the objects are last modified.
days: 20,
storageClass: 'Archive'
},
expiration: {
// Specify that the current versions of objects expire 21 days after the objects are last modified.
days: 21
},
}
putBucketLifecycle(lifecycle5)
const lifecycle6 = {
id: 'rule6',
status: 'Enabled',
prefix: 'foo/',
transition: {
//Specify that the storage classes of the objects that are created before the specified date are changed to Archive.
createdBeforeDate: '2023-02-19T00:00:00.000Z',
storageClass: 'Archive'
},
expiration: {
// Specify that objects created before the specified date are deleted.
createdBeforeDate: '2023-01-18T00:00:00.000Z'
},
}
putBucketLifecycle(lifecycle6)
const lifecycle7 = {
id: 'rule7',
status: 'Enabled',
prefix: 'foo/',
expiration: {
// Specify that delete markers are automatically removed when they expire.
expiredObjectDeleteMarker: true
}
}
putBucketLifecycle(lifecycle7)
const lifecycle8 = {
id: 'rule8',
status: 'Enabled',
prefix: 'foo/',
// Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified.
noncurrentVersionTransition: {
noncurrentDays: '10',
storageClass: 'IA'
}
}
putBucketLifecycle(lifecycle8)
const lifecycle9 = {
id: 'rule9',
status: 'Enabled',
prefix: 'foo/',
// Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified.
noncurrentVersionTransition: {
noncurrentDays: '10',
storageClass: 'IA'
},
// Specify the tags for objects that you want to match the rules.
tag: [{
key: 'key1',
value: 'value1'
},
{
key: 'key2',
value: 'value2'
}]
}
putBucketLifecycle(lifecycle9)
バケットのライフサイクルルールの照会
次のコードは、バケットのライフサイクルルールを照会する方法の例を示しています。
const OSS = require('ali-oss')
const client = new OSS({
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Specify the name of the bucket.
bucket: 'yourbucketname'
});
async function getBucketLifecycle () {
try {
const result = await client.getBucketLifecycle('Yourbucketname');
console.log(result.rules); // Query the lifecycle rules.
rules.forEach(rule => {
console.log(rule.id) // Query the rule IDs.
console.log(rule.status) // Query the status of the rules.
console.log(rule.tags) // Query the tags configured in the lifecycle rules.
console.log(rule.expiration.days) // Query the validity period configurations.
console.log(rule.expiration.createdBeforeDate) // Query the expiration date configurations.
// Query the rule for expired parts.
console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate)
// Query the rule of storage class conversion.
console.log(rule.transition.days || rule.transition.createdBeforeDate) // Query the conversion date configurations.
console.log(rule.transition.storageClass) // Query the configurations used to convert storage classes.
// Query the lifecycle rule to check whether expired delete markers are automatically deleted.
console.log(rule.transition.expiredObjectDeleteMarker)
// Query the configurations used to convert the storage class of previous versions of the objects.
console.log(rule.noncurrentVersionTransition.noncurrentDays) // Query the conversion date configurations for objects of previous versions.
console.log(rule.noncurrentVersionTransition.storageClass) // Query the configurations used to convert the storage classes of previous versions of objects.
})
} catch (e) {
console.log(e);
}
}
getBucketLifecycle();
バケットのライフサイクルルールの削除
次のコードは、バケットのすべてのライフサイクルルールを削除する方法の例を示しています。 1つ以上のライフサイクルルールを削除する場合は、「ライフサイクルルールの最終変更時刻に基づく」をご参照ください。
const OSS = require('ali-oss')
const client = new OSS({
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Specify the name of the bucket.
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」をご参照ください。