Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set TTL on a Blob in Google Cloud Storage using Java?

Using Java, is it possible to set the time to live (TTL) on a blob that is being created in Google Cloud Storage?

I do not want to set TTL on the Bucket - only on the items within the Bucket.

For example, 14 days after its creation date, I would like any files that are stored in a specific bucket to be deleted.

Here is an example of how I am creating my blob: WriteChannel writer = storage.writer(BlobInfo.newBuilder(blobId).setContentType("application/json").build());

I was looking for a way to set the TTL upon creation but have not been able to find a solution. Please advise

like image 267
pilz2985 Avatar asked Aug 10 '17 01:08

pilz2985


2 Answers

It is not currently possible to set a per-object TTL, you can only configure a bucket-wide TTL that applies to all objects in the bucket by setting the buckets LifeCycle configuration. https://cloud.google.com/storage/docs/lifecycle

Setting a TTL of 14 days on the bucket via LifeCycle will not cause the bucket itself to be deleted after 14 days, instead it will cause each object uploaded to that bucket to be deleted 14 days after it was created.

like image 170
Joshua Royalty Avatar answered Nov 15 '22 11:11

Joshua Royalty


You can do that by using the DaysSinceCustomTime rule in the bucket lifecycle configuration: https://cloud.google.com/storage/docs/lifecycle#dayssincecustomtime

blob.custom_time = pd.Timestamp('now', tz='UTC') + pd.offsets.Second(ttl)
#blob.patch()
blob.update() # they seem to have a bug with the custom_time setter, so using .update() instead of .patch()

If you do that and the DaysSinceCustomTime will be set for 1 day for example, the object would be deleted after ttl + 1 day.

like image 20
tamirg Avatar answered Nov 15 '22 10:11

tamirg