[Документация Yandex Cloud](../../index.md) > [Yandex Cloud Registry](../index.md) > [Концепции](index.md) > Политика жизненного цикла

# Политика жизненного цикла в Yandex Cloud Registry

_Политика жизненного цикла_ — это набор правил, которые управляют хранением или удалением артефактов в [реестре](registry.md). Политики помогают автоматически удалять старые или неиспользуемые версии [артефактов](artifacts/index.md) для экономии места и снижения затрат на хранение.

Правила задаются при [создании](../operations/lifecycle-policy/create.md) политики жизненного цикла в виде [массива объектов правил](#LifecycleRule) в формате JSON.

Каждое правило в политике содержит фильтр по префиксу пути (`path_prefix`). Он определяет выборку артефактов, к которым применяется правило.

**Примеры**

Префикс | Выборка
--- | ---
`/` | Все артефакты в реестре
`/ubuntu` | Артефакты, пути которых начинаются с префикса `/ubuntu`

{% note warning %}

Правила применяются по пакетам. Если задать правило «Хранить только 10 последних версий» с `path_prefix = /` для реестра, в котором есть два пакета (например, `ubuntu` и `vault`), это правило применится к каждому пакету отдельно. В результате в каждом пакете сохранится по 10 последних версий, а не 10 версий суммарно по всем пакетам.

На количество политик жизненного цикла и количество правил в них действуют [квоты и лимиты](limits.md).

{% endnote %}

## Типы правил {#rule-types}

Правила в политике жизненного цикла:
* применяются только к артефактам, которые попали в выборку;
* определяют, какие из попавших в выборку артефактов нужно сохранить или удалить.

### KEEP — сохранение артефактов {#keep-rule}

Правила типа _KEEP_ описывают, какие артефакты нужно сохранить от удаления политикой жизненного цикла. Эти правила имеют более высокий приоритет, чем правила удаления (`HARD_DELETE` и `SOFT_DELETE`).

Возможные условия сохранения:

* **По возрасту** — сохраняет артефакты, которые моложе указанного количества дней.
* **По количеству версий** — сохраняет указанное количество последних версий артефактов (например, 5 последних версий по дате создания).

### HARD_DELETE — жесткое удаление {#hard-delete-rule}

Правило типа _HARD_DELETE_ безвозвратно удаляет артефакты, которые соответствуют условиям правила. После применения этого правила артефакты удаляются навсегда и не могут быть восстановлены.

Возможные условия удаления:

* **По возрасту** — удаляет те артефакты, которые старше указанного количества дней.
* **По количеству версий** — удаляет самые старые артефакты, если их количество превышает указанное (удаляются самые старые версии).
* **Всегда** — удаляет все артефакты.

### SOFT_DELETE — мягкое удаление {#soft-delete-rule}

Правило типа _SOFT_DELETE_ помечает артефакты для удаления, но не удаляет их сразу. Артефакты остаются в реестре в течение периода ожидания (`cooldown period`), указанного в правиле. После истечения этого периода артефакты удаляются безвозвратно.

{% note info %}

Артефакты, помеченные для мягкого удаления, продолжают тарифицироваться до истечения периода ожидания.

{% endnote %}

Условия для мягкого удаления аналогичны описанным для правила `HARD_DELETE`.

## Фильтры правил {#rule-filters}

Каждое правило содержит фильтры, которые определяют выборку артефактов, к которым применяется правило:

* **Префикс пути** (`path_prefix`) — определяет, к каким артефактам применяется правило по их пути. Если указать `/`, правило будет применяться ко всем артефактам всех пакетов в реестре. Можно указать один или несколько префиксов через запятую, например `/ubuntu,/vault`. Не поддерживает регулярные выражения (`regexp`).
* **Docker-фильтры** — позволяют дополнительно фильтровать Docker-образы по статусу тегов (с тегами, без тегов).
* **Maven-фильтры** — позволяют дополнительно фильтровать Java-артефакты по типу версии (релизные версии, снапшоты).

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

## Применение политик {#policy-execution}

Политики жизненного цикла применяются автоматически по расписанию. Обработка правил происходит ежедневно в указанное время. Изменения политик вступают в силу не сразу, а применяются при следующем запуске обработки.

Правила применяются в следующем порядке приоритета:

1. Правила `KEEP` — определяются артефакты, которые должны быть сохранены.
1. Правила `HARD_DELETE` и `SOFT_DELETE` — определяются артефакты для удаления, за исключением тех, которые защищены правилами `KEEP`.

## Объект правила (LifecycleRule) {#LifecycleRule}

Поля `keep_by_age`, `keep_by_version` и `delete` — взаимоисключающие, можно указать только одно действие в правиле.

Поле | Тип | Описание
--- | --- | ---
`path_prefix` | `string` | Префикс пути, определяющий выборку артефактов, к которым применяется правило. Если не указан, правило применяется ко всем артефактам.
`keep_by_age` | [KeepByAgeLifecycleRule](#KeepByAgeLifecycleRule) | Хранение артефактов по возрасту.
`keep_by_version` | [KeepByVersionLifecycleRule](#KeepByVersionLifecycleRule) | Хранение артефактов по количеству версий.
`delete` | [DeleteLifecycleRule](#DeleteLifecycleRule) | Удаление артефактов.
`docker_filters` | [DockerFilters](#DockerFilters) | Фильтры для правил, применяемых к Docker-образам.
`maven_filters` | [MavenFilters](#MavenFilters) | Фильтры для правил, применяемых к Java-артефактам.
`version_regexp` | `string` | Регулярное выражение для поиска версии пакета или тега Docker-образа.

### Объект KeepByAgeLifecycleRule {#KeepByAgeLifecycleRule}

Поле | Тип | Описание
--- | --- | ---
`younger_than_days` | `integer` | Хранить артефакты моложе указанного количества дней.

### Объект KeepByVersionLifecycleRule {#KeepByVersionLifecycleRule}

Поле | Тип | Описание
--- | --- | ---
`keep_versions_count` | `integer` | Хранить указанное количество версий артефакта.

### Объект DeleteLifecycleRule {#DeleteLifecycleRule}

Поля `older_than_days`, `version_condition` и `always` — взаимоисключающие, можно указать только одно условие удаления.

Поле | Тип | Описание
--- | --- | ---
`type` | `string` | Тип удаления:<ul><li>`HARD_DELETE` — удалять артефакты безвозвратно;</li><li>`SOFT_DELETE` — помечать артефакты для удаления с возможностью восстановления.</li></ul>
`cooldown_period_days` | `integer` | Период ожидания в днях перед удалением.
`older_than_days` | `integer` | Удалять артефакты старше указанного количества дней.
`version_condition` | [DeleteByVersionCondition](#dDeleteByVersionCondition) | Удаление артефактов по количеству версий.
`always` | `boolean` | Удалять все артефакты, которые попали в выборку.

### Объект DeleteByVersionCondition {#DeleteByVersionCondition}

Поле | Тип | Описание
--- | --- | ---
`versions_count_greater_than` | `integer` | Удалять артефакты, если количество версий превышает указанное число.

### Объект DockerFilters {#DockerFilters}

Поле | Тип | Описание
--- | --- | --- 
`tag_status` | `string` | Фильтровать Docker-образы по статусу тега:<ul><li>`TAG_STATUS_ANY` — любой статус;</li><li>`TAGGED` — только Docker-образы с тегами;</li><li>`UNTAGGED` — только Docker-образы без тегов.</li><ul>

### Объект MavenFilters {#MavenFilters}

Поле | Тип | Описание
--- | --- | ---
`version_type` | `string` | Фильтровать Java-артефакты по типу версии:<ul><li>`VERSION_TYPE_ANY` — любой тип;</li><li>`RELEASE` — только релизные версии;</li><li>`SNAPSHOT` — только снапшоты.</li></ul>

#### Полезные ссылки {#see-also}

* [Создание политики жизненного цикла](../operations/lifecycle-policy/create.md)
* [Настройка политик жизненного цикла](../tutorials/lifecycle-policy-examples.md)
* [Создание реестра](../operations/registry/create.md)