본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

객체 라이프사이클 (Object lifecycles)

원문 보기 위키 갱신

객체 라이프사이클은 버킷에 업로드한 객체의 보관 기간을 결정하고, 객체가 Standard 스토리지에서 Infrequent Access 스토리지로 언제 전환되어야 하는지 지정할 수 있게 해줘요.

라이프사이클 구성(configuration)은 객체의 수명 동안 적용할 작업을 정의하는 라이프사이클 규칙의 모음이에요.

예를 들어 90일 후 객체를 삭제하는 객체 라이프사이클 규칙을 만들 수 있고, 30일 후 객체를 Infrequent Access 스토리지로 전환하는 규칙을 설정할 수도 있어요.

출처: 문서

본문

동작 방식 (Behavior)

  • 객체는 일반적으로 x-amz-expiration 값의 24시간 이내에 버킷에서 제거돼요.
  • 객체를 삭제하는 라이프사이클 구성이 적용되면, 새로 업로드된 객체의 x-amz-expiration 값은 새 규칙을 기준으로 한 만료를 즉시 반영하지만, 기존 객체는 지연이 발생할 수 있어요. 대부분의 객체는 24시간 내에 전환되지만 버킷의 객체 수에 따라 더 오래 걸릴 수 있어요. 객체가 이전 중에는 이전 구성에서 적용된 규칙이 보일 수 있어요.
  • 객체는 삭제된 뒤에는 더 이상 청구되지 않아요.
  • 버킷에는 멀티파트 업로드를 시작 7일 후 만료시키는 기본 라이프사이클 규칙이 있어요.
  • 객체가 Standard 스토리지에서 Infrequent Access 스토리지로 전환되면 Class A 작업이 발생해요.
  • 규칙이 충돌하여 24시간 이내에 스토리지 클래스 전환과 만료 전환을 모두 지정하는 경우, 만료(또는 삭제) 라이프사이클 전환이 스토리지 클래스 전환보다 우선해요.

버킷의 라이프사이클 규칙 구성하기 (Configure lifecycle rules for your bucket)

객체 라이프사이클 규칙을 만들 때 어떤 prefix에 적용할지 지정할 수 있어요.

  • 객체 라이프사이클은 현재 최대 1,000개 규칙으로 제한돼요.
  • 객체 라이프사이클 관리는 버킷 수준 작업이며, Workers R2 Storage Write 권한 그룹이 있는 API 토큰이 필요해요.

대시보드 (Dashboard)

  • Cloudflare 대시보드에서 R2 객체 스토리지(R2 object storage) 페이지로 이동해요. 개요(Overview)로 이동 ↗
  • 목록에서 버킷을 찾아 선택해요.
  • 버킷 페이지에서 설정(Settings) 을 선택해요.
  • 객체 라이프사이클 규칙(Object Lifecycle Rules) 아래에서 규칙 추가(Add rule) 를 선택해요.
  • 새 규칙의 필드를 작성해요.
  • 완료되면 변경 사항 저장(Save changes) 을 선택해요.

Wrangler

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 클라이언트를 구성해요.

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

버킷의 라이프사이클 구성을 설정해요.

await client
	.putBucketLifecycleConfiguration({
		Bucket: "testBucket",
		LifecycleConfiguration: {
			Rules: [
				// 예시: 특정 날짜에 객체 삭제
				// 2024년에 2019년 문서 삭제
				{
					ID: "Delete 2019 Documents",
					Status: "Enabled",
					Filter: {
						Prefix: "2019/",
					},
					Expiration: {
						Date: new Date("2024-01-01"),
					},
				},
				// 예시: 보관 기간으로 객체를 Infrequent Access 스토리지로 전환
				// 30일보다 오래된 객체를 Infrequent Access 스토리지로 전환
				{
					ID: "Transition Objects To Infrequent Access",
					Status: "Enabled",
					Transitions: [
						{
							Days: 30,
							StorageClass: "STANDARD_IA",
						},
					],
				},
				// 예시: 보관 기간으로 객체 삭제
				// 90일보다 오래된 로그 삭제
				{
					ID: "Delete Old Logs",
					Status: "Enabled",
					Filter: {
						Prefix: "logs/",
					},
					Expiration: {
						Days: 90,
					},
				},
				// 예시: 일주일 후 모든 미완료 멀티파트 업로드 중단
				{
					ID: "Abort Incomplete Multipart Uploads",
					Status: "Enabled",
					AbortIncompleteMultipartUpload: {
						DaysAfterInitiation: 7,
					},
				},
				// 예시: 하루 후 사용자 멀티파트 업로드 중단
				{
					ID: "Abort User Incomplete Multipart Uploads",
					Status: "Enabled",
					Filter: {
						Prefix: "useruploads/",
					},
					AbortIncompleteMultipartUpload: {
						// prefix와 일치하는 업로드의 경우 이 규칙이
						// 더 빠른 만료로 인해 위 규칙보다 우선합니다.
						DaysAfterInitiation: 1,
					},
				},
			],
		},
	})
	.promise();

버킷의 라이프사이클 규칙 가져오기 (Get lifecycle rules for your bucket)

Wrangler

버킷과 연결된 라이프사이클 규칙 목록을 가져오려면 r2 bucket lifecycle list 명령을 실행해요.

npx wrangler r2 bucket lifecycle list <BUCKET_NAME>

S3 API

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

// R2와 통신하도록 S3 클라이언트를 구성합니다.
const client = new S3({
	endpoint: "https://<account_id>.r2.cloudflarestorage.com",
	credentials: {
		accessKeyId: "<access_key_id>",
		secretAccessKey: "<access_key_secret>",
	},
	region: "auto",
});

// 버킷의 라이프사이클 구성을 가져옵니다.
console.log(
	await client
		.getBucketLifecycleConfiguration({
			Bucket: "bucketName",
		})
		.promise(),
);

버킷에서 라이프사이클 규칙 삭제 (Delete lifecycle rules from your bucket)

대시보드 (Dashboard)

  • Cloudflare 대시보드에서 R2 객체 스토리지(R2 object storage) 페이지로 이동해요. 개요(Overview)로 이동 ↗
  • 목록에서 버킷을 찾아 선택해요.
  • 버킷 페이지에서 설정(Settings) 을 선택해요.
  • 객체 라이프사이클 규칙(Object lifecycle rules) 아래에서 삭제할 규칙을 선택해요.
  • 완료되면 규칙 삭제(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";

// R2와 통신하도록 S3 클라이언트를 구성합니다.
const client = new S3({
	endpoint: "https://<account_id>.r2.cloudflarestorage.com",
	credentials: {
		accessKeyId: "<access_key_id>",
		secretAccessKey: "<access_key_secret>",
	},
	region: "auto",
});

// 버킷의 라이프사이클 구성을 삭제합니다.
await client
	.deleteBucketLifecycle({
		Bucket: "bucketName",
	})
	.promise();

더 알아보기 (Learn more)