Цифровые океанские пространства | Добавить дату истечения срока действия для файлов с помощью s3cmd

Я пытаюсь добавить дни истечения срока действия в файл и ведро, но у меня есть эта проблема:

sudo s3cmd expire s3://<my-bucket>/ --expiry-days=3 expiry-prefix=backup

ОШИБКА: ошибка синтаксического анализа xml: синтаксическая ошибка: строка 1, столбец 0 ОШИБКА: не найдено ОШИБКА: ошибка S3: 404 (не найдено)

и это

sudo s3cmd expire s3://<my-bucket>/<folder>/<file> --expiry-day=3

ОШИБКА: проблема с параметром: ожидается S3 URI только с именем корзины вместо «s3:////»

Как добавить дни истечения срока действия в DO Spaces для папки или файла с помощью s3cmd?


person Dmytro    schedule 09.10.2017    source источник


Ответы (3)


Рассмотрите возможность настройки правил жизненного цикла Bucket.

Правила жизненного цикла можно использовать для выполнения различных действий над объектами в Пространстве в течение их жизни. Например, Пространство может быть настроено таким образом, что срок действия объектов в нем истекает, и они автоматически удаляются через определенный промежуток времени.

Чтобы настроить новые правила жизненного цикла, отправьте PUT запрос на ${BUCKET}.${REGION}.digitaloceanspaces.com/?lifecycle

Тело запроса должно включать XML-элемент с именем LifecycleConfiguration, содержащий список Rule объектов.

https://developers.digitalocean.com/documentation/spaces/#get-bucket-lifecycle

person Vitalii Zurian    schedule 08.04.2018

Опция expire не реализована в Digital Ocean Spaces.

person Disova    schedule 14.12.2017
comment
Да, я знаю) Спасибо! - person Dmytro; 15.12.2017

Спасибо ответу Виталия за указание на API.

Однако API не очень прост в использовании, поэтому я сделал это с помощью скрипта NodeJS.

Прежде всего, сгенерируйте ключи API здесь: https://cloud.digitalocean.com/account/api/tokens

И поместите их в ~/.aws/credentials файл (согласно документам):

[default]
aws_access_key_id=your_access_key
aws_secret_access_key=your_secret_key

Теперь создайте пустой проект NodeJS, запустите npm install aws-sdk и используйте следующий скрипт:

const aws = require('aws-sdk');

// Replace with your region endpoint, nyc1.digitaloceanspaces.com for example
const spacesEndpoint = new aws.Endpoint('fra1.digitaloceanspaces.com');
// Replace with your bucket name
const bucketName = 'myHeckingBucket';

const s3 = new aws.S3({endpoint: spacesEndpoint});
s3.putBucketLifecycleConfiguration({
    Bucket: bucketName,
    LifecycleConfiguration: {
        Rules: [{
            ID: "autodelete_rule",
            Expiration: {Days: 30},
            Status: "Enabled",
            Prefix: '/', // Unlike AWS in DO this parameter is required
        }]
    }
}, function (error, data) {
    if (error) 
        console.error(error);
    else
        console.log("Successfully modified bucket lifecycle!");
});
person Dima Rostopira    schedule 30.12.2020