跳转到内容
搜索文档

对象生命周期

最后更新 查看 MarkdownAgent 设置

对象生命周期决定上传到存储桶的对象的保留期,并允许指定对象何时从 Standard 存储过渡到 Infrequent Access 存储。

生命周期配置是生命周期规则集合,定义对象在其生命周期内应应用的操作。

例如,您可以创建对象生命周期规则,在 90 天后删除对象,或设置规则在 30 天后将对象过渡到 Infrequent Access 存储。

行为

  • 对象通常在 x-amz-expiration 值后的 24 小时内从存储桶中移除。
  • 应用删除对象的生命周期配置时,新上传对象的 x-amz-expiration 值会立即反映基于新规则的过期时间,但现有对象可能有延迟。大多数对象会在 24 小时内过渡,但取决于存储桶中的对象数量可能需要更长时间。对象迁移期间,您可能看到先前配置的旧规则。
  • 对象删除后不再计费。
  • 存储桶有默认生命周期规则,在发起后 7 天过期分片上传。
  • 对象从 Standard 存储过渡到 Infrequent Access 存储时,会产生 Class A 操作费用。
  • 当规则冲突且在同一 24 小时内同时指定存储类别过渡和过期(删除)过渡时,过期(删除)生命周期过渡优先于存储类别过渡。

为存储桶配置生命周期规则

创建对象生命周期规则时,可以指定其适用的前缀。

  • 注意对象生命周期目前最多 1000 条规则。
  • 管理对象生命周期是存储桶级操作,需要具有 Workers R2 Storage Write 权限组的 API 令牌。

仪表板

  1. 在 Cloudflare 仪表板中,前往 R2 object storage(R2 对象存储) 页面。

    Go to Overview ↗
  2. 从列表中找到并选择您的存储桶。

  3. 在存储桶页面,选择 Settings(设置)

  4. Object Lifecycle Rules(对象生命周期规则) 下,选择 Add rule(添加规则)

  5. 填写新规则的字段。

  6. 完成后,选择 Save changes(保存更改)

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

以下是配置生命周期配置(生命周期规则集合)的示例,包含不同用例的不同规则集。

Configure the S3 client to interact with R2js
const client = new S3({
	endpoint: "https://<account_id>.r2.cloudflarestorage.com",
	credentials: {
		accessKeyId: "<access_key_id>",
		secretAccessKey: "<access_key_secret>",
	},
	region: "auto",
});
Set the lifecycle configuration for a bucketjavascript
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 object storage(R2 对象存储) 页面。

    Go to Overview ↗
  2. 从列表中找到并选择您的存储桶。

  3. 在存储桶页面,选择 Settings(设置)

  4. Object lifecycle rules(对象生命周期规则) 下,选择要删除的规则。

  5. 完成后,选择 Delete rule(s)(删除规则)

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();

这篇文档对您有帮助吗?