[Документация Yandex Cloud](../../../index.md) > [Yandex Object Storage](../../index.md) > [Пошаговые инструкции](../index.md) > Бакеты > Управление жизненными циклами объектов

# Управление жизненными циклами объектов в бакете

Object Storage позволяет управлять [жизненными циклами объектов](../../concepts/lifecycles.md) в бакете.

Раз в сутки к жизненным циклам применяются изменения, актуальные на момент 00:00 UTC. Операция выполняется в течение нескольких часов.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
  1. Перейдите в сервис **Object Storage**.
  1. Выберите бакет, для которого хотите настроить жизненные циклы объектов.
  1. На панели слева выберите ![image](../../../_assets/console-icons/wrench.svg) **Настройки**.
  1. Выберите вкладку **Жизненный цикл**.
  1. Нажмите **Настроить**.
  1. Заполните открывшуюся форму. Вы можете добавлять, удалять и редактировать правила конфигурации.

     Чтобы создать правило:
     
     1. Включите опцию **Статус**. При помощи этой опции вы можете включить или выключить правило, не удаляя его из конфигурации.
     1. Заполните поля:
        * **Описание** — опишите правило в произвольной форме.
        * **Префикс** — часть [ключа](../../concepts/object.md#key) объекта необходимой длины, взятая от его начала. По префиксу отбираются объекты, попадающие под действие правила. Если под действие правила должны попадать все объекты, оставьте поле пустым.
        * **Добавить метку** — правило срабатывает для всех объектов c указанными [метками](../../concepts/tags.md).
        * **Максимальный размер в байтах** — правило срабатывает для всех объектов, размер которых меньше указанного.
        * **Минимальный размер в байтах** — правило срабатывает для всех объектов, размер которых больше указанного.
     1. Выберите и настройте нужные типы действий, выполняемые с объектами при срабатывании правила:
        * `Expiration` — удаление любых объектов из бакета:
     
          * `Количество дней` — срабатывает через указанное в поле **Срок срабатывания** количество дней после загрузки объекта.
          * `Точная дата` — срабатывает в дату, указанную в поле **Дата срабатывания**.
          * `Маркер удаления без нетекущих версий` — удаляет маркер удаления, для которого больше не существует неактуальных версий объекта.
     
          Для бакетов со включенным [версионированием](versioning.md) действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `NoncurrentVersionExpiration`.
     
        * `Transition` — перемещение любых объектов из стандартного (`STANDARD`) в холодное (`COLD`) или ледяное (`ICE`) хранилище, а также из холодного в ледяное хранилище:
     
          * `Количество дней` — срабатывает через указанное в поле **Срок срабатывания** количество дней после загрузки объекта.
          * `Точная дата` — срабатывает в дату, указанную в поле **Дата срабатывания**.
          * **Класс хранилища** — тип хранилища, в которое будут перемещены объекты.
     
          Для бакетов со включенным версионированием действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `NoncurrentVersionTransition`.
     
        * `NoncurrentVersionExpiration` — удаление нетекущих версий объектов из бакета. Срабатывает через указанное в поле **Срок срабатывания** количество дней после того, как версия объекта стала нетекущей.
        * `NoncurrentVersionTransition` — перемещение нетекущих версий объектов из стандартного (`STANDARD`) в холодное (`COLD`) или ледяное (`ICE`) хранилище, а также из холодного в ледяное хранилище:
          * **Срок срабатывания** — количество дней, через которое сработает правило после того, как версия объекта стала нетекущей.
          * **Класс хранилища** — тип хранилища, в которое будут перемещены объекты.
     
        * `AbortIncompleteMultipartUpload` — удаление всех частей незавершенных составных загрузок из бакета. Срабатывает через указанное в поле **Срок срабатывания** количество дней после загрузки объекта.
     
     1. Нажмите **Сохранить**.
     
     Вы можете добавить одновременно несколько правил. Чтобы добавить новое правило нажмите **Добавить правило** и повторите шаги инструкции, указанные выше.

     Дополнительную информацию смотрите в разделе [Конфигурация жизненных циклов объектов в бакете](../../s3/api-ref/lifecycles/xml-config.md).

  {% note tip %}

  Чтобы удалить правило или всю конфигурацию жизненных циклов:
  1. На вкладке **Жизненный цикл** нажмите **Настроить**.
  1. Напротив правила, которое вы хотите удалить, нажмите ![image](../../../_assets/console-icons/ellipsis.svg) и выберите ![image](../../../_assets/console-icons/trash-bin.svg) **Удалить**.

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

  1. Нажмите **Сохранить**.

  {% endnote %}

- Yandex Cloud CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  1. Опишите конфигурацию жизненных циклов объектов в формате JSON. Например:

      ```json
      {
        "lifecycleRules": [
          {
            "id": "DeleteOldBackups",
            "enabled": true,
            "filter": {
              "prefix": "backup/"
            },
            "transitions": [
              {
                "date": "2025-01-01T00:00:00Z",
                "storage_class": "ICE"
              }
            ],
            "expiration": {
              "days": "180"
            }
          }
        ]
      }
      ```

      Возможные параметры конфигурации:
      * `id` —  уникальный идентификатор правила. Должен быть меньше или равен 255 символам. Необязательный параметр.
      * `enabled` — состояние правила. Обязательный параметр.
      * `filter` — фильтр объектов. Необязательный параметр. Может содержать не более одного элемента каждого типа:

          * `prefix` — префикс [ключа](../../concepts/object.md#key) объекта, идентифицирующий один или несколько объектов, к которым применяется правило. Под действие правила попадают объекты с указанным префиксом ключа. Необязательный параметр.
          * `objectSizeGreaterThan` — минимальный размер объекта в байтах. Под действие правила попадают объекты, размер которых больше указанного. Необязательный параметр.
          * `objectSizeLessThan` — максимальный размер объекта в байтах. Под действие правила попадают объекты, размер которых меньше указанного. Необязательный параметр.
          * `tag` — [метка](../../concepts/tags.md#object-tags) объекта. Необязательный параметр. Под действие правила попадают объекты, которым присвоена указанная метка. Передается в виде записи, содержащей две пары значений, например:

              ```json
              "tag": [{"key": "some_key", "value": "some_value"}]
              ```

          * `andOperator` — логический оператор **И** (`AND`) для фильтров. Необязательный параметр. Используйте этот фильтр, чтобы сочетать в одном правиле фильтрацию по префиксу, размеру или меткам объекта. С помощью логического оператора `andOperator` вы можете настроить фильтрацию одновременно по нескольким меткам. Для этого в ключе `tag` передайте метки в виде массива объектов, содержащих по две пары значений.
          
              Пример фильтра с логическим оператором **И** (`AND`):

              ```json
              "filter": {
                "andOperator": {
                  "prefix": "backup/",
                  "tag": [
                    {
                      "key": "key_1",
                      "value": "value_1"
                    },
                    {
                      "key": "key_2",
                      "value": "value_2"
                    }
                  ],
                  "objectSizeGreaterThan": "16",
                  "objectSizeLessThan": "1024"
                }
              }
              ```

          Если фильтр объектов не задан, под действие правила попадают все объекты в бакете.

      * `transitions` — параметр правила для изменения класса хранилища любых объектов со стандартного (`STANDARD`) на холодное (`COLD`, `STANDARD_IA`) или ледяное (`ICE`) и с холодного на ледяное. Необязательный параметр. Может содержать:
          * `date` — дата, после которой вы хотите, чтобы действие вступило в силу. Формат — [ISO 8601](https://ru.wikipedia.org/wiki/ISO_8601), например `YYYY-MM-DDT00:00:00Z`. Время — всегда 00:00 UTC. Ключ `date` нельзя использовать одновременно с ключом `days`. Необязательный параметр.
          * `days` — количество дней после создания объекта, когда действие правила вступает в силу. Минимальное значение — `1`. Ключ `days` нельзя использовать одновременно с ключом `date`. Необязательный параметр.
          * `storage_class` — класс хранилища, в который будет перенесен объект. Может быть `COLD`, `STANDARD_IA`, `ICE`. Обязательный параметр.

          Передается в виде массива, например:

          ```json
          "transitions": [{ "days": "<количество_дней>", "storage_class": "<класс_хранилища>" }]
          ```

          Для бакетов со включенным [версионированием](versioning.md) действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `noncurrent_transitions`.

      * `expiration` — параметр правила для удаления любых объектов. Необязательный параметр. Может содержать:
          * `date` — дата, после которой вы хотите, чтобы действие вступило в силу. Формат — [ISO 8601](https://ru.wikipedia.org/wiki/ISO_8601), например `YYYY-MM-DDT00:00:00Z`. Время — всегда 00:00 UTC. Ключ `date` нельзя использовать одновременно с ключом `days`. Необязательный параметр.
          * `days` — количество дней после создания объекта, когда действие правила вступает в силу. Минимальное значение — `1`. Ключ `days` нельзя использовать одновременно с ключом `date`. Необязательный параметр.
          * `expired_object_delete_marker` — удаляет маркер удаления, для которого больше не существует неактуальных версий объекта. Принимает значения `true` или `false`. Необязательный параметр.

          Для бакетов со включенным версионированием действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `noncurrent_expiration`.

      * `noncurrent_transitions` — параметр правила для изменения класса хранилища неактивных версий объектов со стандартного (`STANDARD`) на холодное (`COLD`, `STANDARD_IA`) или ледяное (`ICE`) и с холодного на ледяное. Необязательный параметр. Может содержать:
          * `noncurrent_days` — количество дней до перехода. Минимальное значение — `1`. Обязательный параметр.
          * `storage_class` — класс хранилища, в который будет перенесен объект. Может быть `COLD`, `STANDARD_IA`, `ICE`. Обязательный параметр.
      * `noncurrent_expiration` — параметр правила для удаления неактивных версий объектов. Необязательный параметр. Может содержать:
          * `noncurrent_days` — количество дней истечения срока действия. Минимальное значение — `1`. Обязательный параметр.
      * `abort_incomplete_multipart_upload` — параметр правила для удаления всех частей составных загрузок, не завершенных за указанное количество дней. Необязательный параметр. Может содержать:
          * `days_after_expiration` — количество дней после загрузки объекта. Минимальное значение — `1`. Обязательный параметр.
      * `noncurrent_delete_markers` — параметр правила для удаления [неактивных маркеров удаления](*noncurrent-delete-markers). Необязательный параметр. Может содержать:
          * `noncurrent_days` — действие правила вступает в силу спустя заданное в этом параметре количество дней с момента пометки версии объекта маркером удаления. Минимальное значение — `0`. При значении `0` будут удалены все неактивные маркеры удаления, существующие в бакете на данный момент. Обязательный параметр.

          {% note warning %}
          
          Неактивные маркеры удаления `NoncurrentDeleteMarkers` являются расширением Object Storage и поддерживаются только инструментами [Yandex Cloud CLI](lifecycles.md#cli_1), [Yandex Cloud REST](../../api-ref/Bucket/update.md#yandex.cloud.storage.v1.LifecycleRule.NoncurrentDeleteMarkers) и [Yandex Cloud gRPC](../../api-ref/grpc/Bucket/update.md#yandex.cloud.storage.v1.LifecycleRule.NoncurrentDeleteMarkers). При использовании сторонних инструментов, например AWS CLI, могут возникать ошибки во время просмотра или редактирования конфигурации жизненных циклов.
          
          {% endnote %}

      Необходимо указать хотя бы один из параметров `transitions`, `expiration`, `noncurrent_transitions`, `noncurrent_expiration`, `abort_incomplete_multipart_upload`.

      Сохраните готовую конфигурацию в файле, например `lifecycles.json`.

  1. Посмотрите описание команды CLI для изменения бакета:

      ```bash
      yc storage bucket update --help
      ```

  1. Получите список бакетов в каталоге по умолчанию:
     
     ```bash
     yc storage bucket list
     ```
     
     Результат:
     
     ```text
     +------------------+----------------------+-------------+-----------------------+---------------------+
     |       NAME       |      FOLDER ID       |  MAX SIZE   | DEFAULT STORAGE CLASS |     CREATED AT      |
     +------------------+----------------------+-------------+-----------------------+---------------------+
     | first-bucket     | b1gmit33ngp6******** | 53687091200 | STANDARD              | 2022-12-16 13:58:18 |
     +------------------+----------------------+-------------+-----------------------+---------------------+
     ```   
  1. Сохраните имя бакета (`NAME`), в котором нужно настроить жизненные циклы объектов.
  1. Выполните следующую команду:

      ```bash
      yc storage bucket update \
        --name <имя_бакета> \
        --lifecycle-rules-from-file <путь_к_файлу_конфигурации>
      ```

      Где:

      * `--name` — имя бакета, в котором нужно настроить жизненные циклы.
      * `--lifecycle-rules-from-file` — путь к файлу c конфигурацией жизненных циклов.

      Конфигурация, указанная в команде, перезаписывает настройки жизненных циклов, которые уже есть у бакета. Получить текущие настройки можно с помощью команды `yc storage bucket get <имя_бакета> --full`.

  Чтобы удалить конфигурацию жизненных циклов, выполните команду:

  ```bash
  yc storage bucket update \
    --name <имя_бакета> \
    --remove-lifecycle-rules
  ```

- AWS CLI {#aws-cli}

  Чтобы загрузить конфигурацию с помощью [AWS CLI](../../tools/aws-cli.md):

  1. Опишите конфигурацию жизненных циклов объектов в формате JSON. Например:

      ```json
      {
        "Rules": [
          {
            "ID": "DeleteOldBackups",
            "Filter": {
              "Prefix": "backup/"
            },
            "Status": "Enabled",
            "Transitions": [
              {
                "Date": "2025-01-01",
                "StorageClass": "ICE"
              }
            ],
            "Expiration": {
              "Days": 180
            }
          }
        ]
      }
      ```

      Возможные параметры конфигурации:
      * `ID` —  уникальный идентификатор правила. Должен быть меньше или равен 255 символам. Необязательный параметр.
      * `Filter` — фильтр объектов. Необязательный параметр. Может содержать не более одного элемента каждого типа:

          * `Prefix` — префикс [ключа](../../concepts/object.md#key) объекта. Под действие правила попадают объекты с указанным префиксом ключа. Необязательный параметр.
          * `ObjectSizeGreaterThan` — минимальный размер объекта в байтах. Под действие правила попадают объекты, размер которых больше указанного. Необязательный параметр.
          * `ObjectSizeLessThan` — максимальный размер объекта в байтах. Под действие правила попадают объекты, размер которых меньше указанного. Необязательный параметр.
          * `Tag` — [метка](../../concepts/tags.md#object-tags) объекта. Необязательный параметр. Под действие правила попадают объекты, которым присвоена указанная метка. Передается в виде записи, содержащей две пары значений, например:

              ```json
              "Tag": [{"Key": "some_key", "Value": "some_value"}]
              ```

          * `And` — логический оператор **И** (`AND`) для фильтров. Необязательный параметр. Используйте этот фильтр, чтобы сочетать в одном правиле фильтрацию по префиксу, размеру или меткам объекта. С помощью логического оператора `And` вы можете настроить фильтрацию одновременно по нескольким меткам. Для этого в ключе `Tags` передайте метки в виде массива объектов, содержащих по две пары значений.
          
              Пример фильтра с логическим оператором **И** (`AND`):

              ```json
              "Filter": {
                "And": {
                  "Prefix": "backup/",
                  "Tags": [
                    {
                      "Key": "key_1",
                      "Value": "value_1"
                    },
                    {
                      "Key": "key_2",
                      "Value": "value_2"
                    }
                  ],
                  "ObjectSizeGreaterThan": 1,
                  "ObjectSizeLessThan": 1024
                }
              }
              ```

          Если фильтр объектов не задан, под действие правила попадают все объекты в бакете.

      * `Status` — статус правила. Обязательный параметр. Значения:
          * `Enabled` — правило включено.
          * `Disabled` — правило выключено.
      * `Transitions` — параметр правила для изменения класса хранилища любых объектов со стандартного (`STANDARD`) на холодное (`COLD`, `STANDARD_IA`) или ледяное (`ICE`) и с холодного на ледяное. Необязательный параметр. Может содержать:
          * `Date` — дата, после которой изменится класс хранилища. Формат — [ISO 8601](https://ru.wikipedia.org/wiki/ISO_8601), например `YYYY-MM-DD`. Время — всегда 00:00 UTC. Ключ `Date` нельзя использовать одновременно с ключом `Days`. Необязательный параметр.
          * `Days` — количество дней с момента создания объекта, после которого изменится класс хранилища. Минимальное значение — `1`. Ключ `Days` нельзя использовать одновременно с ключом `Date`. Необязательный параметр.
          * `StorageClass` — класс хранилища, в который будет перенесен объект. Может быть `COLD`, `STANDARD_IA`, `ICE`. Обязательный параметр.

          Передается в виде массива:

          ```json
          "Transitions": [{ "Days": "<количество_дней>", "StorageClass": "<класс_хранилища>" }]
          ```

          Чтобы задать параметр `Transitions`, в файле конфигурации должен быть задан параметр `Prefix`. При этом значение `Prefix` может быть пустым (`""`).

          Для бакетов со включенным [версионированием](versioning.md) действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `NoncurrentVersionTransition`.

      * `Expiration` — параметр правила для удаления любых объектов. Необязательный параметр. Может содержать:
          * `Date` — дата, после которой объект будет удален. Формат — [ISO 8601](https://ru.wikipedia.org/wiki/ISO_8601), например `YYYY-MM-DD`. Время — всегда 00:00 UTC. Ключ `Date` нельзя использовать одновременно с ключом `Days`. Необязательный параметр.
          * `Days` — количество дней с момента создания объекта, после которого объект будет удален. Минимальное значение — `1`. Ключ `Days` нельзя использовать одновременно с ключом `Date`. Необязательный параметр.
          * `ExpiredObjectDeleteMarker` — удаляет маркер удаления, для которого больше не существует неактуальных версий объекта. Принимает значения `true` или `false`. Необязательный параметр.

          Для бакетов со включенным версионированием действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `NoncurrentVersionExpiration`.

      * `NoncurrentVersionTransitions` — параметр правила для изменения класса хранилища неактивных версий объектов со стандартного (`STANDARD`) на холодное (`COLD`, `STANDARD_IA`) или ледяное (`ICE`) и с холодного на ледяное. Необязательный параметр. Может содержать:
          * `NoncurrentDays` — количество дней до изменения класса хранилища неактивной версий объекта. Минимальное значение — `1`. Обязательный параметр.
          * `StorageClass` — класс хранилища, в который будет перенесен объект. Может быть `COLD`, `STANDARD_IA`, `ICE`. Обязательный параметр.

          Чтобы задать параметр `NoncurrentVersionTransitions`, в файле конфигурации должен быть задан параметр `Prefix`. При этом значение `Prefix` может быть пустым (`""`).
      * `NoncurrentVersionExpiration` — параметр правила для удаления неактивных версий объектов. Необязательный параметр. 

          Правило содержит обязательный параметр `NoncurrentDays` — количество дней до удаления неактивной версий объекта. Минимальное значение — `1`.
      * `AbortIncompleteMultipartUpload` — параметр правила для удаления всех частей составных загрузок, не завершенных за указанное количество дней. Необязательный параметр.

          Правило содержит обязательный параметр `DaysAfterInitiation` — количество дней с начала загрузки. Минимальное значение — `1`.

      Укажите хотя бы один из параметров `Transitions`, `Expiration`, `NoncurrentVersionTransition`, `NoncurrentVersionExpiration` или `AbortIncompleteMultipartUpload`.

      Сохраните готовую конфигурацию в файле, например `lifecycles.json`.

  1. Загрузите конфигурацию в бакет, например, в `backup-bucket`:

      ```bash
      aws s3api put-bucket-lifecycle-configuration \
        --bucket backup-bucket \
        --endpoint-url=https://storage.yandexcloud.kz \
        --lifecycle-configuration file://lifecycles.json
      ```

- Terraform {#tf}

  {% note info %}
  
  Если вы работаете с Object Storage через Terraform от имени [сервисного аккаунта](../../../iam/concepts/users/service-accounts.md), [назначьте](../../../iam/operations/sa/assign-role-for-sa.md) сервисному аккаунту нужную [роль](../../security/index.md#roles-list), например `storage.admin`, на каталог, в котором будут создаваться ресурсы.
  
  {% endnote %}

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  Получите [статические ключи доступа](../../../iam/operations/authentication/manage-access-keys.md#create-access-key) — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.

  {% note info %}
  
  Кроме статических ключей доступа для аутентификации в Object Storage можно использовать IAM-токен. Подробнее смотрите в разделе [Создание бакета](create.md) и в [документации провайдера](../../../terraform/resources/storage_object.md). 
  
  {% endnote %}

  
  {% note warning %}
  
  Для корректной работы Terraform в [регионе Казахстан](../../../overview/concepts/region.md) укажите в конфигурационном файле Terraform в блоке `provider` эндпоинты API Yandex Cloud и Object Storage: 
  
  ```hcl
  provider "yandex" {
    zone             = "kz1-a"
    endpoint         = "api.yandexcloud.kz:443"
    storage_endpoint = "https://storage.yandexcloud.kz"
  }
  ```
  
  Подробнее о настройках провайдера в разделе [Настройте провайдер](../../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider).
  
  {% endnote %}


  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

     ```hcl
     provider "yandex" {
       cloud_id  = "<идентификатор_облака>"
       folder_id = "<идентификатор_каталога>"
       zone      = "<зона_доступности>"
     }

     resource "yandex_iam_service_account" "sa" {
       name = "<имя_сервисного_аккаунта>"
     }

     // Назначение роли сервисному аккаунту
     resource "yandex_resourcemanager_folder_iam_member" "sa-admin" {
       folder_id = "<идентификатор_каталога>"
       role      = "storage.admin"
       member    = "serviceAccount:${yandex_iam_service_account.sa.id}"
     }

     // Создание статического ключа доступа
     resource "yandex_iam_service_account_static_access_key" "sa-static-key" {
       service_account_id = yandex_iam_service_account.sa.id
       description        = "static access key for object storage"
     }

     // Создание бакета
     resource "yandex_storage_bucket" "bucket" {
       bucket     = "<имя_бакета>"
       acl        = "private"
       access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
       secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key

       // Правила жизненного цикла объектов
       lifecycle_rule {
         id      = "log"
         enabled = true

         filter {
           tag {
             key   = "some_key"
             value = "some_value"
           }
         }

         transition {
           days          = 30
           storage_class = "COLD"
         }

         expiration {
           days = 90
         }
       }

       lifecycle_rule {
         id      = "backup"
         enabled = true

         filter {
           and {
             prefix = "backup/"
             tags   = {
               key1 = "value1"
               key2 = "value2"
             }
           }
         }

         expiration {
           date = "2026-12-21"
         }
       }
     }

     // Создание бакета со включенным версионированием
     resource "yandex_storage_bucket" "versioning_bucket" {
       bucket     = "<имя_бакета>"
       acl        = "private"
       access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
       secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key

       versioning {
         enabled = true
       }

       // Правила жизненного цикла объектов
       lifecycle_rule {
         enabled = true

         filter {
           prefix = "config/"
         }

         noncurrent_version_transition {
           days          = 30
           storage_class = "ICE"
         }

         noncurrent_version_expiration {
           days = 90
         }
       }
     }
     ```

     Где:

     * `bucket` — имя бакета. Обязательный параметр.
     * `access_key` — идентификатор статического ключа доступа.
     * `secret_key` — значение секретного ключа доступа.

     Параметры `lifecycle_rule`:
     * `id` — уникальный идентификатор правила. Должен быть меньше или равен 255 символам. Необязательный параметр.
     * `filter` — фильтр объектов. Необязательный параметр. Может содержать не более одного элемента каждого типа:
         * `prefix` — префикс [ключа](../../concepts/object.md#key) объекта, идентифицирующий один или несколько объектов, к которым применяется правило. Необязательный параметр.
         * `object_size_greater_than` — минимальный размер объекта в байтах. Под действие правила попадают объекты, размер которых больше указанного. Необязательный параметр.
         * `object_size_less_than` — максимальный размер объекта в байтах. Под действие правила попадают объекты, размер которых меньше указанного. Необязательный параметр.
         * `tag` — [метка](../../concepts/tags.md#object-tags) объекта. Необязательный параметр. Под действие правила попадают объекты, которым присвоена указанная метка. Передается в виде записи, содержащей две пары значений, например:

             ```hcl
             tag {
               key   = "some_key"
               value = "some_value"
             }
             ```

         * `And` — логический оператор **И** (`AND`) для фильтров. Необязательный параметр. Используйте этот фильтр, чтобы сочетать в одном правиле фильтрацию по префиксу, размеру или меткам объекта. С помощью логического оператора `And` вы можете настроить фильтрацию одновременно по нескольким меткам. Для этого в блоке `tags` передайте метки в виде пар `key = value`.

             ```hcl
             filter {
               and {
                 prefix = "backup/"
                 tags = {
                   key1 = "value1"
                   key2 = "value2"
                 }
                 object_size_greater_than = 1
                 object_size_less_than    = 1024
               }
             }
             ```

         Если фильтр объектов не задан, под действие правила попадают все объекты в бакете.

     * `enabled` — состояние правила. Обязательный параметр.
     * `abort_incomplete_multipart_upload` — параметр правила для удаления всех частей составных загрузок, не завершенных за указанное количество дней. Необязательный параметр.
     * `expiration` — параметр правила для удаления любых объектов. Для бакетов со включенным [версионированием](versioning.md) действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `noncurrent_version_expiration`. Необязательный параметр.
     * `transition` — параметр правила для изменения класса хранилища любых объектов со стандартного (`STANDARD`) на холодное (`COLD`, `STANDARD_IA`) или ледяное (`ICE`) и с холодного на ледяное. Для бакетов со включенным версионированием действие будет применяться для текущих версий объектов. Для взаимодействия с неактивными версиями объектов воспользуйтесь параметром `noncurrent_version_transition`. Необязательный параметр.
     * `noncurrent_version_expiration` — параметр правила для удаления неактивных версий объектов. Необязательный параметр.
     * `noncurrent_version_transition` — параметр правила для изменения класса хранилища неактивных версий объектов со стандартного (`STANDARD`) на холодное (`COLD`, `STANDARD_IA`) или ледяное (`ICE`) и с холодного на ледяное. Необязательный параметр.

     Необходимо указать хотя бы один из параметров `abort_incomplete_multipart_upload`, `expiration`, `transition`, `noncurrent_version_expiration`, `noncurrent_version_transition`.

     Параметры `expiration`:
     * `date` — дата, после которой вы хотите, чтобы действие вступило в силу. Параметр `date` нельзя использовать одновременно с параметром `days`. Необязательный параметр.
     * `days` — количество дней после создания объекта, когда действие правила вступает в силу. Минимальное значение — `1`. Параметр `days` нельзя использовать одновременно с параметром `date`. Необязательный параметр.
     * `expired_object_delete_marker` — удаляет маркер удаления, для которого больше не существует неактуальных версий объекта. Принимает значения `true` или `false`. Необязательный параметр.

     Параметры `transition`:
     * `date` — дата, после которой вы хотите, чтобы действие вступило в силу. Параметр `date` нельзя использовать одновременно с параметром `days`. Необязательный параметр.
     * `days` — количество дней после создания объекта, когда действие правила вступает в силу. Минимальное значение — 1. Параметр `days` нельзя использовать одновременно с параметром `date`. Необязательный параметр.
     * `storage_class` — класс хранилища, в который будет перенесен объект. Может быть `COLD`, `STANDARD_IA`, `ICE`. Обязательный параметр.

     Параметры `noncurrent_version_expiration`:
     * `days` — количество дней истечения срока действия. Минимальное значение — 1. Обязательный параметр.

     Параметры `noncurrent_version_transition`:
     * `days` — количество дней до перехода. Минимальное значение — 1. Обязательный параметр.
     * `storage_class` — класс хранилища, в который будет перенесен объект. Может быть `COLD`, `STANDARD_IA`, `ICE`. Обязательный параметр.

     Более подробная информация о ресурсах, которые вы можете создать с помощью Terraform, приведена в [документации провайдера](../../../terraform/index.md).

  1. Примените изменения:

     1. В терминале перейдите в директорию с конфигурационным файлом.
     1. Проверьте корректность конфигурации с помощью команды:
     
        ```bash
        terraform validate
        ```
     
        Если конфигурация является корректной, появится сообщение:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Выполните команду:
     
        ```bash
        terraform plan
        ```
     
        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
     1. Примените изменения конфигурации:
     
        ```bash
        terraform apply
        ```
     
     1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

     Проверить изменения можно в [консоли управления](https://kz.console.yandex.cloud).

- API {#api}

  Чтобы управлять жизненными циклами объектов в бакете, воспользуйтесь методом REST API [update](../../api-ref/Bucket/update.md) для ресурса [Bucket](../../api-ref/Bucket/index.md), вызовом gRPC API [BucketService/Update](../../api-ref/grpc/Bucket/update.md) или методом S3 API [upload](../../s3/api-ref/lifecycles/upload.md).

  Если вы используете S3 API, задайте конфигурацию жизненного цикла в [формате XML](../../s3/api-ref/lifecycles/xml-config.md).

{% endlist %}

[*noncurrent-delete-markers]: #### {#noncurrent-delete-markers}
                              
                              Неактивный маркер удаления `NoncurrentDeleteMarker` отмечает нетекущую версию объекта, которая была удалена. Такое происходит, когда поверх удаленной версии загружается новая версия объекта. Тогда объект снова становится доступным, а маркер, который отмечал удаленную версию, переходит в историю версий.