LifeCycle Policy の導入によるSnowflake Storage Costの最適化
はじめに
こんにちは。ナウキャストでデータエンジニアをしているTakumiです。
2025年6月2日〜6月5日で、Snowflake Summit 2025が開催されました。
その中で、SnowflakeにStorageのLifeCicle Policyが導入される旨の発表がSessionでありました。
どんな機能で、どこまでの効果があるかSession内で示された実際の試算を用いてまとめます。
講演の基本情報
講演タイトル
Optimize storage costs using Storage Lifecycle Policies
スピーカー
- Wendy Liu(Senior Software Engineer, Snowflake)
- Mayank Gupta(Senior Software Engineer, Snowflake)
講演日時
2025-06-05 10:00–10:20
Storage Lifecycle Policies
SnowflakeのStorage Lifecycle Policiesは、データの価値に応じて自動的にデータをアーカイブまたは削除することで、ストレージコストを最適化するための機能です。
Lifecycle Policy には以下の2種類のポリシー種別があります。
-
Expiration Policy(期限切れによる削除)
- 指定された条件(例:作成日から5年以上)に該当するデータを完全に削除。
- 削除後にデータを復元することは不可能。
- ユースケース:短期ログ、不要となった中間データ、法的保持期限を超えたデータ
-
Archival Policy(アーカイブ)
- 条件に該当するデータを安価なアーカイブ層へ自動的に移動し、さらに設定された日数の経過後に完全削除。
- データは削除されるまで取得可能であり、COOL、COLDの2種類のストレージ層から選択。(機能、ユースケースは後述)
Archive Dataのフローは以下の通りです。
Archival Policyにおける Tier(Hot, Cool, Cold)
-
Hot Tier (ホット層)
- 従来のストレージ層
-
COOL Tier(クール層)
- 即時アクセス可能
- CREATE TABLE FROM ARCHIVE で瞬時に新テーブルとして抽出
- ストレージ単価はHot層の約6分の1
- ユースケース:月次レポート、半年ごとの監査確認など、時々アクセスするが普段は不要なデータ
-
COLD Tier(コールド層)
- アクセス前に12〜48時間の復元処理が必要
- 復元完了後にクエリが自動実行され、新テーブルが生成される
- ストレージ単価はHot層の約20分の1
- ユースケース:監査保管、法定保存のみに使う極低頻度アクセスのデータ
Life Cycle Policyの活用による導入効果
このポリシーを導入することで以下の3つの課題を改善することができます。
- Operational Complexity
- Compliance Hurdles
- Manage Storage Costs
Operational Complexity
これまでSnowflake上で古いデータの削除やアーカイブを行うには、個別にプロセスを構築し、継続的な運用管理が必要でした。それらは運用負荷が非常に高いです。
LifeCycle Policyを導入することで、この負荷を以下の通り低減することができます。
-
自動化による構成複雑化の解消
従来は、データの有効期限設定やアーカイブ処理を自作する必要があり、
- バッチ処理
- タスク管理
- アクセス制御
- 監査証跡
の整備などが煩雑でした。
Lifecycle Policiesを使えば、これらの処理がSnowflake上で完全に自動化されます。
-
シンプルな導入プロセス
設定は以下の2ステップのみ。
-
CREATE STORAGE LIFECYCLE POLICY
でポリシーを定義 - 対象テーブルにポリシーを
ALTER TABLE xxx ADD
で紐づけ
ポリシーはテーブルの列(例:created_at
)を条件に柔軟な表現が可能です。
-
一元管理とポリシーの再利用性
1つのポリシーを複数テーブルに対して適用でき、設定の重複やミスを避けられます。これにより組織内で統一的な運用ポリシー管理が可能になります。
Compliance Hurdles
データの価値が低下しても、法的・業界的な理由から一定期間保持しなければならないデータは多くの企業に存在します。特に金融・保険・医療などの業界では、最大7〜10年単位での保存が義務付けられるケースが一般的です。
LifeCycle Policyを導入することで、この様な業界として必要な対応についても対応することが可能です。
-
法規制・業界要件への対応
金融・保険・医療など多くの業界では、データの長期保存が法的に義務付けられており、- 会計記録の7年保存
- 医療記録の10年保存
- ユーザーデータの取得可能性保持
など、削除せず保持し続けることが求められます。
Lifecycle Policyを使えば、こうしたデータをアクセス可能な状態のまま安価なストレージへ自動移行でき、コンプライアンス要件を満たすことが可能です。
-
オンデマンドでのデータ取得機能
アーカイブされたデータは、必要に応じて
-
CREATE TABLE FROM ARCHIVE
構文で即時または遅延で復元可能 - 復元されたデータは新しいテーブルとして読み取り可能
となっており、取得操作は明示的・SQLベースで完結します。元のテーブルを変更せずにアクセスできるため、安全性も確保されます。
-
監視機能と新しい権限制御
- ポリシーの実行履歴をテーブル関数で確認でき、監査対応も容易
- 新たな権限体系により、誰がどのテーブルにポリシーを適用できるかを制御できます。
Manage Storage Costs
実際のコスト最適化試算として、以下の例が示されました。
前提条件に依存するものの、試算では2年でコストが80%削減するとのことだったので、インパクトが非常に大きい機能であることがわかります。
前提条件(想定シナリオ)
- 100TBの非アクティブデータを7年間保存する必要がある(監査・規制対応のため)。
- ライフサイクル戦略として、非アクティブデータをCold Tierにアーカイブし、6ヶ月ごとに10TBだけ取り出す運用。
期間 | Hot Tierでの保存コスト | Cold Tier移行後のコスト | 推定コスト削減額 | 削減率 |
---|---|---|---|---|
6ヶ月 | $13,800 | $6,297 | $7,503 | -54% |
1年 | $27,600 | $7,249 | $20,351 | -74% |
2年 | $55,200 | $9,153 | $46,047 | -83% |
実際の導入方法
以下のように、SQLだけで導入およびモニタリングが可能です。
Life Cycle Policyの作成と適用
-- Step 1: Create a lifecycle policy
CREATE STORAGE LIFECYCLE POLICY example_policy
AS (ts TIMESTAMP)
RETURNS BOOLEAN ->
ts < DATEADD(DAY, -360, CURRENT_TIMESTAMP());
ARCHIVE_FOR_DAYS = 365 * 5
ARCHIVE_TIER = COLD;
-- Step 2: Apply lifecycle policy to a table
ALTER TABLE my_table ADD STORAGE LIFECYCLE POLICY example_policy (event_ts);
MonitoringとAccess Control
-- Show the policy history
SELECT * FROM
TABLE(
INFORMATION_SCHEMA.STORAGE_LIFECYCLE_POLICY_HISTORY(
POLICY_NAME => 'my_db.my_schema.slp',
TIME_RANGE_START => DATEADD('HOUR', -1, CURRENT_TIMESTAMP()),
RESULT_LIMIT => 100
)
);
-- Access Control
-- ※管理者または APPLY 権限を持つテーブルオーナーのみ実行可能
ALTER TABLE my_table ADD STORAGE LIFECYCLE POLICY example_policy (event_ts);
まとめ
SnowflakeのStorage Lifecycle Policiesは、
- SQLベースの簡潔な構文
- 高い再利用性
- COOL/COLD層への段階的アーカイブ
- 自動実行と高い可視性
により、運用負荷を最小限に保ちながらコスト削減とガバナンス強化を両立する強力な機能です。
機能として改善して欲しい場所はあるものの、今後Snowflakeの活用を拡大していくにあたって非常に強力な機能であると感じました。
Discussion