Это мой единственный вариант или есть более быстрый способ?
# Delete contents in bucket (takes a long time on large bucket)
gsutil -m rm -r gs://my-bucket/*
# Remove bucket
gsutil rb gs://my-bucket/
Это мой единственный вариант или есть более быстрый способ?
# Delete contents in bucket (takes a long time on large bucket)
gsutil -m rm -r gs://my-bucket/*
# Remove bucket
gsutil rb gs://my-bucket/
Ведра должны быть пустыми, прежде чем они будут удалены. Поэтому, прежде чем вы сможете удалить корзину, вы должны удалить все содержащиеся в ней объекты.
Вы можете сделать это с помощью gsutil rm -r
(документация). Просто не передавайте подстановочный знак *
и он удалит саму корзину после того, как удалит все объекты.
gsutil -m rm -r gs://my-bucket
Списки объектов Google Cloud Storage в конечном итоге становятся согласованными, и удаление сегмента не может быть успешно выполнено, пока список сегментов не вернет 0 объектов. Поэтому иногда может потребоваться некоторое время, чтобы корзина выглядела пустой после удаления всех объектов. В этом случае вы можете получить ошибку Bucket Not Empty (или в случае пользовательского интерфейса "Bucket Not Ready") при попытке удалить корзину.
Решение состоит в том, чтобы повторить попытку удаления, и gsutil
имеет встроенную логику gsutil
попыток для этого.
Другой вариант - включить управление жизненным циклом в корзине. Вы можете указать Age
0 дней, а затем подождать пару дней. Все ваши объекты должны быть удалены.
Используя клиент Python, вы можете принудительно удалить сценарий, используя:
bucket.delete(force=True)
Попробуйте подобную вещь на вашем нынешнем языке.
Используйте это, чтобы установить соответствующее правило жизненного цикла. например подожди день.
https://cloud.google.com/storage/docs/gsutil/commands/lifecycle
Пример (внимательно прочитайте перед копированием)
gsutil lifecycle set [LIFECYCLE_CONFIG_FILE] gs://[BUCKET_NAME]
Пример (внимательно прочитайте перед копированием)
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 1}
}
]
}
Затем удалите ведро.
Это приведет к удалению данных асинхронно, поэтому вам не нужно сохранять какая-то фоновая работа на вашем конце.
Это заслуживает того, чтобы подвести итог и указать.
Удаление с помощью gsutil rm происходит медленно, если у вас много данных (терабайт)
gsutil -m rm -r gs://my-bucket
Однако вы можете указать срок годности для корзины и позволить GCS сделать всю работу за вас. Создайте политику fast-delete.json
:
{
"rule":[
{
"action":{
"type":"Delete"
},
"condition":{
"age":0
}
}
]
}
затем применить
gsutil lifecycle set fast-delete.json gs://MY-BUCKET
Спасибо, @jterrace и @Janosch
Удалите ведро из Консоли разработчика. Он попросит подтверждение перед удалением непустого ведра. Он работает как шарм;)
Короче один вкладыш для изменения жизненного цикла:
gsutil lifecycle set <(echo '{"rule":[{"action":{"type":"Delete"},"condition":{"age":0}}]}') gs://MY-BUCKET
Мне также повезло: я создал пустое ведро, а затем начал передачу в ведро, которое я хочу вылить. Нашему большому ведру потребовалось около часа, чтобы опустошить этот путь; метод жизненного цикла, кажется, занимает по крайней мере один день.