Redashのデータソース移行プロジェクト:Amazon AuroraからBigQueryへ
株式会社カンリー / yyoosshh
メンバー / SRE / 従業員規模: 101名〜300名
ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|
11名〜50名 | 2025年3月 | B to B |
ツールの利用規模 | 11名〜50名 |
---|---|
ツールの利用開始時期 | 2025年3月 |
事業形態 | B to B |
アーキテクチャ
アーキテクチャの意図・工夫
今回のデータソース移行においては、日次でAmazon Auroraからエクスポートされたデータを安定的かつ確実にBigQueryへ転送するため、S3上のオブジェクト管理方法に工夫を加えました。
特に、Lambdaを活用してS3上のオブジェクトを固定パスへ移動・削除する仕組みを実装しています。
この実装には次の2つの理由があります。
Google Cloud Data Transfer(DTS)側で参照するデータソースパスを固定化する必要があったため
DTSは指定されたパスを基準にデータ転送を行うため、パスが動的に変わる構成では安定した転送ができません。Step Functions経由で実行されるAuroraからS3へのエクスポート時に自動付与されるexport-id-xxxxを除去する必要があったため
このIDが付与されたままだと、DTS側で参照パスが都度変わり、運用上の管理が煩雑になります。
また、現在はStep Functions内の処理としてAWS Glueを用い、BigQueryへ転送する前に個人情報のマスキング処理を実施しています。これにより、分析環境における個人情報保護を担保しつつ、必要なデータのみをBigQuery側に保持できるようにしています。
加えて、Step Functionsの実行状況は監視対象としており、成功・失敗などのステータスはリアルタイムで検知しています。実行結果はSlackの専用チャネルへ通知される仕組みとし、異常時には即座に検知・対応できるよう運用しています。
これらの理由から、Lambdaでエクスポート後にオブジェクトを指定の固定パスに移動し、不要なファイルを削除する処理を組み込みました。
これにより、DTS側では常に同じ固定パスを参照でき、日次でのデータ転送を安定的かつ自動化された形で実現しています。
また、s3 sync --delete
コマンドを活用することで、古いデータの残存を防ぎ、常に最新データのみが保持される運用を可能にしました。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
カンリーでは、CS業務におけるデータの可視化と分析にRedashを活用していましたが、本番DBであるAmazon Auroraに直接クエリを実行する構成であったため、以下の課題を抱えていました。
大規模プロモーション時の負荷増大
通常の運用時には問題はなかったものの、顧客店舗に関連するCM放映など大規模なプロモーションが実施されるとサービスへのアクセスが急増し、分析用の重いクエリが本番DBに負荷をかけ、サービスパフォーマンスに影響を及ぼすリスクがあった。分析業務への制約
本番DBへの負荷を抑えるため、アクセスが集中する時間帯やプロモーション期間中には複雑なクエリや大量データの集計を避けざるを得ず、分析チームが必要なデータをタイムリーに取得できなかった。業務上の意思決定や改善施策を迅速に進めることが難しい状況であった。
こうした本番DBへの負荷問題と分析の柔軟性欠如が、改善すべき大きな課題として存在していました。
どのような状態を目指していたか
目指したのは、以下の状態です。
- 本番DBへの負荷を大幅に軽減し、アクセス集中時でもサービスパフォーマンスを損なわないこと
- 分析チームが必要なデータをタイムリーに取得でき、柔軟かつ高速に分析業務を実施できること
- 単なる一時的な対処ではなく、将来的に他プロダクトにも適用可能な拡張性の高いデータ基盤を構築すること
このために、Redashのデータソースを本番DBから切り離し、負荷をかけずに大規模データを効率よく処理できる構成が求められました。
移行先としては、以下の理由からBigQueryを選定しました。
- 既存のRedashクエリ資産を活かせること
- 大規模データに対する高速なクエリ処理能力を備えていること
- Google Cloudエコシステムとの連携が容易であること
最終的には、Amazon AuroraからエクスポートされたデータをS3経由でBigQueryに取り込み、日次で安定したデータ同期を行うことで、正確性を担保しつつ運用コストも最適化された状態を目指しました。
比較検討したサービス
- Auroraリードレプリカを分析専用として増やし、カスタムエンドポイントを利用し、分析専用のリクエストを集約する方法
- 分析専用のDWHとしてのRedshiftの活用
比較した軸
今回のデータソース移行では、単に本番DBへの負荷を軽減するだけでなく、将来的に他プロダクトにも展開できる共通分析基盤を整えることを重視していました。
特に重要視したのは、"マルチプロダクトのデータを横断して利用できるかどうか" という点です。
サービスが増えるにつれて、各プロダクト単位で独立した分析基盤を構築すると、データのサイロ化が進み、横断的な集計や分析が困難になります。
そのため、複数プロダクトのデータを同一基盤上に集約し、プロダクトをまたいだデータ活用や分析が容易に行える仕組みが必要でした。
BigQueryは大規模データを効率的に処理できるだけでなく、データセット単位でのアクセス制御やプロダクト間でのデータ共有が容易であり、マルチプロダクト展開に適していると判断しました。
導入の成果
改善したかった課題はどれくらい解決されたか
本番DBへの負荷軽減は、ほぼ完全に解消されました。
Redashのクエリ実行先をBigQueryに切り替えたことで、分析クエリが本番Auroraに送られることはなくなり、プロモーション時などアクセスが急増するタイミングでもサービスパフォーマンスに影響が出ることは一切なくなりました。
また、負荷を気にしてクエリを制限する必要がなくなったことで、分析チームは必要なデータを好きなタイミングで取得できるようになり、運用上の制約もほぼ解消されています。
どのような成果が得られたか
分析基盤の安定性と柔軟性が大幅に向上しました。
特に、BigQueryへの移行により大規模データに対するクエリ処理速度が向上し、従来よりも高速に結果を得られるようになっています。
また、Parquet形式の採用によりデータ転送量が抑えられ、データ保有コストも削減されています。
さらに、今回構築したS3を経由したデータ転送基盤は他のプロダクトにも展開が進んでおり、すでに複数のサービスで同様の仕組みが活用されています。
これにより、各プロダクトにおいても安定したデータ分析環境が整い、複数サービスのデータを横断的に活用した高度な分析や、業務改善施策の精度向上といった新たなアウトカムが生まれています。
結果として、単一プロダクトにとどまらず、組織全体のデータ分析力を底上げする成果につながっています。
導入に向けた社内への説明
上長・チームへの説明
1. データ分析チームへの説明
データソースがAuroraからBigQueryに変更されることについて、単なるシステム都合ではなく、背景にある意図を明確にしました。
具体的には、プロモーション時の負荷増大などにより本番DBが分析クエリで圧迫されるリスクを軽減する必要があること、そしてBigQueryを活用することで従来よりも大規模データを扱いやすくなり、データ分析の柔軟性が向上することを説明しました。
さらに、今回の移行により、これまで負荷を考慮して避けざるを得なかった複雑な集計や大量データを伴う分析が実行可能になること、また、日次で安定して更新されるデータ基盤により、タイムリーかつ正確な分析が可能になる点を具体的に伝えました。これにより、単なる「移行」ではなく、データ分析チーム自身が日常業務で得られる価値が大きい取り組みであることを強調しました。
2. 上長・マネジメント層への説明
特に、BigQueryを活用することでマルチプロダクト横断でのデータ活用が可能になり、今後のサービス拡大において共通基盤として機能することを重視しました。
従来の構成ではプロダクトごとにデータが分断され、横断的な集計や分析が難しい状況でしたが、BigQueryを導入することで、複数サービスのデータを一元的に管理し、プロダクト間でのデータ活用が容易になります。
また、Auroraのクラスター拡張など短期的な負荷軽減策ではなく、長期的なデータ活用戦略に基づく選択であることも説明しました。インフラ管理の手間が少なく、スキャン課金モデルによりコスト予測が立てやすい点を示し、これが単なるシステム改善ではなく、事業全体の成長を支えるための投資であることを共有しました。
活用方法
よく使う機能
BigQuery Data Transfer Service (DTS)
- S3からBigQueryへのデータロードを自動化する主要機能。
- 日次バッチでS3にエクスポートされたParquetファイルを、スケジュール設定によって定期的にBigQueryへ取り込むことが可能。
- S3内の特定パスを参照し、指定されたスケジュールで自動的にテーブルへロードする仕組み。
ツールの良い点
運用負荷がほぼゼロ スケジュール実行が標準機能として提供されているため、日次バッチのトリガーやジョブ管理を別途構築する必要がない。AWS側でAuroraからS3へのエクスポートさえ行えば、BigQuery側での取り込みは自動化できる。
Parquet対応によるコストと速度の最適化 Parquet形式を変換せずにロードできるため、データ処理が高速であり、スキャン量が抑えられることでコスト削減にもつながる。スキーマ推定も自動化されており、テーブル作成が簡易化される。
BigQueryの最適化機能がそのまま利用可能 パーティショニングやクラスタリングなど、BigQuery標準の最適化機能がDTS経由でも利用できる。特に日次でのデータ連携と相性が良い。
マネージドサービスによる保守不要 インフラのメンテナンスやジョブの再試行管理を自前で実装する必要がない。失敗時もGoogleCloudコンソールやモニタリング機能で追跡できる。
ツールの課題点
柔軟な前処理ができない
DTSは単純なロード機能であり、カラムマスキング、フィルタリング、結合などのETL処理は別途実装が必要となるという課題があった。
この点については、Step Functions内でAWS Glueを用いることで、個人情報カラムのマスキングなど必要な前処理をBigQueryに取り込む前に実施する形で対応している。ただし、Glueを組み込む分、処理設計やジョブ管理の工数が増える点は考慮が必要である。転送タイミングが限定される
基本的にスケジュール実行前提であり、今回の構成も日次バッチ運用となっている。そのため、データ更新からBigQueryへの反映までに最長1日のタイムラグが発生する。リアルタイム性が求められる分析用途には適さないが、今回はAuroraへの負荷軽減を優先したため、この構成を選択している。
株式会社カンリー / yyoosshh
メンバー / SRE / 従業員規模: 101名〜300名
よく見られているレビュー
株式会社カンリー / yyoosshh
メンバー / SRE / 従業員規模: 101名〜300名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法