← Back
datatech casual 2022.07.01 20 slides

小さく始めるデータ基盤

副業で enpay にてゼロから構築したデータ基盤事例。BigQuery / Embulk / CloudRun を中心に、つくり込まないことを優先した構成

小さく始めるデータ基盤

@reizist

自己紹介

@reizist
Web Backend / Infra / Data (Infra)
Rなんとかという会社で
データエンジニア
最近CloudComposer2と戯れています

背景

  • データ基盤はもはや大規模サービスにのみ必要なものではない
  • スタートアップでもデータ基盤の需要は増えてきている
  • 今回 副業で enpay.Inc で構築した事例を紹介します

事前制約

  • 外部にダッシュボードを埋め込みで提供したい

重要視した方針

  • 汎用化
    • エンハンス/リプレイスしやすい技術を採用
  • 作り込まない
    • Airflow, Argo Workflow等ワークフローエンジンの採用を見送る
  • リスク最小化

どんなデータを集める?

  1. クライアントログ
  2. DB
  3. 各SaaS(kintone)

どこにデータを集める?

  • BigQuery
    • エコシステムが整って枯れているBigQueryに不満がなかった
    • 権限周り/cli周りの取り回し
  • Snowflakeのtrialしてみたいと思いつつ..

Q. どうやってデータを集める?

  • 真っ先にtroccoをtrialで導入し検討した
  • が要件に対してはコストが見合わなかったので断念
  • Embulk on CloudRunを採用
    • コンテナベースなので安心

DB

  • Aurora instanceから個人情報をすべてマスク済のsnapshotを作成
  • snapshotからS3にParquetでexport
    • S3にDBのデータがリスクのない状態で配置
  • CloudRun上で実行されるbq loadによりS3のParquetをBQにimport

SaaS

  • Embulk on CloudRun
  • CloudRunのroot endpointにアクセスすると実装済のすべてのembulk configをsequentialにembulk runする
    • 環境変数によって個別に実行可能
  • SaaS毎のendpointを作る等自由に拡張可能

ClientLog

  • Google Analytics
  • 必要な箇所で trackEvent を呼ぶだけでBQにほぼリアルタイムにロギングされる
export const EventTracker = {
  trackEvent: function (event_name: string, payload: any) {
    try {
      gtag('event', event_name, payload)
    } catch (error) {
        ...
    }
  },
}

どうやって使っている?

  • まずはsales/csメンバー向けのkintoneダッシュボード上でLookerダッシュボードを埋め込み表示
  • 今後エンドユーザーに便利ダッシュボードを公開予定

稼働状況

  • StepFunction, CloudRun共に
    daily jobは実装完了後一度も落ちていない

ランニングコスト

  • 実質無料
    • CloudRun & BQ (& CloudBuild)で200円くらい
    • CloudRun最高!

enpayのプロダクト/データに興味がある方はこちらへどうぞ!
Looker採用決定したCTOがカジュアルにトークします

まずは小さく始めよう

1 20