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

Snowflake×dbt×Terraformでモダンなデータ基盤開発してみた

 Snowflake×dbt×Terraformでモダンなデータ基盤開発してみた

Kosaku Ono

May 18, 2023
Tweet

Other Decks in Technology

Transcript

  1. Nowcast, Inc.
    © 2020 Nowcast,Iinc.
    Snowflake×dbt×Terraformでモダンなデータ基盤開発してみた
    2023/5/17
    Nowcast データエンジニア
    ⼤野巧作 (Kevinrobot34)
    1

    View Slide

  2. © Nowcast, Inc.
    ⽬次
    ● ⾃⼰紹介・会社紹介
    ● 背景①
    ● Snowflake 関係
    ● Terraform 関係
    ● 背景②
    ● dbt 関係
    ● 今後の展望
    2

    View Slide

  3. © Nowcast, Inc.
    ⾃⼰紹介
    ⼤野巧作
    ● けびん と呼ばれています
    ● 2020年ナウキャスト新卒⼊社
    ● データエンジニア・データサイエンティスト
    ○ POSデータのパイプライン作成・運⽤
    ○ 社内の新規データ分析基盤構築
    ● Twitter等はKevinrobot34
    ● 略歴
    ○ 東京⼤学⼤学院理学系研究科にて、素粒⼦理論を専攻。
    在学中いくつかのITベンチャーでインターンを経験し、機械学習を⽤いたプロジェク
    トに従事。2020年3⽉に⼤学院修了後、ナウキャストへ⼊社。POSデータを取り扱う
    パイプラインの作成・運⽤と、全社のデータ分析基盤の作成に取り組んでいる。
    趣味はAtCoderやKaggleのコンペ参加。KaggleではCompetition Masterを獲得した
    ほか、複数のコンペで受賞歴あり。
    3

    View Slide

  4. © Nowcast, Inc.
    会社紹介
    ナウキャストはAlternative Dataを利活⽤を進めている会社
    4
    オルタナティブデータとは、元々は⾦融領域の⽤語で、
    伝統的に使われてきた財務情報や経済統計のようなデータ
    (Traditional Data)に対して、これまで利活⽤の進んで
    こなかったビッグデータのことを指します。
    データ利活⽤が活発なアメリカでは、様々な種類のオルタ
    ナティブデータがサービスとして実際に提供されています。
    参考) オルタナティブデータとは

    View Slide

  5. © Nowcast, Inc.
    会社紹介
    データの保有側・利⽤側の双⽅に価値を提供するオルタナティブデータの
    Two-Sided Platformを展開します
    5

    View Slide

  6. © Nowcast, Inc.
    背景
    ナウキャストでは新しい基盤システムを構築中
    既存のシステムやチーム体制にある課題を解決するために、
    ナウキャストでは最近プラットフォームチームを⽴ち上げ、
    新たなデータ分析基盤システムを構築中
    ● 細かな論点は過去の弊社のイベント (DataOpsNight)
    でも発表しているので是⾮ご覧ください︕
    ● 分析基盤として Snowflake を中⼼に、 dbt などの
    モダンデータスタックを使うことにしている
    ○ 今⽇はこちらについて紹介します
    6

    View Slide

  7. © Nowcast, Inc.
    背景
    新分析基盤の全体像
    各種ツールを以下のように利⽤
    Snowflake
    ● リソース運⽤の課題の解決
    Terraform
    ● リソース管理の課題の解決
    dbt
    ● データ利活⽤の課題の解決
    7

    View Slide

  8. © Nowcast, Inc.
    背景
    既存の環境・問題点①
    ● 多くのパイプラインが1つのAWSアカウント
    に載っており、リソースやクォータの⾷い合
    いがあった
    ○ Athena DML のクォータ等
    ● 本番環境しかないパイプラインも存在
    ● 強めの権限で作業しがち

    Snowflake で適切にリソースを分けて作成するこ
    とで解決
    8

    View Slide

  9. © Nowcast, Inc.
    Snowflake関係
    Snowflake のリソースの切り分け
    ● Database は環境(dev / stg / prod)
    ごとに分ける
    ● データソースごとに以下を作成
    ○ Schema と stage などの
    その他 schema objects
    ○ Role
    ○ Warehouse
    ○ Role も Warehouse も Schemaに
    紐づく粒度で切り分けるイメージ
    Snowflake では Warehouse (計算資源) と
    ストレージが分離されているのでリソースの⾷い合
    いなどが起きない設計が可能︕
    9

    View Slide

  10. © Nowcast, Inc.
    Terraform関係
    Terraform の⽤語
    ● Terraform
    ○ IaC (Infrastructure as Code) ツール
    ○ AWS や GCP のリソースを Terraform で管理している⼈は多いと思うが、
    Snowflake のリソースも Terraform で宣⾔的に管理することが可能
    ● Terraform module
    ○ 複数のリソースのセットのこと
    ○ 例えば dev / stg / prod で同じ設定を
    再利⽤したい時に便利
    ● Atlantis
    ○ Terraform の plan / apply を
    Github の PR ベースで実現する
    OSSのツール
    ○ 要は GitOps な Terraform の CI / CD
    10

    View Slide

  11. © Nowcast, Inc.
    Terraform関係
    Terraform moduleで50以上のリソースを簡単に作成
    ● 先ほど紹介した、 Schema / Role / Warehouse はもちろんのこ
    と、これらのリソースごとに Grant の設定もしなければならない
    ○ 右図のように様々なリソース(少なくとも50個)が必要
    ● また命名規則も作り、リソース名から⽤途が判別しやすくしたい
    → まさに Terraform module が使いやすい
    11

    View Slide

  12. © Nowcast, Inc.
    Terraform関係
    Terraform moduleで50以上のリソースを簡単に作成
    ● 実際に module を利⽤するとたった数⼗⾏で
    50以上のリソースを簡単に作成可能
    12
    データソース名と環境名
    誰が使えるか︖
    Warehouseのサイズ

    View Slide

  13. © Nowcast, Inc.
    Terraform関係
    Atlantis による誰でも簡単に Terraform が使える環境
    ● Platformチームしかインフラを触れないとい
    う状況だとスケールしない
    ● Atlantis を使えば Github で PR を作成し、
    Approve をもらわないと apply できない
    といった機能がある
    → 権限の追加や、新規データソース⽤のリソース
    作成など多くのエンジニアが⾃律的に動ける状況を
    実現
    13

    View Slide

  14. © Nowcast, Inc.
    Terraform関係
    Snowflake Provider を使う際の Tips
    ● depends_on で明⽰的に依存関係を指定
    ● prevent_destroy = true で⼤切なリソースは守る
    ● grant 関係のオプションはうまく活⽤
    ○ enable_multiple_grants
    ○ on_future / on_all
    ● Provider のバージョンが⽐較的頻繁に上がるので Github repo を定期的に確認する
    14

    View Slide

  15. © Nowcast, Inc.
    背景
    元々の環境・問題点②
    ● データカタログやデータのリネージュが整備されてない
    ● AWSアカウントに構築されてきたパイプラインはS3とAthenaをベースとしたものが多い
    ○ 以下の繰り返し
    ■ S3 に parquet でデータを配置し、Athena テーブルを作成しておく
    ■ ECSからAthenaにクエリを投げて適宜 S3 に置く
    ○ Athena がパフォーマンス的に遅くて困ることが度々あった
    ● 上記以外にも、PythonでガッツリETLしているパイプラインももちろんある
    15

    View Slide

  16. © Nowcast, Inc.
    dbt関係
    External Table の設定
    ● Athena テーブルが作られているので、
    その S3 バケットを外部ステージとして
    設定することで、簡単に Snowflake の
    世界にデータを取り込める
    ● またそれをどこからでもスタートできる
    ○ パイプラインによって全てをいきなり Snowflake へ
    移⾏するのは⼤変、という場合には下流の処理から
    順次対応が可能
    16

    View Slide

  17. © Nowcast, Inc.
    dbt関係
    External Table の設定
    ● dbt のパッケージ
    dbt-external-tables を利⽤
    することで簡単に設定可能
    ● S3のHive形式のpartitionの情報
    も適宜 metadata$filename を
    パースすることで、Snowflakeへ
    取り込むことができる
    17
    外部テーブルの情報

    View Slide

  18. © Nowcast, Inc.
    今後の展望
    ● dbt docs をそのままホスティングするのではなく、 Notion などに載せる
    ○ Github Action の dbt-docs-to-notion 的なイメージ
    ● dbt python モデルを便利に使える環境を作ることで、PythonでガッツリETLしてるよう
    なパイプラインもSnowflakeの世界へ移⾏しやすくする
    ● Quicksight等のBIツールと繋ぎ込みやすくする
    ● …
    などなど、Snowflake と terraform そして dbt をフル活⽤して
    分析基盤を進化させていく予定です︕
    18

    View Slide

  19. © Nowcast, Inc.
    ナウキャストでモダンなデータ基盤を作る&使いませんか︕
    ⼀緒に働く仲間を募集中です︕
    ● 興味ある⽅は是⾮ Twitter でご連絡ください︕ @Kevinrobot34
    ● 会社について気になる⽅はこちら
    ○ 会社紹介スライド
    ○ 会社説明Notion
    ● 募集中のポジションはこちら
    19

    View Slide

  20. © Nowcast, Inc.
    ありがとうございました︕
    20

    View Slide