Azure Blob Storageの特定フォルダ(prefix)のBlobを定期的に削除する設定
概要
Blobストレージを使っていてバックアップファイルを定期的に削除して容量を削減したいニーズがあったので調べました。結論としてはAzure Portalから簡単に設定できたので大した内容ではないのですが、備忘録として残しておきたいと思います。
Portalからの操作
- 定期削除を実行したいストレージアカウントを開いて、サイドバーから [データ管理] → [ライフサイクル管理] を選択します。
- [フィルターを使用してBLOBを制限する]を選択します。
- [最終更新日]もしくは[作成日]からルール実行までの日数を入力。結果を選択(削除以外にストレージタイプの変更もできます)。またこのルールは複数設定可能で、30日でアーカイブストレージへ、90日で削除、のように段階的にルールを適用することができます。ただし、アーカイブからクールのように上の階層に上げることはできないようです(そんなニーズはないと思いますが)。
- ルールを適用するフォルダ(prefix)を指定します。
<コンテナ名>/<prefix>
の形式で指定します。こちらも複数の適用先を設定することができます。
これで指定したフォルダにあるBlobを定期的に削除することができるようになりました。
注意としては、ライフサイクル管理の動作は完全にリアルタイムではなく、設定変更後に実際のアクションが実行されるまでにはタイムラグが存在します。すぐに設定の結果を確認したくても少々待つ必要があります(最小ライフサイクルでも1日以上待ちます)。運用を開始する前に、テストのprefixを用意するなどしてシステムの挙動を監視し、予期せぬ動作がないかを確認する必要があります。
最終アクセス日を基準にする
アクセス追跡を有効にする、にチェックをすることで上記3の設定で最終アクセス日を基準にした日数を指定できるようになります。ただし、この機能は別途料金がかかるようです。実際にどれくらい料金がかかるのかはAzureドキュメントのサーフ力が足りずわかりませんでした……。
余談
Azureに慣れておらずBlobにはコンテナ以下にフォルダの概念がないということも知らない人も多いと思いタイトルでフォルダ(prefix)と書いています。
正確にはxxx/yyy/sample.txt
というBlobがあってもxxx
フォルダもyyy
フォルダも実際には存在せずxxx/yyy/sample.txt
というBlobがあるだけです。したがって、xxx
およびxxx/yyy
のprefixを持つBlobがxxx/yyy/sample.txt
のみの場合これが消えるとxxx
およびxxx/yyy
のようなフォルダは残りませんし、xxx
やyyy
を直接オブジェクトとして操作することはできません。
Azure Storage Explorerなどのアプリを使用するとprefixを基準にフォルダのような操作ができます。(コンテンツの種類もフォルダーと表示されるので公式アプリなのにそこは厳密じゃなくていいのか?という気持ちがちょっとありますが使いやすいです)
参考
Discussion