← Cloudflare R2 / r2 / buckets
Жизненный цикл объектов
Жизненный цикл объектов определяет срок хранения объектов, загруженных в ваш бакет, и позволяет задавать момент, когда объекты должны переходить из хранилища Standard в хранилище Infrequent Access.
Конфигурация жизненного цикла представляет собой набор правил жизненного цикла, которые определяют действия, применяемые к объектам в течение их существования.
Например, можно создать правило жизненного цикла объекта для удаления объектов через 90 дней или правило для перевода объектов в хранилище Infrequent Access через 30 дней.
Поведение
- Объекты обычно удаляются из бакета в течение 24 часов после
x-amz-expirationзначение. - Когда применяется конфигурация жизненного цикла, удаляющая объекты, у вновь загруженных объектов
x-amz-expirationзначение сразу отражает срок действия согласно новым правилам, однако для существующих объектов возможна задержка. Большинство объектов будет переведено в течение 24 часов, но это может занять больше времени в зависимости от количества объектов в бакете. Пока объекты переносятся, вы можете видеть старые применённые правила из предыдущей конфигурации. - После удаления объект перестает тарифицироваться.
- Для бакетов по умолчанию действует правило жизненного цикла, которое завершает срок действия составных загрузок через семь дней после их начала.
- Когда объект переводится из хранилища Standard в хранилище Infrequent Access, Операция класса A взимается.
- Если правила конфликтуют и в течение 24 часов задают одновременно переход класса хранения и истечение срока действия, переход жизненного цикла на истечение срока (или удаление) имеет приоритет над сменой класса хранения.
Настройка правил жизненного цикла для бакета
При создании правила жизненного цикла объекта можно указать префикс, к которому оно будет применяться.
- Обратите внимание: для жизненного цикла объектов сейчас действует ограничение в 1000 правил.
- Управление жизненным циклом объектов выполняется на уровне бакета и требует API-токена с
Workers R2 Storage Writeгруппа разрешений.
Dashboard
-
На панели управления Cloudflare перейдите к разделу Объектное хранилище R2 страницу.
Перейдите в Обзор ↗ -
Найдите свой бакет в списке и выберите его.
-
На странице бакета выберите Настройки.
-
В разделе Правила жизненного цикла объектов, выберите Добавление правила.
-
Заполните поля для нового правила.
-
Когда закончите, выберите Save changes.
Wrangler
- Установка
npm↗. - Установка Wrangler, CLI платформы разработчика.
- Войдите в Wrangler с помощью
wrangler loginкоманда. - Правило жизненного цикла добавьте в бакет, выполнив
r2 bucket lifecycle addкоманда.
npx wrangler r2 bucket lifecycle add <BUCKET_NAME> [OPTIONS]Также вы можете задать всю конфигурацию жизненного цикла бакета из файла JSON с помощью r2 bucket lifecycle set команда.
npx wrangler r2 bucket lifecycle set <BUCKET_NAME> --file <FILE_PATH>JSON-файл должен соответствовать формату тела запроса put object lifecycle configuration API.
S3 API
Ниже приведён пример настройки конфигурации жизненного цикла (набора правил жизненного цикла) с разными наборами правил для разных сценариев использования.
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: [
// 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(),
);Удалите правила жизненного цикла из бакета
Dashboard
-
На панели управления Cloudflare перейдите к разделу Объектное хранилище R2 страницу.
Перейдите в Обзор ↗ -
Найдите свой бакет в списке и выберите его.
-
На странице бакета выберите Настройки.
-
В разделе Правила жизненного цикла объектов, выберите правила, которые нужно удалить.
-
Когда закончите, выберите Удалить правило(-а).
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();