Google Cloud StorageのSoft Deleteで一度削除したファイルを復元してみる

2024.03.25

Google Cloudデータエンジニアのはんざわです。
今月、Cloud StorageにSoft Deleteの新機能が発表されました。

Soft Deleteとは、バケット内の削除または上書きされたオブジェクトを指定された期間保存する機能です。
今回の記事では、一度削除したオブジェクトを復元するまでの流れを実際に触ってみたいと思います。

Soft Deleteとは

Soft Deleteにより、上書きを含む全ての削除されたオブジェクトは、設定された保持期間中はソフト削除されたオブジェクトとして保持されます。
ソフト削除されたオブジェクトは、設定された保持期間を過ぎると永久に削除されます。

新たにStorageバケットを作成すると、Soft Deleteはデフォルトで有効になっており、保持期間は7日間に設定されます。
この保持期間は90日まで増やすことが可能で逆に0日に減らし、無効化することも可能です。

実際に触ってみる

ファイルの復元は、GUIとCLIのどちらからでも操作可能なので本記事では両方で触ってみたいと思います。
検証に使用しているコマンドなどは以下のドキュメントを参考にしています。
実際に使用する際には一度確認してみてください。

GUIから復元してみる

gcs-soft-delete-testという名前でStorageバケットを作成しています。
このようにデフォルトで 削除(復元可能)ポリシー(データ復旧用) の項目にチェックが入っていることがわかります。

作成したバケットにサンプル用のファイルをアップロードし、削除しました。

次に画面右の表示から削除済み(復元可能)のオブジェクトのみを選択します。

すると下のようにソフト削除されたオブジェクトの一覧が表示されますので復元させたいオブジェクトを選択します。

選択すると下のような画面に移動します。
画面の右から表示現行以外から削除済み(復元可能)に変更します。

削除されたファイルのバージョンが表示されるので復元したいバージョンの右からRestoreを選択するとファイルを復元することができます。

CLIから復元してみる

GUIと同様にgcs-soft-delete-testのバケットにsoft-delete-sampleのファイルがある状態です。

$ gcloud storage ls gs://gcs-soft-delete-test/

> gs://gcs-soft-delete-test/soft-delete-sample

まずはバケットからファイルを削除します。

$ gcloud storage rm gs://gcs-soft-delete-test/soft-delete-sample

> Removing objects:
> Removing gs://gcs-soft-delete-test/soft-delete-sample...                                                                                                                                                                          
>   Completed 1/1

次にバケット内で削除したファイルを検索します。
検索には--soft-deletedのオプションを付けることでソフト削除されたオブジェクトとそのバージョンの一覧を取得することができます。

$ gcloud storage ls --soft-deleted gs://gcs-soft-delete-test/

> gs://gcs-soft-delete-test/soft-delete-sample#1711288825612713

バージョンを確認したらrestoreコマンドで復元することができます。

$ gcloud storage restore gs://gcs-soft-delete-test/soft-delete-sample#1711288825612713

> Restoring gs://gcs-soft-delete-test/soft-delete-sample#1711288825612713...                                                                                                                                                        
>   Completed 1

気になったこと

ここからは触る前から気になっていた点や実際に触ってみて気になった点を紹介したいと思います。

1. ライフサイクル機能で削除されたファイルはどうなるのか

どうやらライフサイクル機能で削除されたファイルもソフト削除されたオブジェクトとして保持されるようです。

Object Lifecycle Management (OLM) rules only act on live and noncurrent objects and cannot affect objects once they are soft deleted. Any objects that OLM deletes are soft deleted instead of permanently deleted.

オブジェクト・ライフサイクル管理(OLM)ルールは、稼働中のオブジェクトと非稼働中のオブジェクトにのみ適用され、いったんソフト削除されたオブジェクトには影響しません。OLM によって削除されたオブジェクトは、完全に削除されるのではなく、ソフト削除されます。(DeepLで翻訳)

参照元: https://cloud.google.com/storage/docs/soft-delete#soft-delete-considerations

2. オブジェクトを削除した後に保持期間を変更するとどうなるのか

これは削除した時点での保持期間が適用されるようです。
そのためオブジェクトを削除した後で保持期間を変更しても、変更した保持期間は適用されずに削除する前の保持期間が適用されるようです。

The updated retention duration does not apply to existing soft-deleted objects. The existing soft-deleted objects are retained for the duration that was in effect when they were deleted.

For example, you have two objects in your bucket: Object A and Object B. You enable a soft delete policy in your bucket with a default retention duration of seven days. You delete Object A. After a couple of days, you change the Soft Delete retention duration to ten days, and you delete Object B. Cloud Storage continues to retain Object A until it has been protected for seven days, while Object B is retained for ten days.

更新された保持期間は、既存のソフト削除されたオブジェクトには適用されません。既存のソフト削除されたオブジェクトは、削除されたときの有効期間だけ保持されます。

例えば、Bucket に2つのオブジェクトがあるとします。あなたは、Bucket でソフト削除ポリシーを有効にし、デフォルトの保持期間を 7 日と設定しました。オブジェクト A を削除します。数日後、ソフト削除の保持期間を10日に変更し、オブジェクトBを削除します。Cloud StorageはオブジェクトAを7日間保護するまで保持し続け、オブジェクトBは10日間保持します。(DeepLで翻訳)

3. 最新版のバージョンのみを復元するにはどうしたら良いか

最新版のファイルを復元したい場合は、バージョンを指定せずに復元すると自動的に最新版のファイルが復元されるようです。

  • 同一のファイルに複数のバージョンが存在するパターン
$ gcloud storage ls --soft-deleted gs://gcs-soft-delete-test/soft-delete-sample

> gs://gcs-soft-delete-test/soft-delete-sample#1711288825612713
> gs://gcs-soft-delete-test/soft-delete-sample#1711289974222640
> gs://gcs-soft-delete-test/soft-delete-sample#1711290391723807
  • バージョンを指定せずに最新のバージョンを復元
$ gcloud storage restore gs://gcs-soft-delete-test/soft-delete-sample

> Restoring gs://gcs-soft-delete-test/soft-delete-sample#1711290391723807...                                                                                                                                                        
>   Completed 1

料金

2024年3月25日時点での情報です

2024年5月31日まではSoft Deleteのプロモーション期間で、ソフト削除されたオブジェクトの最初の7日間の保管期間に発生する追加料金が無料になるようです。
2024年6月1日からは、オブジェクトが削除されてからソフト削除された状態で経過した時間に対し、既存の価格で使用量の課金が開始されるようです。

目安として、東京リージョンのStandardストレージで 0.023USドル(1GB / 1month) です。
また、リカバリする際には別途オペレーション料金が発生します

詳細は以下のSoft delete pricingの項目を参照してください。

また、Cloud Storageの料金の詳細については以下のドキュメントを確認してみてください。

Soft Deleteの機能は既存の全てのバケットにも適用されます。
バックアップが不要なバケットに関しては、2024年5月31日までに保持期間を0日に設定を変更した方が無駄な課金を減らすことができると思います。
一方で重要なファイルを保存しているバケットなどに関しては必要に応じて、保持期間を増やすなど設定を見直した方が良いと思われます。

まとめ

この記事ではGoogle Cloud Storageの新機能であるSoft Deleteについて紹介しました。
Cloud Storageは、BigQueryの外部テーブルをはじめ、最近ではVertex AI Searchなど様々な用途で使用されている方が多いと思います。
重要なデータを保護するのに非常に有用な機能だと思いますので、より効果的に活用するために本記事や公式のドキュメントを参考にしてみてください。