はじめに
Azure Blob Storageは、大容量のデータを格納するためのスケーラブルなオブジェクトストレージサービスである。
データの保存期間や アクセス頻度によって適切なストレージ階層を選択することで、コストを削減できる。
Azure Blob Storageのライフサイクル管理機能を使用することで、データの経過時間に応じて自動的にストレージ階層を変更したり、不要になったデータを削除したりすることが可能である。
今回は、ライフサイクル管理機能を試してみる。
環境
Azure Subscription
Azure Portal または Azure CLI
Azure Storage Account(General Purpose v2)Azure Blob Storageのストレージ階層
ライフサイクル管理を理解するために、まずAzure Blob Storageで利用可能なストレージ階層について記載する。
ストレージ階層の種類
| 階層名 | 特徴 | 用途 | コスト |
|---|---|---|---|
| Hot | 頻繁にアクセスされるデータ | アクティブなデータ | 高い(ストレージ)/ 低い(アクセス) |
| Cool | 月に数回程度アクセス | バックアップ、短期アーカイブ | 中間(ストレージ)/ 中間(アクセス) |
| Cold | 年に数回程度アクセス | 長期バックアップ | 低い(ストレージ)/ 高い(アクセス) |
| Archive | ほとんどアクセスしない | 長期保管、コンプライアンス | 最低(ストレージ)/ 最高(アクセス) |
階層間の移行
データは以下のルールに従って階層間を移行できる
- 上位階層への移行: Archive → Cold → Cool → Hot(任意の階層へ)
- 下位階層への移行: Hot → Cool → Cold → Archive(段階的または直接)
ライフサイクル管理ポリシーの概要
ライフサイクル管理について
ライフサイクル管理は、指定した条件に基づいてデータを自動的に以下の処理を行う機能となる
- 階層の移行: より安価な階層への自動移動
- データの削除: 保存期間を過ぎたデータの自動削除
- スナップショットの管理: 古いスナップショットの自動削除
ポリシーの構成要素について
ライフサイクルポリシーは以下の要素で構成される
- ルール名: ポリシーの識別名
- フィルター: 適用対象の指定(プレフィックス、BLOBタイプなど)
- アクション: 実行する処理(移行、削除)
- 条件: アクションを実行する条件(日数、作成日など)
準備
ストレージアカウントの作成
ストレージアカウント→「作成」を選択

以下で作成をする。

ライフサイクルポリシーの設定
新しいポリシーの作成
Azure Portalで先ほど作成したストレージアカウントを選択し、「データ管理」セクションの「ライフサイクル管理」を選択、「規則の追加」を選択する。

基本設定
- ルール名:
auto-lifecycle-policy - ルールの種類:
BLOBに適用

フィルター設定
- BLOBの種類:
ブロックBLOB - プレフィックス一致:
logs/(ログファイル用)

アクションの設定
基本BLOBのアクション
- 最終変更日から30日後: Coolアクセス層に移行
- 最終変更日から90日後: Coldアクセス層に移行
- 最終変更日から365日後: Archiveアクセス層に移行
- 最終変更日から2555日後(7年): BLOBを削除
など。
今回は、30日後に削除とした。

Microsoft公式ドキュメントに基づく実践例
本セクションでは、Microsoft公式ドキュメントの「ライフサイクル管理ポリシーの構成」を参考に、実際の業務で活用できる具体的な実装例をみてみる。
アクセス時間追跡を活用したライフサイクル管理
最終アクセス時間に基づくライフサイクル管理を使用する
1. アクセス時間追跡の有効化
- Azure Portalでストレージアカウントに移動
- データ管理セクションで「ライフサイクル管理」を選択
- 「アクセス追跡を有効にする」チェックボックスをオン
2. 最終アクセス時間に基づくポリシー
{
"rules": [
{
"enabled": true,
"name": "access-based-lifecycle",
"type": "Lifecycle",
"definition": {
"filters": {
"blobTypes": ["blockBlob"],
"prefixMatch": ["documents/", "media/"]
},
"actions": {
"baseBlob": {
"tierToCool": {
"daysAfterLastAccessTimeGreaterThan": 30
},
"tierToArchive": {
"daysAfterLastAccessTimeGreaterThan": 90
}
}
}
}
}
]
}Microsoft推奨の段階的移行戦略
公式ドキュメントで推奨されている、変更日と最終アクセス日を組み合わせたポリシー例
{
"rules": [
{
"enabled": true,
"name": "microsoft-recommended-tiering",
"type": "Lifecycle",
"definition": {
"filters": {
"blobTypes": ["blockBlob"],
"prefixMatch": ["sample-container/log"]
},
"actions": {
"baseBlob": {
"tierToCool": {
"daysAfterModificationGreaterThan": 30,
"daysAfterLastAccessTimeGreaterThan": 30
},
"tierToArchive": {
"daysAfterModificationGreaterThan": 90,
"daysAfterLastAccessTimeGreaterThan": 90
}
}
}
}
}
]
}参考
Azure Blob Storage のライフサイクル管理
https://docs.microsoft.com/ja-jp/azure/storage/blobs/lifecycle-management-overviewAzure Storage の価格
https://azure.microsoft.com/ja-jp/pricing/details/storage/blobs/Azure CLI Storage コマンド
https://docs.microsoft.com/ja-jp/cli/azure/storageAzure Blob Storage のアクセス層
https://docs.microsoft.com/ja-jp/azure/storage/blobs/access-tiers-overviewAzure Storage のコスト最適化
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-plan-manage-costs
おわりに
Azure Blob Storageのライフサイクル管理機能を使ってみた。AWSのS3でもライフサイクルポリシーが存在しているので、触ってみた限りそれと同じ機能のようだった。
なので、ライフサイクルポリシーを活用することで手動による管理作業を削減しながら、コスト削減も実現できる。
また、BlobStorageの仮想ディレクトリについて理解ができていないので理解しておきたい。
Azureでは、仮想マシンからBlobStorageをマウントしたりできるようなのでそれもやってみたい。
どうやらマウントした後に、
- マウントしたVMから空のディレクトリを作成
- その後ディレクトリが空のまま再マウント
- 上記を実行するとディレクトリが消える。
ようなので、これが起きるか試してみたい。
※Blobfuse(または他のマウントツール)は、マウント時に Azure Blob Storage 上に存在するBlobのキー(名前)をもとに、仮想的にディレクトリ構造を構築するようだから