<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

aws s3 cp testfile.txt s3://<имя_бакета>/ --endpoint-url https://s3.timeweb.cloud

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

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

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

aws s3 cp testfile.txt s3://<имя_бакета>/ --endpoint-url https://s3.timeweb.cloud

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

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

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

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

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

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

Работа с версиями объектов

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

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

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

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

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

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

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

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

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

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

Где:

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

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

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

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

Где:

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

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

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

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

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

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

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

Чтобы старые версии файлов не накапливались, можно настроить жизненный цикл объектов.

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

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

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

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

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

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

aws s3api get-bucket-lifecycle-configuration --bucket <имя_бакета> --endpoint-url https://s3.timeweb.cloud
Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев