Snowflake と dbt / Terraform を組み合わせモダンなデータ基盤を構築
株式会社ナウキャスト / Kevinrobot34
チームリーダー / データエンジニア
利用プラン | ツールの利用規模 | ツールの利用開始時期 |
---|---|---|
Enterprise | 11名〜50名 | 2022年12月 |
利用プラン | Enterprise |
---|---|
ツールの利用規模 | 11名〜50名 |
ツールの利用開始時期 | 2022年12月 |
アーキテクチャ
アーキテクチャの意図・工夫
- データのサイロ化を解消するために一つのアカウントにデータは基本的に集約しつつ、適切な権限管理を行えるような Role を簡単に作成できる仕組みを用意
- マルチデータプロダクトを取り扱えるように、インフラを簡単に作成できる Terraform module を用意したり、 dbt に関連するテンプレートを用意し必要なコードはコマンド一つで作成できるような仕組みを用意
- パイプライン開発を効率化するために様々なCI/CDパイプライン
- dbt の SQL モデルの formatter / linter や Python UDF のユニットテストを実行する CI
- Python UDF や Streamlit in Snowflake のアプリを Snowflake CLI を利用してデプロイする CD
- dbt 関係のコードを含むイメージをビルド・デプロイする CD
- Atlantis を利用し GitHub の PR ベースで terraform plan/apply し Snowflake のインフラを管理できる仕組み
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
- 多くのデータパイプラインが一つのAWSアカウントで開発・運用されていた
- リソースやクォータ(AthenaのDMLの制限など)の食い合いがあった
- 一方、一部のデータは別のAWSアカウントで管理・加工されており、サイロ化もしていた
- 複数のデータプロダクトが各チームによってそれぞれ開発されていた
- データがサイロ化されており、データの置き場所やフォーマット、品質保証・マスターデータ管理などもバラバラだった
- 似たような問題を各チームが独自の技術スタック・開発で解決しており、知見の共有がされにくかった
どのような状態を目指していたか
- サイロ化を解消し SSoT なデータ基盤を作ること
- 権限管理はしっかりやる
- 複数のデータを組み合わせた分析をやりやすくする
- モダンな技術を利用したナウキャストのパイプラインの標準構成を用意することで、新規パイプライン開発の工数を下げること
比較検討したサービス
- Amazon Athena (既存の環境)
- Amazon Redshift Serverless
比較した軸
- ストレージとコンピュートが分離されており、ワークロードごとに計算資源を簡単に用意・管理できること
- Python との統合
- 弊社では元々 Python で ETL やデータ分析をしていた関係で、開発メンバーは基本的に Python が使えます
- 既存の複雑なパイプラインを移行する際に SQL ではなく Python で書くこともできると開発しやすいと考えていました
- エコシステムの成熟度
- dbt や Terraform などのサポートがどれくらいあるか、というのは気にしていました
選定理由
- Python との統合
- Python udf など Python で一部の処理を描くのが比較的簡単にできること
- Streamlit in Snowflake を利用することでシームレスにデータの可視化ができること
- エコシステムの成熟度
- dbt と Snowflake を組み合わせて使っている事例は多く、また Redshift Serverless に比べるとライブラリのサポート範囲やアップデートも早いと感じる部分が多かった
- (導入時はまだ不安定な部分はあったものの)Terraform provider が開発されており、 Snowflake の主要なリソースは Terraform で管理することが可能だった
- Marketplace で様々な公開データを簡単に利用開始できること
- Private Sharing で顧客へのデータ伝送が簡単に実現できること
導入の成果
Snowflake と dbt そして Terraform を中心としたデータ基盤を作ったことで、データのサイロ化を解消し複数のデータを組み合わせた複雑な分析なども気軽に始められるようになりました。適切なモジュールやテンプレートを用意したことでパイプライン立ち上げの工数は大幅に削減されました。
また Snowsight が使いやすく、非エンジニアメンバーも簡単な SQL のクエリを書いてデータを確認・分析したり、 Streamlit を利用してインタラクティブにデータを確認しやすくなりました。
導入時の苦労・悩み
まず初めに Platformチームが主導しある程度のインフラ・基盤を作りましたが、既存のパイプラインを Snowflake へ移行開始するまでに時間がかかりました。 社内で Snowflake の勉強会を開いたり、パイプラインを Snowflake で立ち上げるための手順などを解説したドキュメントを用意し、利用開始するハードルを下げるような施策をしました。
導入に向けた社内への説明
上長・チームへの説明
データウェアハウスを導入しデータ基盤を構築していく必要性は上長含め認識していました。
Athena / Redshift Serverless / Snowflake で似たようなクエリを実行し速度やコストを比較する PoC を行い、 Snowflake が有効であることを確認しました。
活用方法
よく使う機能
- Warehouse
- Snowsight (Worksheet や Notebook 、 Query Profile など)
- Snowflake CLI
- Market Place に公開されているオープンデータ
- Private Sharing 機能を利用した顧客へのデータ伝送
ツールの良い点
- Snowsight が使いやすい
- Worksheet でクエリ実行から簡単な可視化まで対応可能
- Notebook でデータ分析が簡単に可能
- Query Profile として実行計画をグラフィカルに確認することができ、クエリの最適化をしやすい
- コミュニティ活動が活発で具体的な活用事例を探しやすい
ツールの課題点
- Consumption model なためデータ活用が広がるとそれに伴いコストは自然と上がる。データ活用とコスト管理のバランスを取るのが難しい。
ツールを検討されている方へ
Snowflake もどんどん機能が増えているとはいえ、他のクラウドに比べるとデータエンジニアリング・データ分析に特化しているぶんシンプルで使いやすくキャッチアップもしやすいと思います。 直近事例も増えていますしコミュニティも活発なため、トライアルしながら様々な情報を集めて検証を進めるのがおすすめです。
株式会社ナウキャスト / Kevinrobot34
チームリーダー / データエンジニア
2020年3月に大学院修了後、ナウキャストへ入社し主にPOSデータのパイプラインの作成・管理、またそのデータの分析を実施。現在では社内のデータ分析基盤開発チームのリーダーとしてAWSやSnowflakeのクラウド環境の整備や技術検証などを担当。データが好きで、KaggleではCompetition Masterを獲得したほか、複数の機械学習コンペで受賞歴あり。
よく見られているレビュー
株式会社ナウキャスト / Kevinrobot34
チームリーダー / データエンジニア
2020年3月に大学院修了後、ナウキャス...
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法