Amazon Redshift から Snowflake へのデータ基盤移行
シンプルフォーム株式会社 / 山岸 裕樹
テックリード / インフラエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
利用プラン | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|
Enterprise Edition | 11名〜50名 | 2024年8月 | B to B |
利用プラン | Enterprise Edition |
---|---|
ツールの利用規模 | 11名〜50名 |
ツールの利用開始時期 | 2024年8月 |
事業形態 | B to B |
アーキテクチャ
アーキテクチャの意図・工夫
- データ基盤を S3 + Redshift から Snowflake に移行し、Snowflake Database として DataHub を構築
- 主要なデータソースである Aurora MySQL からのデータ連携方式を、従来の「全件洗い替え方式」から dbt incremental モデルを用いた「増分更新方式」に変更
- インフラリソースの IaC 管理を Terraform + Terragrunt で行い、アカウントレベルで環境を分離
- データレイヤー間のデータ変換を Glue ETL ジョブから dbt に変更
- ワークフローエンジンには従来通り AWS Step Functions を利用(変更なし)
導入の背景・解決したかった問題
導入背景
移行前の状態
シンプルフォームでは、主に金融機関のお客様における法人審査業務を効率化・高度化するための SaaS ソリューションを提供しており、そのために全国 500 万法人に関する様々な定性情報を独自に収集・データベース化しています。これらの法人定性情報やユーザー行動を分析できるよう、Redash をインターフェースとする以下のようなデータ分析基盤を2023年1~2月頃に構築し、2年弱ほど運用してきました。(新基盤への移行をまだ完了できていないため、2025年1月現在も運用中)
- Redshift Serverless を構築し、Redash データソースとして接続
- データ実体は S3 に置いたまま、Glue データカタログ化したものを Redshift Spectrum の機能を利用して参照
- データレイヤー間の変換処理は Glue ETL ジョブで実装し、日次の全件洗い替え方式で定期実行
課題
データ分析が社内的にそれほど普及していなかった構築当時、上記アーキテクチャは分析系リソースを(プロダクトと同じ)AWS 環境内で完結させることができ、分析クエリが実行されなければ ETL 以外にほぼコストのかからないという意味で始めやすいものでした。また、データ量も現在ほど大きくなく、全件洗い替えによる処理の非効率性よりも運用の簡便さのメリットが大きい状況でした。
しかし、事業成長に伴うデータ量の増加や分析ユースケースの多様化、データ分析者の増加などに伴い、以下のような問題に直面するようになりました。
【課題1】 日次 ETL 実行の長期化
全件洗い替え方式で ETL パイプラインを日次実行しているため、時間の経過とともに ETL 実行にかかる時間が長期化し、金銭的コストも日に日に重くなってきていました。ETL 実行が長期化すると、途中のジョブが何らかの原因で失敗した際に復旧までに時間を要してしまい、分析基盤におけるデータの可用性を大きく損ねてしまいます。
現在はテーブル逐次処理を並列化したり、 Glue ジョブのワーカータイプやワーカー台数を調整することによって何とか運用できていますが、いずれ処理しきれなくなるタイミングが訪れる可能性が高いため、早めに増分更新方式に切り替える必要がありました。
【課題2】 分析にかかるコストの増加
ETL 実行にかかるコストだけでなく、データ分析者が発行するクエリの実行にかかるコストも増加していました。分析ユースケースの多様化・データ分析者の増加に伴って Redshift Serverless の基本容量 (Bese Capacity) を徐々に上げている現状があったため、よりクエリ単価の安い DWH 製品への移行のモチベーションが高くなっていました。
【課題3】 コンピュートリソースの競合
単一の Redshift Serverless を全 Redash ユーザーが共有するアーキテクチャとしていたため、大きめのクエリが発行されて Redshift 側が逼迫した際に、パフォーマンス悪化の影響が他の全 Redash ユーザーに波及しやすい状態でした。(弊社の場合、Redshift Spectrum を利用しているので複数の Redshift Serverless に分けることも考えられましたが、それはそれで今後 Redshift マネージドストレージを利用しづらくなるといった制約を抱えることになると考えました)
【課題4】 セキュリティポリシー実装の柔軟性
データ分析基盤上で提供するデータには、アクセス制御を設けるべき機微な情報を含むテーブル・カラムも存在しています。このようなデータは Redshift 上でスキーマを分けた上で、それを含めて参照可能な上位の Redshift ユーザーを作成し、Redash データソースとマッピングするような形で RBAC を実現していましたが、ポリシー変更に柔軟に対応しやすい運用ではありませんでした。
【課題5】 メタデータの管理・提供
データ分析者が Redash 上で参照可能なテーブル・カラムについて、その説明 (description) を知る手段が限定されており、分析に必要な知識が属人化しやすい状況でした。また、各種ソーステーブルから Glue ETL ジョブによって生成された加工済みテーブルについて、その生成過程を分析者側で把握する手段がありませんでした。
他にもいくつか理由はありますが、概ね上記のような課題意識を持って Snowflake × dbt (dbt core) の導入を検討しました。
比較検討したサービス
Snowflake × dbt 以外に検討した選択肢として、以下のようなものがあります。
(※いずれも筆者が検討当時、調査・検証した限りの情報です。内容が最新ではない場合はご容赦ください)
Redshift(継続利用)
まず検討したのは、アーキテクチャを一部変更した上で Redshift を継続利用することです。
- ETL/ELT 部分に Redshift Zero-ETL 機能を利用
- データ変換ツールとして Glue ジョブではなく dbt を利用
- データアクセス制御のため Lake Formation の権限管理機構を利用
もともと Redshift を利用していたこともあり、ある意味で最も無難な選択肢ではありましたが、以下の理由から採用は難しいと判断しました。
- Redash データソースの
Redshift (with IAM User/Role)
が Redshift Serverless に対応していなかったこと - Lake Formation 権限の Terraform リソースが上手く動作しなかったこと(Apply した直後に何故か plan 差分が出る)
- dbt を利用しようとすると変換結果を Redshift マネージドストレージに書き込むことになるはずだが、この場合に【課題3】を解消できないこと
データレイクハウスの自前構築・運用
増分更新 (≒ UPSERT) 可能なデータ基盤という観点で、データレイクハウスを自前で構築・運用することも検討してみました。オープンテーブル形式の主要な選択肢としては Hudi, Iceberg, Delta がありましたが、検討の末 AWS Glue × Apache Iceberg の組み合わせで検証を実施しました。
重要な要件であった「UPSERT が可能であること」についてはクリアできそうな見通しがある程度ついたものの、以下の理由から最終的には見送りました。
- Iceberg の技術自体が黎明期にあり、少人数チームで運用していくには不安が残ること
- Iceberg のメリットの一つとして挙げられる「相互運用性」を意識しなければならないほどの組織規模ではないこと
ただし、上記の検証・検討を行ったのが2024年4月のことでしたが、その後6月に開催された Snowflake Data Cloud Summit や Databricks DATA + AI Summit などを皮切りに急速にベンダー側のサポートが進んでいるように思います。同じ検討を行っても、タイミングによっては違った判断になったかもしれません。
選定理由
- 上記の【課題1】~【課題5】すべてにおいて改善が見込まれること
- 「コンピュート層」と「ストレージ層」が完全に分離されており、dbt との相性が良いこと
- Snowflake の「サービス層」にあたる各種機能の使い勝手が良く、少人数チームでも運用がしやすいこと
- Terraform Provider が公式にサポートされることが決定していたこと
導入の成果
改善したかった課題はどれくらい解決されたか
【課題1】 日次 ETL 実行の長期化
データ連携方式を「増分更新方式」に変更したことで、時間・コストそれぞれ以下のような効果が得られました。(コストに関しては ETL/ELT に関連する Glue ジョブ、ECS タスク、Snowpipe、仮想ウェアハウス を対象に算出)
- (時間)5~6 時間 → 30 分弱
- (コスト)$31~34 /日 → 約 $3.2 /日
【課題2】 分析にかかるコストの増加
移行過渡期であり、現時点で実績ベースでの比較ができないため割愛します。
【課題3】 コンピュートリソースの競合
こちらも実績に基づく評価は難しいですが、Redash ユーザーグループ毎に利用可能な仮想ウェアハウスを分けており、マルチクラスターウェアハウスによるスケーリングも設定しているため、リソース競合による可用性の低下はかなりの程度抑えられているのではないかと考えています。
【課題4】 セキュリティポリシー実装の柔軟性
Snowflake のデータアクセス制御機構を利用して柔軟性の高い RBAC 実装が可能になりました。また、動的データマスキングの機能を利用することで「値の区別はできるようにしつつ、生の値は参照させたくない」といった細かな要求にも応えられる基盤になりました。
【課題5】 メタデータの管理・提供
dbt のデータカタログ機能である dbt Docs を SAML 認証付きの CloudFront + S3 にホスティングし、データカタログとして社内展開しました。GitHub 管理された dbt プロジェクト内でテーブルメタ情報を付与し、GitHub をソースとする CodePipeline として CI/CD を構築しました。
どのような成果が得られたか
その他、以下のような効果を実感しています。
- データ変換に dbt を使用することでエンジニアリング工数が大幅に下がり、高速にデリバリーできるようになった
- アドホックな分析において Snowflake Notebook という選択肢が加わり、Python 利用のハードルが下がった
導入時の苦労・悩み
検討当時、自分も含めて Snowflake, dbt とも利用経験のあるメンバーが社内におらず、導入を滞りなく進められるかどうかは懸念点でしたが、以下のような点を考慮して何とかなりそうな感触を得られたため、導入に踏み切る決断をしました。
- Snowflake サポートがキャパシティ契約に含まれており、追加費用なく利用できること
- 公式ドキュメントの品質が高いこと
- 担当 Account Executive, Sales Engineer からの支援が手厚かったこと
- Snowflake コミュニティが成熟しており、参考にできそうな発信が多数存在していたこと
導入に向けた社内への説明
上長・チームへの説明
基本的には上長 (CTO) 向けに説明を実施し、最終的に Snowflake 導入の意思決定に対する合意を得ました。データ基盤移行の必要性や Snowflake 導入によってどのように課題解決されるのかといった内容の他、課金体系や費用対効果に関する説明を行いました。
課金体系については、最小で年間 $12,000 を支払う必要がありますが、消費しきれなかったクレジットは翌年以降に繰り越されるため、移行過渡期であっても大きな無駄が生じないことを説明しました。
移行前後のコスト比較については、現行基盤と同等規模のデータやクエリパターンで実機検証できるのが望ましいと思いますが、短期間で必要なリソースを構築し、精緻な検証を行うのは難しいように思われたので、代わりに以下のような簡易な机上検証を行いました。
- 現在 Redashift Serverless にかかっている分析コストの実績値から月間のクエリ実行時間を逆算
- この実行時間をもとに DWH を Snowflake に置き換えた際に分析コストがどの程度になるか、諸条件を変えたいくつかのパターン(楽観パターン・妥当パターン・悲観パターン)で算出
程度の差はあれど、いずれのパターンにおいても Redshift Serverless より分析コストを抑えられる見込みとなったため、算出プロセスとともにその結果を共有しました。その他、Snowflake 様から頂いた資料や他社事例などを併せて提示しました。
- [参考] 視聴動向データの分析基盤を Redshift から Snowflake に乗り換えた話 - PLAY DEVELOPERS BLOG
活用方法
よく使う機能
- DWH 製品としての主要機能 :
- Database, Schema, Table/View
- 仮想ウェアハウス
- RBAC (Functional Role + Access Role, 動的データマスキング)
- Snowflake UDF/UDTF, Stored Procedure ... etc.
- データ取り込み :
- Snowpipe
- Snowflake Task
- データ基盤運用 :
- Query Profile
- Trust Center
- コスト管理、リソースモニター
ツールの良い点
技術的に優れる点はこれまでにも書いた通りですが、コミュニティ (SnowVillage) が活発であることも Snowflake の魅力を語る上で欠かせないものの一つだと思います。Slack や各種イベントなどを通じて社外のノウハウにアクセスしやすい環境が出来ているので、もしこれから技術選定をされるという方はその点も考慮に入れても良いかもしれません。
ツールの課題点
Terraform Provider バージョンアップに伴う Breaking Change(破壊的変更)に遭遇することが多かったり、最新の Provider バージョンであっても未対応のリソース(または属性)が多く残っていたりと、IaC 管理において難しいと感じる点はいくつかあります。ただ、2024年12月に無事 Version 1.0.0 もリリースされましたし、時の経過とともにこの辺りの使い勝手も改善されていくのではないかと期待しています。
今後の展望
- 旧データ基盤からの完全移行、Snowflake データ基盤運用の安定化
- 運用の高度化(監視・通知の実装、CI/CD 実装、パフォーマンスチューニング など)
- AI/ML, LLM などの機能を活用した分析の高度化
- Streamlit アプリケーションなどのデータ活用パターンの拡充
シンプルフォーム株式会社 / 山岸 裕樹
テックリード / インフラエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
2018年に株式会社NTTデータに新卒入社。分散処理OSSやデータ基盤技術などに関するR&Dおよび案件支援業務に従事。2023年1月よりインフラ・データエンジニアとして現職。
よく見られているレビュー
シンプルフォーム株式会社 / 山岸 裕樹
テックリード / インフラエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
2018年に株式会社NTTデータに新卒入...
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法