---
title: "Версионирование объектов в S3-хранилище — Timeweb Cloud"
description: "Как включить и настроить версионирование в S3-бакете Timeweb Cloud: управление версиями через панель управления и AWS CLI, восстановление и удаление версий, автоматическое удаление старых версий через политики жизненного цикла."
---

# Версионирование объектов в S3

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

В этой статье мы рассмотрим работу с версиями на примере [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli).

## Включение версионирования

Версионирование можно включить в панели управления или с помощью клиентов, например AWS CLI, S3 Browser и других.

### Через панель управления

Перейдите во вкладку «Настройки» и нажмите кнопку «Изменить» рядом с пунктом «История версий отключена».

![Image 20250905124535245](https://content.timeweb.com/assets/17baa329-b8b1-4d78-a300-0e94e992cf25.png?width=2016&height=1612)

В открывшемся окне подтвердите включение версионирования, нажав кнопку «Включить версионирование». Обратите внимание, что в дальнейшем отключить версионирование для бакета не получится — только приостановить.

### При помощи AWS CLI

Чтобы включить версионирование в S3-бакете с помощью AWS CLI, выполните команду:

```shell
aws s3api put-bucket-versioning --bucket <имя_бакета> --versioning-configuration Status=Enabled --endpoint-url https://s3.twcstorage.ru
```

Проверить, что версионирование включено, можно с помощью команды:

```shell
aws s3api get-bucket-versioning --bucket <имя_бакета> --endpoint-url https://s3.twcstorage.ru
```

Ожидаемый результат:

```js
{
    "Status": "Enabled",
    "MFADelete": "Disabled"
}
```

## Проверка работы версионирования

Разберем принцип работы версионирования на примере.

Создадим тестовый файл:

```shell
echo "Версия 1" > testfile.txt
```

Загрузим его в бакет:

```shell
aws s3 cp testfile.txt s3://<имя_бакета>/ --endpoint-url https://s3.twcstorage.ru
```

Обновим файл:

```shell
echo "Версия 2" > testfile.txt
```

Снова загрузим его:

```shell
aws s3 cp testfile.txt s3://<имя_бакета>/ --endpoint-url https://s3.twcstorage.ru
```

Теперь у файла есть несколько версий. Проверим их:

```shell
aws s3api list-object-versions --bucket <имя_бакета> --prefix testfile.txt --endpoint-url https://s3.twcstorage.ru
```

Пример результата:

```js
{
    "Versions": [
        {
            "Key": "testfile.txt",
            "VersionId": "S7hpDH6F0RYfubNoTjin6hpBu5ewDj.",
            "IsLatest": true
        },
        {
            "Key": "testfile.txt",
            "VersionId": "pdFehsuCbaPz2hNh4b9DBndfEwzjTfH",
            "IsLatest": false
        }
    ]
}
```

**Важные нюансы**:

-   Каждая версия объекта занимает место в бакете.
-   Версии объектов не отображаются в панели управления или других S3-клиентах.
-   Даже при удалении объекта все версии остаются в бакете.

## Работа с версиями в панели управления

Для просмотра списка версий в панели управления, в объектном менеджере, нажмите на три точки рядом с нужным объектом и выберите пункт «История версий».

![Image 20250905174549903](https://content.timeweb.com/assets/c87959bc-2c03-4519-abbc-dbec7f4cebb0.png?width=1534&height=1114)

В открывшемся меню при наведении на нужную версию объекта отобразится список доступных действий.

![Image 20250905175324581](https://content.timeweb.com/assets/77084325-0c2e-42d5-bf77-b26804fc8393.png?width=1174&height=644)

1.  **Ссылка на файл** — для версии объекта будет [создан presigned URL](https://timeweb.cloud/docs/s3-storage/supported-features/presigned-url).
    
2.  **Скачивание файла**.
    
3.  **Восстановление версии объекта** — позволяет сделать выбранную версию текущей.
    
4.  **Удаление версии объекта** — при нажатии на три точки появляется возможность удалить нужную версию.
    

## Работа с версиями с помощью AWS CLI

Для управления версиями объектов в S3 доступны несколько команд.

### Список версий конкретного объекта

Чтобы просмотреть все версии конкретного объекта в бакете, используйте команду:

```shell
aws s3api list-object-versions --bucket <имя_бакета> --prefix <имя_объекта> --endpoint-url https://s3.twcstorage.ru
```

### Список всех объектов с их версиями

Вывести список всех объектов в бакете вместе с их версиями можно так:

```shell
aws s3api list-object-versions --bucket <имя_бакета> --query 'Versions[*].[Key, VersionId, Size]' --endpoint-url https://s3.twcstorage.ru
```

### Скачивание определенной версии объекта

Если нужно скачать конкретную версию объекта, выполните команду:

```shell
aws s3api get-object --bucket <имя_бакета> \
                     --key testfile.txt \
                     --version-id pdFehsuCbaPz2hNh4b9DBndfEwzjTfH \
                     testlocalfile.txt \
                     --endpoint-url https://s3.twcstorage.ru
```

Где:

-   `--key` — имя объекта в бакете.
-   `--version-id` — идентификатор версии (получается из `list-object-versions`).
-   `testlocalfile.txt` — имя файла, в который будет сохранена скачанная версия.

### Восстановление определенной версии объекта

Если объект был обновлен или удален, можно восстановить его прежнюю версию, скопировав ее поверх текущей:

```shell
aws s3api copy-object --bucket <имя_бакета> \
                      --key testfile.txt \
                      --copy-source <имя_бакета>/<имя_объекта>?versionId=<id_версии> \
                      --endpoint-url https://s3.twcstorage.ru
```

Где:

-   `<имя_бакета>/<имя_объекта>` — полный путь к объекту в бакете.
-   `?versionId=<id_версии>` — версия, которую необходимо восстановить.

После выполнения команды в бакете появится новая версия объекта, которая идентична восстановленной.

### Удаление конкретной версии объекта

Чтобы удалить конкретную версию объекта, выполните команду:

```shell
aws s3api delete-object --bucket <имя_бакета> --key <имя_объекта> --version-id S7hpDH6F0RYfubNoTjin6hpBu5ewDj. --endpoint-url https://s3.twcstorage.ru
```

Где `--version-id` — ID версии объекта, которую необходимо удалить.

## Настройка автоматического удаления старых версий

Чтобы старые версии файлов не накапливались, можно настроить [жизненный цикл объектов](https://timeweb.cloud/docs/s3-storage/supported-features/object-lifecycle).

Создадим файл `lifecycle.json`:

```js
{
    "Rules": [
        {
            "ID": "DeleteOldVersions",
            "Status": "Enabled",
            "Filter": {},
            "NoncurrentVersionExpiration": {
                "NoncurrentDays": 30
            }
        }
    ]
}
```

Это правило удалит версии файлов, старше 30 дней. Текущие версии останутся нетронутыми.

Применим политики жизненного цикла:

```shell
aws s3api put-bucket-lifecycle-configuration --bucket <имя_бакета> --lifecycle-configuration file://lifecycle.json --endpoint-url https://s3.twcstorage.ru
```

Проверим, что политика применилась:

```shell
aws s3api get-bucket-lifecycle-configuration --bucket <имя_бакета> --endpoint-url https://s3.twcstorage.ru
```
