コンテンツにスキップ

オブジェクトライフサイクル

オブジェクトライフサイクルは、バケットにアップロードされたオブジェクトの保持期間を決定し、オブジェクトがスタンダードストレージからインフリークエントアクセスストレージに移行するタイミングを指定できるようにします。

例えば、90日後にオブジェクトを削除するオブジェクトライフサイクルルールを作成したり、30日後にオブジェクトをインフリークエントアクセスストレージに移行するルールを設定したりできます。

挙動

  • オブジェクトは通常、x-amz-expiration値の24時間以内にバケットから削除されます。
  • オブジェクトを削除するライフサイクルポリシーが適用されると、新しくアップロードされたオブジェクトのx-amz-expiration値は新しいルールに基づいて即座に反映されますが、既存のオブジェクトは遅延が生じる場合があります。ほとんどのオブジェクトは24時間以内に移行されますが、バケット内のオブジェクトの数によってはそれ以上かかることがあります。オブジェクトが移行中は、以前のポリシーから適用された古いルールが表示されることがあります。
  • オブジェクトは削除されると、もはや課金対象ではなくなります。
  • バケットには、マルチパートアップロードを開始から7日後に期限切れにするデフォルトのライフサイクルポリシーがあります。
  • オブジェクトがスタンダードストレージからインフリークエントアクセスストレージに移行されると、クラスA操作が発生します。

バケットのオブジェクトライフサイクルポリシーを設定する

オブジェクトライフサイクルルールを作成する際に、適用したいプレフィックスを指定できます。

  • 現在、オブジェクトライフサイクルには1000ルールの最大制限があります。
  • オブジェクトライフサイクルの管理はバケットレベルのアクションであり、Workers R2 Storage Writeの権限グループを持つAPIトークンが必要です。

ダッシュボード

  1. CloudflareダッシュボードからR2を選択します。
  2. リストからバケットを見つけて選択します。
  3. バケットページから設定を選択します。
  4. オブジェクトライフサイクルルールの下で、ルールを追加を選択します。
  5. 新しいルールのフィールドに入力します。
  6. 完了したら、ルールを追加を選択します。

S3 API

以下は、異なる潜在的なユースケースに対して異なるルールセットでライフサイクルポリシーを設定する例です。

R2と対話するためのS3クライアントを設定する
const client = new S3({
endpoint: "https://4893d737c0b9e484dfc37ec392b5fa8a.r2.cloudflarestorage.com",
credentials: {
accessKeyId: "7dc27c125a22ad808cd01df8ec309d41",
secretAccessKey:
"1aa5c5b0c43defdb88f567487c071d17e234126133444770a706ae09336c57a4",
},
region: "auto",
});
バケットのライフサイクルポリシーを設定する
await client
.putBucketLifecycleConfiguration({
Bucket: "testBucket",
LifecycleConfiguration: {
Rules: [
// 例: 特定の日付にオブジェクトを削除する
// 2024年に2019年のドキュメントを削除
{
ID: "2019年のドキュメントを削除",
Status: "Enabled",
Filter: {
Prefix: "2019/",
},
Expiration: {
Date: new Date("2024-01-01"),
},
},
// 例: 年齢に基づいてオブジェクトをインフリークエントアクセスストレージに移行する
// 30日以上経過したオブジェクトをインフリークエントアクセスストレージに移行
{
ID: "オブジェクトをインフリークエントアクセスに移行",
Status: "Enabled",
Transitions: [
{
Days: 30,
StorageClass: "STANDARD_IA",
},
],
},
// 例: 年齢に基づいてオブジェクトを削除する
// 90日以上経過したログを削除
{
ID: "古いログを削除",
Status: "Enabled",
Filter: {
Prefix: "logs/",
},
Expiration: {
Days: 90,
},
},
// 例: 不完全なマルチパートアップロードを1週間後に中止
{
ID: "不完全なマルチパートアップロードを中止",
Status: "Enabled",
AbortIncompleteMultipartUpload: {
DaysAfterInitiation: 7,
},
},
// 例: ユーザーのマルチパートアップロードを1日後に中止
{
ID: "ユーザーの不完全なマルチパートアップロードを中止",
Status: "Enabled",
Filter: {
Prefix: "useruploads/",
},
AbortIncompleteMultipartUpload: {
// プレフィックスに一致するアップロードの場合、このルールは
// 以前のルールよりも優先されます。
DaysAfterInitiation: 1,
},
},
],
},
})
.promise();

バケットのライフサイクルポリシーを取得する

import S3 from "aws-sdk/clients/s3.js";
// R2と対話するためのS3クライアントを設定する。
const client = new S3({
endpoint: "https://4893d737c0b9e484dfc37ec392b5fa8a.r2.cloudflarestorage.com",
credentials: {
accessKeyId: "7dc27c125a22ad808cd01df8ec309d41",
secretAccessKey:
"1aa5c5b0c43defdb88f567487c071d17e234126133444770a706ae09336c57a4",
},
region: "auto",
});
// バケットのライフサイクルポリシーを取得
console.log(
await client
.getBucketLifecycleConfiguration({
Bucket: "bucketName",
})
.promise(),
);

バケットのライフサイクルポリシーを削除する

ダッシュボード

  1. CloudflareダッシュボードからR2を選択します。
  2. リストからバケットを見つけて選択します。
  3. バケットページから設定を選択します。
  4. オブジェクトライフサイクルルールの下で、削除したいルールを選択します。
  5. 完了したら、ルールを削除を選択します。

S3 API

import S3 from "aws-sdk/clients/s3.js";
// R2と対話するためのS3クライアントを設定する。
const client = new S3({
endpoint: "https://4893d737c0b9e484dfc37ec392b5fa8a.r2.cloudflarestorage.com",
credentials: {
accessKeyId: "7dc27c125a22ad808cd01df8ec309d41",
secretAccessKey:
"1aa5c5b0c43defdb88f567487c071d17e234126133444770a706ae09336c57a4",
},
region: "auto",
});
// バケットのライフサイクルポリシーを削除
await client
.deleteBucketLifecycle({
Bucket: "bucketName",
})
.promise();