S3 на срок действия объекта - программирование

S3 на срок действия объекта

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

Java SDK, по-видимому, указывает, что это возможно, поскольку он имеет метод setExpirationTime, однако всякий раз, когда я устанавливаю дату истечения срока действия с помощью этого метода, ничего не кажется и объект никогда не истекает. Кроме того, просмотр свойств объекта через консоль aws не истекает.

Не поддерживается ли истечение срока действия файла?/Есть ли какие-то дополнительные шаги, которые мне нужно сделать, чтобы заставить его работать?/Если в течение срока действия файла не поддерживается, возможно ли исключить файл, который соответствует префиксу истечения срока действия?

Спасибо заранее!

4b9b3361

Ответ 1

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

В ведре есть одна конфигурация жизненного цикла. Конфигурация жизненного цикла может содержать до 100 правил.

Значение lifetime должно быть отличным от нуля положительным целым числом. Amazon S3 вычисляет время истечения, добавляя указанный период истечения в правиле до времени создания объекта и округления время на следующий день в полночь UTC.

Если срок действия файла не поддерживается, можно ли исключить файл, который соответствует префиксу истечения срока действия, истек?

Не похоже, что вы также можете перекрывать правила.

Следите за тем, чтобы правила не перекрывались. Например, следующая конфигурация жизненного цикла имеет правило, которое устанавливает объекты с префикс "документы" истекает через 30 дней. Конфигурация также имеет другое правило, которое устанавливает объекты с префиксом "документы/2011" на истекает через 365 дней. В этом случае Amazon S3 возвращает ошибку сообщение.

Ответ 2

Здесь альтернативный подход, который может работать в некоторых ситуациях:

Вы можете установить жизненный цикл ведра для истечения срока действия объектов через короткое количество дней (1, 7, что угодно). Затем, прежде чем истекает срок действия каждого объекта, программно продлить срок его действия, если вы еще не хотите, чтобы этот объект истекал.

Вы можете reset метку времени на объекте S3 путем "копирования" объекта с собой с инструкцией по замене класса хранения на тот же класс, что и в данный момент. Это в основном "noop", который действует как команда "touch" Linux/Unix.

Я написал статью, которая просматривает примеры команд aws-cli, демонстрирующих, как это сделать: http://alestic.com/2013/09/s3-lifecycle-extend

Ответ 3

Я увеличил время истечения, скопировав объект в себя, используя команду s3cmd. Он в основном работал как "прикосновение".

s3cmd cp s3://bucket-name/file.txt s3://bucket-name/file.txt

Ответ 4

Альтернативный способ выполнения этой задачи - использовать теги объектов.

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

Этот тег может быть именем объекта. Также у вас есть возможность создать правило для подмножества объектов, которые не имеют общего префикса.

Более подробную информацию о конфигурации жизненного цикла можно найти здесь http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html