Политика жизненного цикла хранится в бакете целиком, поэтому в командной строке любое изменение — это выгрузка текущей конфигурации, правка и повторное применение. Ниже разобран этот цикл, а также временное отключение правила и полное удаление политики. О создании правил читайте в статье «Как настроить правило жизненного цикла через AWS CLI».
Во всех примерах используется профиль rtcloud и эндпоинт https://s3-msk2.rtcloud.ru — подставляйте свои значения.
Просмотр действующих правил
aws s3api get-bucket-lifecycle-configuration \
--bucket <ИМЯ_БАКЕТА> \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Ответ содержит все правила бакета в том виде, в каком их хранит сервис. Ошибка NoSuchLifecycleConfiguration означает, что для бакета не задано ни одного правила, — это не сбой.
Чтобы быстро оценить состав политики, выведите только идентификаторы и статусы:
aws s3api get-bucket-lifecycle-configuration \
--bucket <ИМЯ_БАКЕТА> \
--query "Rules[*].[ID, Status]" \
--output table \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Изменение правила
Шаг 1. Выгрузите текущую конфигурацию в файл
aws s3api get-bucket-lifecycle-configuration \
--bucket <ИМЯ_БАКЕТА> \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru > lifecycle.json
Откройте файл и убедитесь, что он содержит только блок Rules. Если клиент вернул дополнительные поля, удалите их: команда применения принимает документ, в котором на верхнем уровне есть только Rules.
Шаг 2. Сохраните резервную копию
cp lifecycle.json lifecycle.json.bak
Шаг 3. Отредактируйте и примените документ целиком
Внесите правку — например, измените срок хранения с 30 дней на 60 — и примените файл:
aws s3api put-bucket-lifecycle-configuration \
--bucket <ИМЯ_БАКЕТА> \
--lifecycle-configuration file://lifecycle.json \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Важно! Правила, отсутствующие в новом документе, будут удалены из политики. Именно поэтому конфигурацию всегда правят целиком, а не отправляют одно изменённое правило.
Шаг 4. Проверьте результат
aws s3api get-bucket-lifecycle-configuration \
--bucket <ИМЯ_БАКЕТА> \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Временное отключение правила
Чтобы приостановить действие правила, удалять его не нужно — достаточно изменить статус в выгруженном файле:
"Status": "Disabled"
и применить конфигурацию заново. Правило останется в политике, но применяться не будет: настройки фильтров и сроков сохранятся, и при необходимости правило можно включить обратно одной правкой.
Удаление правил
Команда удаляет все правила бакета сразу:
aws s3api delete-bucket-lifecycle \
--bucket <ИМЯ_БАКЕТА> \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Выборочного удаления одного правила в API нет. Чтобы убрать одно правило, выгрузите конфигурацию, удалите из файла соответствующий блок и примените документ заново.
Объекты, ранее удалённые по этим правилам, не восстанавливаются: прекращается только дальнейшая автоматическая очистка.
Как убедиться, что правило работает
Правила выполняются фоново, поэтому проверить их сразу после применения нельзя. Практичный способ:
- Создайте отдельный тестовый префикс, например lifecycle-test/.
- Настройте для него правило с минимальным сроком — один день.
- Загрузите туда несколько небольших файлов.
- Через двое суток проверьте содержимое префикса командой aws s3 ls:
aws s3 ls s3://<ИМЯ_БАКЕТА>/lifecycle-test/ \
--profile rtcloud --endpoint-url https://s3-msk2.rtcloud.ru
Если файлы исчезли — механизм работает и правило составлено корректно. После проверки правило и тестовый префикс можно удалить.
Двое суток берутся с запасом: сутки составляют минимальный срок хранения, ещё до суток занимает фоновая обработка.
Изменение правил в S3 Browser
В S3 Browser выгружать и редактировать конфигурацию вручную не требуется: правила изменяются и удаляются в том же диалоге, где создаются (см. «Как настроить правило жизненного цикла через S3 Browser»).
Смотрите также:
к Работе с S3 RTCloud