Fast way of deleting non-empty Google bucket?

和自甴很熟 提交于 2020-03-17 10:00:07

问题


Is this my only option or is there a faster way?

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


Buckets are required to be empty before they're deleted. So before you can delete a bucket, you have to delete all of the objects it contains.

You can do this with gsutil rm -r (documentation). Just don't pass the * wildcard and it will delete the bucket itself after it has deleted all of the objects.

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

Google Cloud Storage object listings are eventually consistent, and the bucket delete can't succeed until the bucket listing returns 0 objects. So sometimes it can take some time for the bucket to appear empty after all of the objects are deleted. In this case, you can get a Bucket Not Empty error (or in the UI's case 'Bucket Not Ready') when trying to delete the bucket.

The solution is to retry the delete, and gsutil has built-in retry logic to do so.




回答2:


Another option is to enable Lifecycle Management on the bucket. You could specify an Age of 0 days and then wait a couple days. All of your objects should be deleted.




回答3:


Using Python client, you can force a delete within your script by using:

bucket.delete(force=True)

Try out a similar thing in your current language.

Github thread that discusses this




回答4:


Use this to set an appropriate lifecycle rule. e.g. wait for a day.

https://cloud.google.com/storage/docs/gsutil/commands/lifecycle

Example (Read carefully before copy paste)

gsutil lifecycle set [LIFECYCLE_CONFIG_FILE] gs://[BUCKET_NAME]

Example (Read carefully before copy paste)

{
  "rule":
  [
    {
      "action": {"type": "Delete"},
      "condition": {"age": 1}
    }
  ]
}

Then delete the bucket.

This will delete the data asynchronously, so you don't have to keep some background job running on your end.




回答5:


This deserves to be summarized and pointed out.

Deleting with gsutil rm is slow if you have LOTS (terabytes) of data

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

However, you can specify the expiration for the bucket and let the GCS do the work for you. Create a fast-delete.json policy:

{
   "rule":[
      {
         "action":{
            "type":"Delete"
         },
         "condition":{
            "age":0
         }
      }
   ]
}

then apply

gsutil lifecycle set fast-delete.json gs://MY-BUCKET

Thanks, @jterrace and @Janosch




回答6:


Remove the bucket from Developers Console. It will ask for confirmation before deleting a non empty bucket. It works like a charm ;)




回答7:


Shorter one liner for the lifecycle change:

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

I've also had good luck creating an empty bucket then starting a transfer to the bucket I want to empty out. Our largest bucket took about an hour to empty this way; the lifecycle method seems to take at least a day.



来源:https://stackoverflow.com/questions/29840033/fast-way-of-deleting-non-empty-google-bucket

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!