Для S3 хранилища можно задать политику жизненного цикла объектов.
Политика жизненного цикла (lifecycle policy) — это XML файл с набором правил, которые задают время хранения файлов. Когда время хранения истекает, файл удаляется.
Добавить XML файл с политикой жизненного цикла объектов в хранилище можно разными способами. Варианты добавления описаны здесь.
Конфигурация правила
Общий вид XML файла:
<LifecycleConfiguration>
<Rule>
...
</Rule>
</LifecycleConfiguration>
Внутри тегов <Rule>, </Rule> нужно указать следующие элементы:
- Метаданные: ID и статус,
- Префикс (оставить пустым, политика распространяется на весь бакет),
- Условия (время хранения элемента).
ID правила
У каждого правила должен быть уникальный идентификатор. Длина ID ограничена 255 символами. Можно использовать цифры, латинские буквы, подчеркивание.
<ID>rule_identificator</ID>
Статус правила
В статусе правила может быть указано одно из двух значений: Enabled или Disabled. Если правило выключено (статус правила Disabled), указанные в нем условия не выполняются.
<Status>Enabled</Status>
Префикс
Политика применяется ко всему содержимому бакета, поэтому между тегами Prefix ничего не указывается.
<Prefix/>
Условие
Укажите, сколько дней файл должен оставаться в хранилище.
<Expiration>
<Days>1</Days>
</Expiration>
Пример добавления политики с помощью aws cli
Создаем XML файл:
- ID — one_day,
- правило распространяется на все файлы в хранилище (<Prefix/>),
- правило активно (статус Enabled),
- время хранения файлов — 1 день.
<LifecycleConfiguration>
<Rule>
<ID>one_day</ID>
<Prefix/>
<Status>Enabled</Status>
<Expiration>
<Days>1</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Если для добавления файла в хранилище вы используйте aws cli, необходимо преобразовать XML в JSON файл (сохраните его как lifecycle.json):
{
"Rules": [
{
"ID": "one_day",
"Prefix": "/",
"Status": "Enabled",
"Expiration": {
"Days": 1
}
}
]
}
Запустите терминал из директории, в которой лежил lifecycle.json и выполните команду ниже. Замените my_bucket на имя вашего бакета. Выбрать верное значение параметра --endpoint-url вам поможет эта статья.
$aws s3api put-bucket-lifecycle --bucket my_bucket --lifecycle-configuration file://lifecycle.json --endpoint-url=https://s-ed1.cloud.gcore.lu
Чтобы проверить, применилось ли правило, выполните следующую команду:
$aws s3api get-bucket-lifecycle-configuration --bucket my_bucket --endpoint-url=https://s-ed1.cloud.gcore.lu
В ответе вы получите содержимое загруженного JSON файла:
{
"Rules": [
{
"Expiration": {
"Days": 1
},
"ID": "one_day",
"Prefix": "/",
"Status": "Enabled"
}
]
}
Для удаления политики воспользуйтесь командой
aws s3api delete-bucket-lifecycle --bucket my-bucket --endpoint-url=https://s-ed1.cloud.gcore.lu
Механизм работы правил
Удаление файлов начинается примерно в 0 часов (UTC).
Политика жизненного цикла настраивается после заливки файла
Если залить файл 1-го числа (в любое время), выставить время хранения файла — 1 день, он удалится 3-го числа в 0 часов.
Политика жизненного цикла настраивается перед заливкой файла
Если время хранения файлов уже задано (1 день), залитый 2-го числа файла удалится 4-го числа в 0 часов.
Если вы залили файл и настроили время его хранение, а потом удалили эту политику, файл не удалится из хранилища.