Версионирование включается на уровне бакета и действует на все объекты в нём. Ниже — включение, проверка и приостановка через AWS CLI. О самом механизме читайте в статье «Что такое версионирование в S3».
Что потребуется
- Настроенный профиль AWS CLI (см. «Как создать профиль подключения к S3 в AWS CLI»).
- Права на изменение конфигурации бакета.
- Адрес эндпоинта вашего бакета. Во всех примерах используется https://s3-msk2.rtcloud.ru — подставляйте адрес из строки «Путь» своего бакета.
Включение версионирования
Выполните команду:
aws s3api put-bucket-versioning \
--bucket <ИМЯ_БАКЕТА> \
--versioning-configuration Status=Enabled \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Успешное выполнение ничего не выводит в консоль — это нормально. Проверьте состояние отдельной командой:
aws s3api get-bucket-versioning \
--bucket <ИМЯ_БАКЕТА> \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Ожидаемый результат:
{
"Status": "Enabled",
"MFADelete": "Disabled"
}
Пустой ответ означает, что версионирование для бакета никогда не включалось.
Проверка работы
Убедиться, что версии создаются, можно на тестовом файле.
Шаг 1. Создайте файл и загрузите его в бакет
echo "Версия 1" > testfile.txt
aws s3 cp testfile.txt s3://<ИМЯ_БАКЕТА>/ \
--profile rtcloud --endpoint-url https://s3-msk2.rtcloud.ru
Шаг 2. Измените файл и загрузите повторно под тем же именем
echo "Версия 2" > testfile.txt
aws s3 cp testfile.txt s3://<ИМЯ_БАКЕТА>/ \
--profile rtcloud --endpoint-url https://s3-msk2.rtcloud.ru
Шаг 3. Запросите список версий
aws s3api list-object-versions \
--bucket <ИМЯ_БАКЕТА> \
--prefix testfile.txt \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Пример результата:
{
"Versions": [
{
"Key": "testfile.txt",
"VersionId": "S7hpDH6F0RYfubNoTjin6hpBu5ewDj.",
"IsLatest": true
},
{
"Key": "testfile.txt",
"VersionId": "pdFehsuCbaPz2hNh4b9DBndfEwzjTfH",
"IsLatest": false
}
]
}
Поле IsLatest со значением true отмечает актуальную версию. Обычный листинг бакета покажет только один объект — версии в него не попадают.
Приостановка версионирования
Чтобы прекратить создание новых версий, выполните ту же команду со значением Suspended:
aws s3api put-bucket-versioning \
--bucket <ИМЯ_БАКЕТА> \
--versioning-configuration Status=Suspended \
--profile rtcloud \
--endpoint-url https://s3-msk2.rtcloud.ru
Ранее созданные версии сохранятся и останутся доступными для восстановления, но новые записи перестанут порождать версии. Чтобы освободить место, версии нужно удалить отдельно — вручную или правилом жизненного цикла.
Важно! Полностью отключить версионирование для бакета нельзя — его можно только приостановить.
Смотрите также:
к Работе с S3 RTCloud