Устранение ошибки Bucket is not empty
при удалении бакета
Описание проблемы
При попытке удалить бакет появляется сообщение об ошибке Bucket is not empty
.
Решение
Для удаления каталога или бакета необходимо сначала удалить из него все объекты. Самые распространенные причины невозможности удалить бакет:
- В бакете есть незавершенные составные загрузки;
- В бакете остались загруженные объекты;
- В бакете удалены все объекты, но в нем включено версионирование и существуют старые версии удаленных объектов.
Вы можете удалить все старые версии объектов и незавершенные загрузки, настроив автоматическое удаление всех этих сущностей в правиле жизненного цикла бакета.
Примечание
Правила жизненного цикла обрабатываются в 00:00 UTC один раз в сутки.
Посмотреть и удалить незавершенные загрузки из Консоли управлени
Удаление всех объектов из бакета средствами консоли управления описано в материале по этой ссылке.
-
Наличие незавершенных составных загрузок можно проверить командой:
aws --endpoint <https://storage.yandexcloud.net> s3api list-multipart-uploads \ --bucket \<bucket_name\>
-
Удалить такие загрузки можно командой
abort-multipart-upload
:aws --endpoint <https://storage.yandexcloud.net> s3api abort-multipart-upload \ --bucket \<bucket_name\> --key \<object_key\> --upload-id \<upload_id\>
-
Наличие объектов в бакете можно проверить командой
list-objects
:aws --endpoint <https://storage.yandexcloud.net> s3api list-objects \ --bucket \<bucket_name\>
-
Удалить один объект можно командой
delete-object
:aws --endpoint <https://storage.yandexcloud.net> s3api delete-object \ --bucket \<bucket_name\> --key
-
Удалить сразу несколько объектов можно командой
delete-object
:aws --endpoint <https://storage.yandexcloud.net> s3api delete-objects \ --bucket \<bucket_name\> --delete '\{ "Objects": \[ \{ "Key": \}, \{ "Key": \}, ...\] \}'
-
Если в вашем бакете включено версионирование, то после удаления самих объектов в каталоге или бакете все еще хранятся их прошлые версии. Их тоже необходимо удалить. Увидеть старые версии можно так:
aws --endpoint <https://storage.yandexcloud.net> s3api list-object-versions \ --bucket \<bucket_name\>
-
Удалить конкретную версию объекта можно командой:
aws --endpoint <https://storage.yandexcloud.net> s3api delete-object \ --bucket \<bucket_name\> --key \<key_name\> --version-id \<version_id\>