Google Cloud Storageのバケットソフト削除を試してみる

Google Cloud Storageのバケットソフト削除を試してみる

Clock Icon2024.11.26

はじめに

データアナリティクス事業本部のkobayashiです。

Google Cloud Storageでソフト削除されたバケットを復元を試してみましたのでその内容をまとめます。

Cloud Storageのバケットのソフト削除されたバケット

Cloud Storage のソフト削除されたバケットの機能はバケットを削除した際にバケットに設定した保持期間中(削除(復元可能)ポリシー)を過ぎるまでは完全削除されず、復元処理によりバケットを元に戻せる機能です。バケットを復元することでバケット内のオブジェクトの復元も可能になります。

https://cloud.google.com/storage/docs/soft-delete?hl=ja

バケット作成時に設定できる保持期間は604,800 秒(7 日間)から7,776,000 秒(90 日間)となっています。

では早速試してみます。

ソフト削除されたバケットを試してみる

ソフト削除されたバケットを設定したBucketを作成・復元するには次のロールが必要なのでまずはカスタムロールを作成します。

  • storage.buckets.create
  • storage.buckets.restore
$ gcloud iam roles create customStorageRole \
    --project={プロジェクトID} \
    --title="Custom Storage Role" \
    --description="Role for restoring buckets" \
    --permissions=storage.buckets.create,storage.buckets.restore

作成したカスタムロールをユーザーに付与します。

$ gcloud projects add-iam-policy-binding {プロジェクトID} \
    --member="user:{メールアドレス}" \
    --role="projects/{プロジェクトID}/roles/customStorageRole" \
    --condition=None

それでは保持期間(削除(復元可能)ポリシー)を設定したバケットを作成してみます。gcloud storage buckets createコマンドを実行する際に--soft-delete-durationオプションで保持期間を指定しますが、このオプションがなくてもデフォルトで7日間の保持期間が設定されます。
--soft-delete-durationオプションで指定できるのは7日から90日間を設定出来ます。指定形式は2w1dの形式でこの場合は15日間の保持期間が設定されます。

$ gcloud storage buckets create gs://cm-kobayshi-soft-deleted-1w --location=asia-northeast1 --soft-delete-duration=1w
$ gcloud storage buckets create gs://cm-kobayshi-soft-deleted --location=asia-northeast1 # デフォルトの7日間の保持期間の削除(復元可能)ポリシーが適用される

なお、保持期間(削除(復元可能)ポリシー)を設定しない場合は--soft-delete-durationオプションを0で設定します。

$ gcloud storage buckets create gs://cm-kobayshi-soft-deleted-none --location=asia-northeast1 --soft-delete-duration=0

保持期間(削除(復元可能)ポリシー)を設定したバケットを設定したBucketを作成できましたので早速削除してみます。

$ gcloud storage ls gs://cm-kobayshi-soft-deleted-1w
gs://cm-kobayshi-soft-deleted-1w/sample.csv
gs://cm-kobayshi-soft-deleted-1w/sample2.csv
gs://cm-kobayshi-soft-deleted-1w/sample3.csv
$ gcloud storage rm --recursive gs://cm-kobayshi-soft-deleted-1w
Removing objects:
Removing gs://cm-kobayshi-soft-deleted-1w/sample2.csv#1732477200350801...     
Removing gs://cm-kobayshi-soft-deleted-1w/sample.csv#1732477134377931...
Removing gs://cm-kobayshi-soft-deleted-1w/sample3.csv#1732477200288086...
  Completed 3/3                                                                
Removing buckets:
⠹Removing gs://cm-kobayshi-soft-deleted-1w/...                                 
  Completed 1/1 

ソフト削除されたバケットを一覧表示してみます。

$ gcloud storage ls --buckets --soft-deleted --full
gs://cm-kobayshi-soft-deleted-1w/:
  Storage Class:               STANDARD
  Location Type:               region
  Location Constraint:         ASIA-NORTHEAST1
  Versioning Enabled:          None
  Logging Configuration:       None
  Website Configuration:       None
  CORS Configuration:          []
  Lifecycle Configuration:     None
  Requester Pays Enabled:      None
  Default KMS Key:             None
  Time Created:                2024-11-24T18:44:55Z
  Time Updated:                2024-11-24T19:38:42Z
  Soft Delete Time:            2024-11-24T19:40:36Z
  Hard Delete Time:            2024-12-01T19:41:35Z
  Generation:                  1732473894621743591
  Metageneration:              1
  Bucket Policy Only Enabled:  False
  Public Access Prevention:    inherited
  Soft Delete Policy:
  {
    "effectiveTime": "2024-11-24T18:44:55.314000+00:00",
    "retentionDurationSeconds": "604800"
  }
  ACL:
  ...
  Default ACL:
  ...

ソフト削除されたバケットを復元するにはGENERATION_NUMBERが必要です。ソフト削除されたバケットを一覧表示で表示されたGenerationがそれに当たります。今回の例ですと1732473894621743591になります。
バケット名と世代番号を使って以下のコマンドでバケットを復元します。

$ gcloud storage restore gs://cm-kobayshi-soft-deleted-1w#1732473894621743591
Restoring gs://cm-kobayshi-soft-deleted-1w#1732473894621743591...

これでバケットは復元出来ました。
ただバケットを復元しても、ソフト削除時にバケット内にあったオブジェクトは復元されないため、削除時にバケット内にあったソフト削除されたオブジェクトを復元するにはソフト削除されたオブジェクトの復元をする必要があります。 ( 削除(復元可能)オブジェクトを使用する  |  Cloud Storage  |  Google Cloud )

$ gcloud storage restore gs://cm-kobayshi-soft-deleted-1w/** \
      --async --deleted-after-time=2024-11-24 \
      --deleted-before-time=2024-11-25

このコマンドは長時間実行オペレーションを実行するの復元するにはしばらく待つ必要があります。しばらく待ってから確認するとソフト削除されたバケット内のオブジェクトも復元されていることがわかります。

$ gcloud storage ls gs://cm-kobayshi-soft-deleted-1w
gs://cm-kobayshi-soft-deleted-1w/sample.csv
gs://cm-kobayshi-soft-deleted-1w/sample2.csv
gs://cm-kobayshi-soft-deleted-1w/sample3.csv

まとめ

Google Cloud Storageでソフト削除されたバケットを復元を試してみました。保持期間(削除(復元可能)ポリシー)を設定したバケットを削除するとソフト削除となり保持期間中はgcloud storage restoreコマンドで簡単に復元出来ました。ただしバケット内のオブジェクトは別途オブジェクトの復元が必要になるのでその点注意が必要です。

最後まで読んで頂いてありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.