Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

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

最終更新 Markdown で表示Agent セットアップ

オブジェクトライフサイクルは、バケットにアップロードしたオブジェクトの保持期間を決めます。Standard ストレージから Infrequent Access ストレージへ移行するタイミングも指定できます。

ライフサイクル設定は、オブジェクトの存続期間中に適用する操作を定義するライフサイクルルールの集まりです。

たとえば、90 日後にオブジェクトを削除するルールや、30 日後に Infrequent Access ストレージへ移行するルールを作成できます。

動作

  • オブジェクトは、通常 x-amz-expiration の値から 24 時間以内にバケットから削除されます。
  • オブジェクトを削除するライフサイクル設定を適用すると、新規アップロードの x-amz-expiration はすぐ新しいルールに基づく期限を反映します。既存オブジェクトには遅れが出ることがあります。ほとんどのオブジェクトは 24 時間以内に移行しますが、バケット内のオブジェクト数によってはさらに時間がかかることがあります。移行中は、以前の設定のルールが残って見えることがあります。
  • 削除されたオブジェクトは、課金対象ではなくなります。
  • バケットには、開始から 7 日後にマルチパートアップロードを期限切れにするデフォルトのライフサイクルルールがあります。
  • オブジェクトを Standard ストレージから Infrequent Access ストレージへ移行すると、Class A 操作 が発生します。
  • ルールが衝突し、24 時間以内にストレージクラスの移行と期限切れ(削除)の両方を指定している場合は、期限切れ(または削除)のライフサイクル移行がストレージクラスの移行より優先されます。

バケットのライフサイクルルールを設定する

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

  • オブジェクトライフサイクルのルール数は、現在最大 1,000 件です。
  • オブジェクトライフサイクルの管理はバケット単位の操作です。Workers R2 Storage Write 権限グループを持つ API トークンが必要です。

ダッシュボード

  1. Cloudflare ダッシュボードで、R2 オブジェクトストレージ のページを開きます。

    Overview を開く ↗
  2. 一覧から対象のバケットを探して選択します。

  3. バケットのページで 設定 を選択します。

  4. オブジェクトライフサイクルルールルールを追加 を選択します。

  5. 新しいルールの項目を入力します。

  6. 完了したら 変更を保存 を選択します。

Wrangler

  1. npm をインストールします。
  2. Wrangler(Developer Platform CLI) をインストールします。
  3. wrangler login コマンド で Wrangler にログインします。
  4. r2 bucket lifecycle add コマンド を実行し、バケットにライフサイクルルールを追加します。
npx wrangler r2 bucket lifecycle add <BUCKET_NAME> [OPTIONS]

または、r2 bucket lifecycle set コマンド で、JSON ファイルからバケットのライフサイクル設定全体を設定できます。

npx wrangler r2 bucket lifecycle set <BUCKET_NAME> --file <FILE_PATH>

JSON ファイルは、put object lifecycle configuration API のリクエスト本文と同じ形式にしてください。

S3 API

用途ごとにルールを分けたライフサイクル設定(ライフサイクルルールの集まり)の設定例です。

R2 とやり取りする S3 クライアントを設定するjs
const client = new S3({
	endpoint: "https://<account_id>.r2.cloudflarestorage.com",
	credentials: {
		accessKeyId: "<access_key_id>",
		secretAccessKey: "<access_key_secret>",
	},
	region: "auto",
});
バケットのライフサイクル設定を書き込むjavascript
await client
	.putBucketLifecycleConfiguration({
		Bucket: "testBucket",
		LifecycleConfiguration: {
			Rules: [
				// Example: deleting objects on a specific date
				// Delete 2019 documents in 2024
				{
					ID: "Delete 2019 Documents",
					Status: "Enabled",
					Filter: {
						Prefix: "2019/",
					},
					Expiration: {
						Date: new Date("2024-01-01"),
					},
				},
				// Example: transitioning objects to Infrequent Access storage by age
				// Transition objects older than 30 days to Infrequent Access storage
				{
					ID: "Transition Objects To Infrequent Access",
					Status: "Enabled",
					Transitions: [
						{
							Days: 30,
							StorageClass: "STANDARD_IA",
						},
					],
				},
				// Example: deleting objects by age
				// Delete logs older than 90 days
				{
					ID: "Delete Old Logs",
					Status: "Enabled",
					Filter: {
						Prefix: "logs/",
					},
					Expiration: {
						Days: 90,
					},
				},
				// Example: abort all incomplete multipart uploads after a week
				{
					ID: "Abort Incomplete Multipart Uploads",
					Status: "Enabled",
					AbortIncompleteMultipartUpload: {
						DaysAfterInitiation: 7,
					},
				},
				// Example: abort user multipart uploads after a day
				{
					ID: "Abort User Incomplete Multipart Uploads",
					Status: "Enabled",
					Filter: {
						Prefix: "useruploads/",
					},
					AbortIncompleteMultipartUpload: {
						// For uploads matching the prefix, this rule will take precedence
						// over the one above due to its earlier expiration.
						DaysAfterInitiation: 1,
					},
				},
			],
		},
	})
	.promise();

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

Wrangler

バケットに紐づくライフサイクルルールの一覧を取得するには、r2 bucket lifecycle list コマンド を実行します。

npx wrangler r2 bucket lifecycle list <BUCKET_NAME>

S3 API

import S3 from "aws-sdk/clients/s3.js";

// Configure the S3 client to talk to R2.
const client = new S3({
	endpoint: "https://<account_id>.r2.cloudflarestorage.com",
	credentials: {
		accessKeyId: "<access_key_id>",
		secretAccessKey: "<access_key_secret>",
	},
	region: "auto",
});

// Get lifecycle configuration for bucket
console.log(
	await client
		.getBucketLifecycleConfiguration({
			Bucket: "bucketName",
		})
		.promise(),
);

バケットからライフサイクルルールを削除する

ダッシュボード

  1. Cloudflare ダッシュボードで、R2 オブジェクトストレージ のページを開きます。

    Overview を開く ↗
  2. 一覧から対象のバケットを探して選択します。

  3. バケットのページで 設定 を選択します。

  4. オブジェクトライフサイクルルール で、削除するルールを選択します。

  5. 完了したら ルールを削除 を選択します。

Wrangler

バケットから特定のライフサイクルルールを削除するには、r2 bucket lifecycle remove コマンド を実行します。

npx wrangler r2 bucket lifecycle remove <BUCKET_NAME> --id <RULE_ID>

S3 API

import S3 from "aws-sdk/clients/s3.js";

// Configure the S3 client to talk to R2.
const client = new S3({
	endpoint: "https://<account_id>.r2.cloudflarestorage.com",
	credentials: {
		accessKeyId: "<access_key_id>",
		secretAccessKey: "<access_key_secret>",
	},
	region: "auto",
});

// Delete lifecycle configuration for bucket
await client
	.deleteBucketLifecycle({
		Bucket: "bucketName",
	})
	.promise();

役に立ちましたか?