Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowflakeデータ基盤の複数環境構成

Kosaku Ono
December 10, 2024
110

 Snowflakeデータ基盤の複数環境構成

2024/12/10に開催された primeNumber 01 2024 / Data Engineering Study #27「2データ基盤振り返りLT会」の登壇資料です。

Snowflake で複数環境構成をする際のポイントや、ゼロコピークローンの便利さを簡単に紹介しました!

Kosaku Ono

December 10, 2024
Tweet

More Decks by Kosaku Ono

Transcript

  1. © 2024 Finatext Holdings Ltd. 1. イントロダクション 自己紹介 • 名前:大野巧作

    ◦ 大体けびんと呼ばれています ◦ X / GitHub / Zenn / SpeakerDeck などは @Kevinrobot34 • 役職:Data Engineer / Data Platform Engineer @ Nowcast ◦ POSデータのパイプライン作成・運用 ◦ Snowflake x dbt x Terraform な社内データ基盤構築・運用 ◦ 2020年卒の社会人5年目です • 最近興味のある技術 ◦ Apache Iceberg 4 出張でSnowflake Summit に行った時の写真→
  2. © 2024 Finatext Holdings Ltd. 1. イントロダクション 過去のパイプラインの課題 Snowflake x

    dbt x Terraform のデータ基盤を作る前のパイプラインには様々な課題がありました • データのサイロ化 • CI / CD が整備されていなかったりする • 一部のデータは AWS アカウントは共有しており、 クォータを食い合っていた • 本番環境しかない • Description や Lineage などの メタデータが取得・管理されていない • 似たようなパイプラインは多いのに、 知見が共有されず似たエラーに皆苦しむ • … 6
  3. © 2024 Finatext Holdings Ltd. 1. イントロダクション ナウキャストのデータ基盤 Snowflake x

    dbt x Terraform なデータ基盤を運用しており • POSデータ • クレジットカードデータ • 人流(位置情報)データ • 求人情報データ • TV広告データ • … など多種多様なデータを分析できるように しています。サイロ化は解消され、複数の データを組み合わせた面白い分析がやりや すくなりました! データ基盤の構成の全体像については、 右の資料で詳しく解説しています! 7 https://speakerdeck.com/kevinrobot34/multi-data-product-platform-with-snowflake-dbt-terraform
  4. © 2024 Finatext Holdings Ltd. 1. イントロダクション 過去のパイプラインの課題(再掲) Snowflake x

    dbt x Terraform のデータ基盤を作る前のパイプラインには様々な課題がありました • データのサイロ化 • CI / CD が整備されていなかったりする • 一部のデータは AWS アカウントは共有しており、クォータを食い合っていた • 本番環境しかない ◦ 開発しにくく、技術負債は放置されがちだったり、顧客影響がでるリスクが高い環境 ◦ 開発のスピードも出にくくなっていた • Description や Lineage などのメタデータが取得・管理されていない • 似たようなパイプラインは多いのに、知見が共有されず似たエラーに皆苦しむ • … ナウキャストの新しいデータ基盤ではどのように複数環境を用意し、運用しているか紹介します! 9
  5. © 2024 Finatext Holdings Ltd. 2. 環境分離のポイント どのレベルで環境を分けるか? Snowflake の何で環境を分けるかいくつか選択肢があります。

    これらを踏まえ、ナウキャストではデータベースレベルで環境分離を行っています → <database=環境名>.<schema=データソース・レイヤ名>.<table/view> 11 メリット デメリット アカウント • 明確に本番環境と開発環境を分離できる • コスト・権限管理しやすい • 環境間でのデータ連携が面倒 (要Replication) データベース • 環境間でのデータ連携が容易 (クローン ) • log_level など環境内で同じ設定を配布したり しやすい • スキーマの作り方次第でテーブルの管理が柔 軟にしやすい • dbt のカスタムスキーマ周りはマクロの設定変 更が必要 スキーマ • 環境間でのデータ連携が容易 (クローン ) • DBを共通にできるので管理対象が減り、全体 をフラットに管理者しやすい • db 単位でしかできない機能があったりする (databasesビュー、replicationなど)
  6. © 2024 Finatext Holdings Ltd. 2. 環境分離のポイント 環境はいくつ用意する? Webアプリケーションだと Dev

    / Stg / Prod と3つ環境を用意したりしますが、 データ系だとストレージコストも計算コストも馬鹿になりません。 ナウキャストでは Dev と Prod の2つの環境を用意し、 後述のゼロコピークローンを組み合わせることでコストを抑えるようにしています。 ※ 多くのプロジェクトで2環境用意するようにしていますが、一部のプロジェクトでは   3環境用意している場合もあったりします。環境はいくつ必要でも大丈夫なように   flexible な terraform module でインフラを管理しています。 12
  7. © 2024 Finatext Holdings Ltd. ゼロコピークローンとはテーブルなどのSnowflakeのオブジェクトをデータそのものはコピーせずに クローンする機能です。 データの本体であるマイクロパーティションをコピーする のではなく、「どのマイクロパーティションでテーブルが 構成されているのか?」というメタデータだけをコピー

    するため高速で安価です。 詳細は右の記事を ご覧ください! 2. 環境分離のポイント ゼロコピークローンについて 14 micro partition 1 micro partition 2 micro partition 3 micro partition 4 original_table cloned_table create table cloned table clone original_table https://zenn.dev/finatext/articles/snowflake-zero-copy-clone より
  8. © 2024 Finatext Holdings Ltd. 3. ゼロコピークローンと環境分離 環境分離 その② ゼロコピークローンでうまくやりくりしてコストを抑える。 1.

    Prod から Dev にクローン 2. Dev で dbt build (開発) a. full refresh は一度だけ 3. Dev から Prod にクローン 4. Dev と Prod で dbt build (定期実行) a. どちらも差分更新 b. dev はいらなくなったら止める 16
  9. © 2024 Finatext Holdings Ltd. 3. ゼロコピークローンと環境分離 環境分離 その② ゼロコピークローンでうまくやりくりしてコストを抑える。 1.

    Prod から Dev にクローン 2. Dev で dbt build (開発) a. full refresh は一度だけ 3. Dev から Prod にクローン 4. Dev と Prod で dbt build (定期実行) a. どちらも差分更新 b. dev はいらなくなったら止める 17
  10. © 2024 Finatext Holdings Ltd. 3. ゼロコピークローンと環境分離 環境分離 その② ゼロコピークローンでうまくやりくりしてコストを抑える。 1.

    Prod から Dev にクローン 2. Dev で dbt build (開発) a. full refresh は一度だけ 3. Dev から Prod にクローン 4. Dev と Prod で dbt build (定期実行) a. どちらも差分更新 b. dev はいらなくなったら止める 18
  11. © 2024 Finatext Holdings Ltd. 3. ゼロコピークローンと環境分離 環境分離 その② ゼロコピークローンでうまくやりくりしてコストを抑える。 1.

    Prod から Dev にクローン 2. Dev で dbt build (開発) a. full refresh は一度だけ 3. Dev から Prod にクローン 4. Dev と Prod で dbt build (定期実行) a. どちらも差分更新 b. dev はいらなくなったら止める このようにゼロコピークローンで環境間で テーブルをクローンすることでコストを 抑えることができる。 19
  12. © 2024 Finatext Holdings Ltd. 3. ゼロコピークローンと環境分離 注意点や今後の課題 • dev

    が部分的にいわゆるstg的な運用になっている場合もあり、そういったパターン時には prod 側へゼロコピークローンしたりしています ◦ ポイントとしては重い dbt model を full refresh する回数をいかに減らせるか?という話 で、そのために適宜ゼロコピークローンを利用するのが便利です。 • ゼロコピークローンは便利ですが、権限周りなどの落とし穴はあったりするので、事前に検証は してからの利用がおすすめです。 • PIIを含むような環境だと無闇にデータをコピーするのはよくないという話がありますが、こう いった機密性の高いデータに関してはそもそもアカウントを切り分け、運用の仕方を少し変えた りアカウントへの権限の払い出しを厳しくしたりしています。詳細はAppendixをご覧ください。 • 一部結局まだ1環境しかなく、devという名前のDBが実質本番的な運用をされてしまっているパ ターンが起きてしまっており、これをいかに仕組みで防ぐかは今後考えていきたいと思っていま す。 20
  13. © 2024 Finatext Holdings Ltd. まとめ • データの品質を維持しアジリティ高く開発を行うためには、 データ基盤においても本番環境のみでなく、複数の環境を用意するのが大事 ◦

    ナウキャストでは Dev/Prod の2つの環境を用意し、気軽に変更を試せるようにしている • 環境分離の仕方はいくつか選択肢があるが、 Snowflake の場合にはアカウントは共通化して おくのがおすすめ ◦ ゼロコピークローンを活用することで コストを抑えつつ複数環境の運用が 可能になる 21
  14. © 2024 Finatext Holdings Ltd. 4. Appendix References • https://zenn.dev/finatext/articles/snowflake-zero-copy-clone

    • https://zenn.dev/finatext/articles/dbt-high-performance-incremental-model • https://speakerdeck.com/kevinrobot34/multi-data-product-platform-with-snowflake-dbt-terraform • https://speakerdeck.com/kevinrobot34/privilege-and-cost-management-in-snowflake • https://speakerdeck.com/tsoshiro/snowflake-x-dbtdezuo-rusekiyuadeaziyairunadetaji-pan 23