מדריך קלאודפלייר בעברית

תיעוד 279

מחזורי חיים של אובייקטים

מחזורי חיים של אובייקטים קובעים את תקופת השמירה של אובייקטים שהועלו ל-bucket שלכם, ומאפשרים לציין מתי אובייקטים יעברו מאחסון Standard לאחסון Infrequent Access.

תצורת מחזור חיים היא אוסף של כללי מחזור חיים שמגדירים פעולות שיוחלו על אובייקטים במהלך חייהם.

לדוגמה, אפשר ליצור כלל מחזור חיים של אובייקט שמוחק אובייקטים אחרי 90 יום, או להגדיר כלל שמעביר אובייקטים לאחסון Infrequent Access אחרי 30 יום.

#התנהגות

  • אובייקטים יוסרו בדרך כלל מ-bucket בתוך 24 שעות מערך x-amz-expiration.
  • כשמוחלת תצורת מחזור חיים שמוחקת אובייקטים, הערך x-amz-expiration של אובייקטים שהועלו זה עתה משקף מיד את התפוגה לפי הכללים החדשים, אבל אובייקטים קיימים עשויים לחוות עיכוב. רוב האובייקטים יועברו בתוך 24 שעות, אבל זה עשוי לקחת יותר זמן בהתאם למספר האובייקטים ב-bucket. בזמן שהאובייקטים מועברים, ייתכן שתראו כללים ישנים שהוחלו מהתצורה הקודמת.
  • אובייקט כבר אינו ניתן לחיוב אחרי שנמחק.
  • ל-buckets יש כלל מחזור חיים ברירת מחדל שפג את תוקף העלאות multipart שבעה ימים אחרי ההתחלה.
  • כשאובייקט עובר מאחסון Standard לאחסון Infrequent Access, מתבצעת פעולת Class A.
  • כשכללים מתנגשים ומציינים גם מעבר של מחלקת אחסון וגם מעבר תפוגה בתוך תקופה של 24 שעות, מעבר מחזור החיים של התפוגה (או המחיקה) מקבל עדיפות על מעבר מחלקת האחסון.

#הגדרת כללי מחזור חיים ל-bucket

כשיוצרים כלל מחזור חיים של אובייקט, אפשר לציין לאיזו קידומת הוא יחול.

  • שימו לב שמחזורי חיים של אובייקטים מוגבלים כרגע ל-1000 כללים לכל היותר.
  • ניהול מחזורי חיים של אובייקטים הוא פעולה ברמת ה-bucket, והוא דורש אסימון API עם קבוצת ההרשאות Workers R2 Storage Write.

#Dashboard

  1. ב-dashboard של Cloudflare, עברו לעמוד R2 object storage. עברו אל Overview ↗
  2. אתרו ובחרו את ה-bucket שלכם מהרשימה.
  3. מעמוד ה-bucket, בחרו Settings.
  4. תחת Object Lifecycle Rules, בחרו Add rule.
  5. מלאו את השדות של הכלל החדש.
  6. כשתסיימו, בחרו Save changes.

#Wrangler

  1. התקינו את npm ↗︎.
  2. התקינו את Wrangler, ה-CLI של Developer Platform.
  3. התחברו אל Wrangler באמצעות הפקודה wrangler login.
  4. הוסיפו כלל מחזור חיים ל-bucket על ידי הרצת הפקודה r2 bucket lifecycle add.
npx wrangler r2 bucket lifecycle add <BUCKET_NAME> [OPTIONS]

לחלופין, אפשר להגדיר את כל תצורת מחזור החיים של bucket מקובץ JSON באמצעות הפקודה r2 bucket lifecycle set.

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

קובץ ה-JSON צריך להיות בפורמט של גוף הבקשה של ה-API put object lifecycle configuration.

#S3 API

להלן דוגמה להגדרת תצורת מחזור חיים (אוסף של כללי מחזור חיים) עם קבוצות כללים שונות למקרי שימוש אפשריים שונים.

הגדרת לקוח S3 לאינטראקציה עם R2js

import {
	S3Client,
	PutBucketLifecycleConfigurationCommand,
} from "@aws-sdk/client-s3";

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

הגדרת תצורת מחזור החיים ל-bucketjavascript

await client.send(
	new PutBucketLifecycleConfigurationCommand({
		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,
					},
				},
			],
		},
	}),
);

#קבלת כללי מחזור חיים ל-bucket

#Wrangler

כדי לקבל את רשימת כללי מחזור החיים המשויכים ל-bucket, הריצו את הפקודה r2 bucket lifecycle list.

npx wrangler r2 bucket lifecycle list <BUCKET_NAME>

#S3 API

import {
	S3Client,
	GetBucketLifecycleConfigurationCommand,
} from "@aws-sdk/client-s3";

// Configure the S3 client to talk to R2.
const client = new S3Client({
	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.send(
		new GetBucketLifecycleConfigurationCommand({
			Bucket: "bucketName",
		}),
	),
);

#מחיקת כללי מחזור חיים מה-bucket

#Dashboard

  1. ב-dashboard של Cloudflare, עברו לעמוד R2 object storage. עברו אל Overview ↗
  2. אתרו ובחרו את ה-bucket שלכם מהרשימה.
  3. מעמוד ה-bucket, בחרו Settings.
  4. תחת Object lifecycle rules, בחרו את הכללים שברצונכם למחוק.
  5. כשתסיימו, בחרו Delete rule(s).

#Wrangler

כדי להסיר כלל מחזור חיים מסוים מה-bucket, הריצו את הפקודה r2 bucket lifecycle remove.

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

#S3 API

import { S3Client, DeleteBucketLifecycleCommand } from "@aws-sdk/client-s3";

// Configure the S3 client to talk to R2.
const client = new S3Client({
	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.send(
	new DeleteBucketLifecycleCommand({
		Bucket: "bucketName",
	}),
);