どうもこんにちは!樋渡です。
今回は、Cloud Storageに関するお話です。
コードリックではシステム開発をする時に、GoogleのFirebaseを主に使用しています。
アプリから画像をアップロードする時や、CSVファイルを内部で保存しておきたい時などは、FirebaseのStorageに保存していくことになると思います。
手軽に扱えて便利ですが、定期的に整理しておかないとデータは蓄積される一方で、運用コストが上がってしまいます。
そのため、データの種類によって有効期限を決めておき、期限が過ぎたら自動的に削除されるように設定しておいた方が良いです。
設定方法はGoogle Cloudから直接触るか、予め作成したjsonファイルの内容を反映させるかのどちらかになります。
本ブログでは後者のやり方について解説していきます。
今回は、sampleというディレクトリの直下にあるファイルを最終更新日から1年後に削除する、というのを例にjsonファイルを作成します。
作成場所はプロジェクトのルートディレクトリで、ファイル名はlifecycle.jsonとしておきます。
{
"rule": [
{
"action": { "type": "Delete" },
"condition": {
"age": 365,
"matchesPrefix": ["sample/"]
}
}
]
}
上記を作成したら、あとはターミナルから下記のコマンドを打つだけです。
gcloud storage buckets update gs://<your-bucket> --lifecycle-file=lifecycle.json
もし、gcloudコマンドでエラーが発生してしまったら、下記のリンク先からGoogle Cloud CLIをインストールしてください。
その後、手順に沿って初期設定を終えるとgcloudコマンドが使えるようになります。
Google Cloud CLI をインストールするライフサイクルの設定がちゃんと出来ているか、念のためにGoogle Cloudのページからも確認しておきましょう。
Google Cloud該当のプロジェクトが選択されている状態で、Cloud Storage > バケット名 > ライフサイクル、の順に進んでいくと確認できます。
また、conditionのageを1としておいて、翌日にちゃんと削除されているかテストしておくことをお勧めします。
最後に1つ注意点があります。
conditionのmatchesPrefixに"sample/"を指定していますが、これはあくまでsampleディレクトリの直下にあるファイルを対象としています。
your-bucket/
└── sample
aaaaa.jpg
bbbbb.jpg
ccccc.jpg
そのため、下記のようなディレクトリ構造の場合は想定通りに動いてくれません。
your-bucket/
└── sample
│
├─ image
│ aaaaa.jpg
│ bbbbb.jpg
├─ text
│ aaaaa.txt
│ bbbbb.txt
└─ csv
aaaaa.csv
bbbbb.csv
ccccc.csv
予め対象としたいディレクトリ名が決まっている場合は、matchesPrefixに"sample/image"のように記述してください。
sampleディレクトリからネストした全ファイルを対象としたい場合は"sample/"ではなく、"sample"と記述すれば大丈夫です。
今回は非常にシンプルなライフサイクルを作成しましたが、より高度な設定を必要とする際はGoogle Cloudのドキュメントを参考にしてみてください。
オブジェクトのライフサイクル管理