Устранение ошибки 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\>