Быстрый способ удаления непустого ведра Google?

Это мой единственный вариант или есть более быстрый способ?

# 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/

Ответ 1

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

Вы можете сделать это с помощью gsutil rm -r (документация). Просто не передавайте подстановочный знак * и он удалит саму корзину после того, как удалит все объекты.

gsutil -m rm -r gs://my-bucket

Списки объектов Google Cloud Storage в конечном итоге становятся согласованными, и удаление сегмента не может быть успешно выполнено, пока список сегментов не вернет 0 объектов. Поэтому иногда может потребоваться некоторое время, чтобы корзина выглядела пустой после удаления всех объектов. В этом случае вы можете получить ошибку Bucket Not Empty (или в случае пользовательского интерфейса "Bucket Not Ready") при попытке удалить корзину.

Решение состоит в том, чтобы повторить попытку удаления, и gsutil имеет встроенную логику gsutil попыток для этого.

Ответ 2

Другой вариант - включить управление жизненным циклом в корзине. Вы можете указать Age 0 дней, а затем подождать пару дней. Все ваши объекты должны быть удалены.

Ответ 3

Используя клиент Python, вы можете принудительно удалить сценарий, используя:

bucket.delete(force=True)

Попробуйте подобную вещь на вашем нынешнем языке.

Github тема, которая обсуждает это

Ответ 4

Используйте это, чтобы установить соответствующее правило жизненного цикла. например подожди день.

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}
    }
  ]
}

Затем удалите ведро.

Это приведет к удалению данных асинхронно, поэтому вам не нужно сохранять какая-то фоновая работа на вашем конце.

Ответ 5

Это заслуживает того, чтобы подвести итог и указать.

Удаление с помощью 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

Ответ 6

Удалите ведро из Консоли разработчика. Он попросит подтверждение перед удалением непустого ведра. Он работает как шарм;)

Ответ 7

Короче один вкладыш для изменения жизненного цикла:

gsutil lifecycle set <(echo '{"rule":[{"action":{"type":"Delete"},"condition":{"age":0}}]}') gs://MY-BUCKET

Мне также повезло: я создал пустое ведро, а затем начал передачу в ведро, которое я хочу вылить. Нашему большому ведру потребовалось около часа, чтобы опустошить этот путь; метод жизненного цикла, кажется, занимает по крайней мере один день.