GoogleCloudStorageのライフサイクル管理にパスフィルター機能が追加されました

2022.08.01

はじめに

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

GoogleCloudのCloudStorageではオブジェクトのライフサイクル管理によりオブジェクトの削除やストレージクラスの変更を行えますが、以前は行えなかったパス指定の機能が追加されたので早速使ってみたのでまとめます。

Cloud Storageオブジェクトのライフサイクル管理

Cloud Storageのオブジェクトのライフサイクル管理はオブジェクトの日付属性やバージョン情報を元にオブジェクトの削除やストレージクラスのダウングレードを行える機能です。よく使うパターンとしては以下の様なものがあるかと思います。

  • 作成直後は頻繁にアクセスされるが一定時間経過後はアクセス頻度が低くなるオブジェクトのストレージクラスを変更する
  • ログデータをBigQueryに取り込む際に一時保管場所としてGCSを使うが取込後ある程度したら削除する
  • バージョニングをしているオブジェクトに対しn世代以上は削除する

この様な便利なライフサイクル管理ですが、以前はバケット単位でしか行えなかったためCloudFunctionsで削除専用の関数を作成する必要がありましたが、この度のリリースによりオブジェクトをPrefix・Suffixパスでフィルタリングが行えるようになりCloudStorageの標準機能になったため非常に使い勝手が良くなりました。

以前のライフサイクル管理

新しいライフサイクル管理

ライフサイクル管理を試してみる

早速設定をしてみたいと思います。シチュエーションとしては日々送られてくるログファイルを保存しているバケットがありこの中のapp_1app_2のパス配下のオブジェクトのみに一週間後に削除するライフサイクル管理をCloudコンソールとgsutilから設定します。

sample-bucket/
├── app_1
│   ├── 20220721.log
│   ├── 20220722.log
│   ├── 20220723.log
│   ├── 20220724.log
│   ├── 20220725.log
│   ├── 20220726.log
│   ├── 20220727.log
│   ├── 20220728.log
│   ├── 20220729.log
│   ├── 20220730.log
│   └── 20220731.log
├── app_2
│   ├── 20220721.log
│   ├── 20220722.log
│   ├── 20220723.log
│   ├── 20220724.log
│   ├── 20220725.log
│   ├── 20220726.log
│   ├── 20220727.log
│   ├── 20220728.log
│   ├── 20220729.log
│   ├── 20220730.log
│   └── 20220731.log
└── app_3
    ├── 20220721.log
    ├── 20220722.log
    ├── 20220723.log
    ├── 20220724.log
    ├── 20220725.log
    ├── 20220726.log
    ├── 20220727.log
    ├── 20220728.log
    ├── 20220729.log
    ├── 20220730.log
    └── 20220731.log

Cloudコンソールから設定

手順1)CloudコンソールからCloud Storageに進み対象のバケットを選択し、ライフサイクルタブを押下する

手順2)ルールを追加を押下する

手順3)アクションを選択オブジェクトを削除するを選択し続行を押下する

手順4)Set Rule Scopesオブジェクト名が接頭語と一致をチェックしapp_1/,app_2/を入力する

手順5)Set Conditions年齢を選択し7を入力し作成をする

以上でライフサイクルルールが作成されルール一覧に表示されルールに則りapp_1app_2のパス配下のオブジェクトのみ7日以上経過した時点で削除されるようになります。

gsutilから設定

はじめにライフサイクルルールのJsonファイルを作成する必要があります。これは公式ドキュメントのライフサイクル構成ルール を参考に記述します。 今回のルールですと以下のJsonファイルになります。

lifecycle.json

{
  "lifecycle": {
    "rule": [
      {
        "action": {
          "type": "Delete"
        },
        "condition": {
          "matchesPrefix": [
            "app_1/",
            "app_2"
          ],
          "age": 7
        }
      }
    ]
  }
}

このルールを適用するには以下のコマンドを実行します。

$ gsutil lifecycle set ./lifecycle.json gs://{バケット名}

これで先程同様のライフサイクルルールがバケットに作成されました。ルール内容を確認するには以下のコマンドで確認できます。

$ gsutil lifecycle get gs://{バケット名}
{"rule": [{"action": {"type": "Delete"}, "condition": {"age": 7, "matchesPrefix": ["app_1/", "app_2"]}}]}

以上で設定完了です。

まとめ

GoogleCloudのCloudStorageのオブジェクトのライフサイクル管理を設定してみました。ライフサイクル管理にパスフィルタ条件が使えるようになったのでライフサイクル管理一つで削除やストレージクラスの変更を行えるようになり大変便利になりました。

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