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

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

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

Kosaku Ono

May 18, 2023
Tweet

More Decks by Kosaku Ono

Other Decks in Technology

Transcript

  1. © Nowcast, Inc. ⽬次 • ⾃⼰紹介・会社紹介 • 背景① • Snowflake

    関係 • Terraform 関係 • 背景② • dbt 関係 • 今後の展望 2
  2. © Nowcast, Inc. ⾃⼰紹介 ⼤野巧作 • けびん と呼ばれています • 2020年ナウキャスト新卒⼊社

    • データエンジニア・データサイエンティスト ◦ POSデータのパイプライン作成・運⽤ ◦ 社内の新規データ分析基盤構築 • Twitter等はKevinrobot34 • 略歴 ◦ 東京⼤学⼤学院理学系研究科にて、素粒⼦理論を専攻。 在学中いくつかのITベンチャーでインターンを経験し、機械学習を⽤いたプロジェク トに従事。2020年3⽉に⼤学院修了後、ナウキャストへ⼊社。POSデータを取り扱う パイプラインの作成・運⽤と、全社のデータ分析基盤の作成に取り組んでいる。 趣味はAtCoderやKaggleのコンペ参加。KaggleではCompetition Masterを獲得した ほか、複数のコンペで受賞歴あり。 3
  3. © Nowcast, Inc. 会社紹介 ナウキャストはAlternative Dataを利活⽤を進めている会社 4 オルタナティブデータとは、元々は⾦融領域の⽤語で、 伝統的に使われてきた財務情報や経済統計のようなデータ (Traditional

    Data)に対して、これまで利活⽤の進んで こなかったビッグデータのことを指します。 データ利活⽤が活発なアメリカでは、様々な種類のオルタ ナティブデータがサービスとして実際に提供されています。 参考) オルタナティブデータとは
  4. © Nowcast, Inc. 背景 ナウキャストでは新しい基盤システムを構築中 既存のシステムやチーム体制にある課題を解決するために、 ナウキャストでは最近プラットフォームチームを⽴ち上げ、 新たなデータ分析基盤システムを構築中 • 細かな論点は過去の弊社のイベント

    (DataOpsNight) でも発表しているので是⾮ご覧ください︕ • 分析基盤として Snowflake を中⼼に、 dbt などの モダンデータスタックを使うことにしている ◦ 今⽇はこちらについて紹介します 6
  5. © Nowcast, Inc. 背景 既存の環境・問題点① • 多くのパイプラインが1つのAWSアカウント に載っており、リソースやクォータの⾷い合 いがあった ◦

    Athena DML のクォータ等 • 本番環境しかないパイプラインも存在 • 強めの権限で作業しがち ↓ Snowflake で適切にリソースを分けて作成するこ とで解決 8
  6. © Nowcast, Inc. Snowflake関係 Snowflake のリソースの切り分け • Database は環境(dev /

    stg / prod) ごとに分ける • データソースごとに以下を作成 ◦ Schema と stage などの その他 schema objects ◦ Role ◦ Warehouse ◦ Role も Warehouse も Schemaに 紐づく粒度で切り分けるイメージ Snowflake では Warehouse (計算資源) と ストレージが分離されているのでリソースの⾷い合 いなどが起きない設計が可能︕ 9
  7. © 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
  8. © Nowcast, Inc. Terraform関係 Terraform moduleで50以上のリソースを簡単に作成 • 先ほど紹介した、 Schema /

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

    50以上のリソースを簡単に作成可能 12 データソース名と環境名 誰が使えるか︖ Warehouseのサイズ
  10. © Nowcast, Inc. Terraform関係 Atlantis による誰でも簡単に Terraform が使える環境 • Platformチームしかインフラを触れないとい

    う状況だとスケールしない • Atlantis を使えば Github で PR を作成し、 Approve をもらわないと apply できない といった機能がある → 権限の追加や、新規データソース⽤のリソース 作成など多くのエンジニアが⾃律的に動ける状況を 実現 13
  11. © Nowcast, Inc. Terraform関係 Snowflake Provider を使う際の Tips • depends_on

    で明⽰的に依存関係を指定 • prevent_destroy = true で⼤切なリソースは守る • grant 関係のオプションはうまく活⽤ ◦ enable_multiple_grants ◦ on_future / on_all • Provider のバージョンが⽐較的頻繁に上がるので Github repo を定期的に確認する 14
  12. © Nowcast, Inc. 背景 元々の環境・問題点② • データカタログやデータのリネージュが整備されてない • AWSアカウントに構築されてきたパイプラインはS3とAthenaをベースとしたものが多い ◦

    以下の繰り返し ▪ S3 に parquet でデータを配置し、Athena テーブルを作成しておく ▪ ECSからAthenaにクエリを投げて適宜 S3 に置く ◦ Athena がパフォーマンス的に遅くて困ることが度々あった • 上記以外にも、PythonでガッツリETLしているパイプラインももちろんある 15
  13. © Nowcast, Inc. dbt関係 External Table の設定 • Athena テーブルが作られているので、

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

    dbt-external-tables を利⽤ することで簡単に設定可能 • S3のHive形式のpartitionの情報 も適宜 metadata$filename を パースすることで、Snowflakeへ 取り込むことができる 17 外部テーブルの情報
  15. © Nowcast, Inc. 今後の展望 • dbt docs をそのままホスティングするのではなく、 Notion などに載せる

    ◦ Github Action の dbt-docs-to-notion 的なイメージ • dbt python モデルを便利に使える環境を作ることで、PythonでガッツリETLしてるよう なパイプラインもSnowflakeの世界へ移⾏しやすくする • Quicksight等のBIツールと繋ぎ込みやすくする • … などなど、Snowflake と terraform そして dbt をフル活⽤して 分析基盤を進化させていく予定です︕ 18
  16. © Nowcast, Inc. ナウキャストでモダンなデータ基盤を作る&使いませんか︕ ⼀緒に働く仲間を募集中です︕ • 興味ある⽅は是⾮ Twitter でご連絡ください︕ @Kevinrobot34

    • 会社について気になる⽅はこちら ◦ 会社紹介スライド ◦ 会社説明Notion • 募集中のポジションはこちら 19