Cloud Service
Datastream
本番DBに負荷をかけずに変更を準リアルタイムで取り込み、分析基盤へ届けるサーバーレスな CDC・レプリケーションサービス。AWS の DMS(CDC)相当。
- 1.ソースDBのトランザクションログを読み取り、変更を準リアルタイムで配信するマネージド CDC サービス。
- 2.MySQL/PostgreSQL/Oracle/SQL Server などから BigQuery や Cloud Storage へサーバーレスで連携できる。
- 3.全量コピーではなくログベースの差分取り込みなので、ソースDBへの負荷を抑えられる。
解決する課題
運用中の本番データベースに重い負荷をかけず、その変更を分析基盤や別システムへ準リアルタイムで届けたい、というニーズに応えます。
- 分析のたびに本番DBへ直接クエリすると負荷が高い → 変更だけを別基盤に流して分析を切り離したい
- バッチで全量コピーすると遅く・重い → トランザクションログ由来の**差分(CDC)**で軽く取り込みたい
- レプリケーション基盤の構築・運用が面倒 → サーバーレスでマネージドに任せたい
- ソースDBと分析用 BigQuery の鮮度差を縮め、ほぼ最新のデータで分析・可視化したい
主要概念と用語
- CDC(Change Data Capture): テーブルを丸ごと読み直すのではなく、DBのトランザクションログから挿入・更新・削除の変更だけを抽出して伝える方式
- ソース(source): 変更を取り出す元のデータベース。MySQL / PostgreSQL / Oracle / SQL Server などに対応
- デスティネーション(destination): 変更を書き込む先。BigQuery または Cloud Storage を選べる
- 接続プロファイル(connection profile): ソース・デスティネーションへの接続情報(ホスト・認証・ネットワーク経路)を再利用可能な形で定義したもの
- ストリーム(stream): ソースの接続プロファイルとデスティネーションの接続プロファイルを結びつけ、対象スキーマ・テーブルや取り込み設定を持つ複製ジョブ本体
- バックフィル(backfill): ストリーム開始時に既存データを一括で初期コピーする処理。以降は CDC で差分のみを継続取り込みする
仕様・制限・クォータ
- 対応ソースは MySQL / PostgreSQL / Oracle / SQL Server など。デスティネーションは BigQuery / Cloud Storage が中心(対応バージョンや組み合わせは更新されるため公式の最新一覧を確認)
- CDC を使うにはソース側でログ出力の有効化が前提。MySQL はバイナリログ、PostgreSQL は論理レプリケーション(レプリケーションスロット)、Oracle はアーカイブログ/補足ロギングなど、エンジンごとの設定が要る
- 取り込みは準リアルタイムであり、厳密な同期ではなく多少の遅延を伴う
- スキーマ変更(列追加など)の追従可否や、特定のデータ型・大きなオブジェクトの扱いには制約がある
- 同時実行ストリーム数やスループットなどに上限があり、プロジェクト/リージョン単位のクォータとして管理される
具体的なクォータ値・対応バージョン・料金は変動するため、本番設計時は公式ドキュメントの最新値を参照してください。
内部の仕組み
Datastream はソースDBのトランザクションログを継続的に読み取り、行レベルの変更イベント(挿入・更新・削除)として取り出します。ストリーム開始時にはまず既存データをバックフィルで初期コピーし、その後はログから得た差分のみを流し続けるため、全量スキャンを繰り返すよりソースDBへの負荷が小さくなります。
取り出した変更は、デスティネーションに応じて書き込み方法が変わります。BigQuery を選ぶと、ソースの変更がテーブルへ準リアルタイムに反映(マージ)され、ほぼ最新の状態を分析対象にできます。Cloud Storage を選ぶと、変更イベントが Avro や JSON などのファイルとして連続的に書き出され、後段の Dataflow や Dataproc などで自由に加工・取り込みできます。
ストリームは「最初に既存データを一括コピー(バックフィル)」「以降はログ差分のみを取り込み(CDC)」という二段構えで動きます。初回だけ重く、定常運用では軽い、という挙動を理解しておくと、開始直後の負荷やデータ鮮度の見積もりがしやすくなります。
設計パターン / ベストプラクティス
- 分析用途では BigQuery デスティネーションを選び、本番DBの鮮度に近いデータで分析・ダッシュボードを更新する
- 自由な前処理や複数システム連携が要るなら Cloud Storage デスティネーションにし、後段の Dataflow / Dataproc で変換する
- ソース側のログ設定(バイナリログ・論理レプリケーション・アーカイブログなど)を事前に有効化し、ログ保持期間を取り込み遅延より十分長くしておく
- 接続は限定公開(プライベート)接続を基本にし、インターネットへ DB を公開しない
- 対象テーブルやスキーマを必要な範囲に絞り、不要なテーブルまで取り込まないことでスループットとコストを抑える
運用・監視
- Cloud Monitoring / Cloud Logging でストリームの状態・スループット・取り込み遅延(鮮度)を可視化する
- ストリームが一時停止・失敗した場合は、ソース側のログ保持切れ・権限不足・ネットワーク経路を確認する
- ログ保持期間を超えて停止すると差分を取りこぼすおそれがあるため、長期停止時は再バックフィルの要否を検討する
- スキーマ変更を行う際は、追従可否と影響範囲を事前に確認してから適用する
コスト
課金の基本は「処理したデータ量(取り込み・配信されたバイト)」を軸にした従量制です。加えて、デスティネーション側の BigQuery ストレージ/クエリや Cloud Storage 保存、ネットワーク転送など、連携先の費用も合わせて発生します。
| コスト軸 | 課金の中身 | 最適化のヒント |
|---|---|---|
| Datastream 処理量 | 取り込み・配信したデータ量 | 対象テーブルを絞り不要な変更を流さない |
| デスティネーション | BigQuery 保存・クエリ / Cloud Storage 保存 | 保持期間やパーティション設計を見直す |
| ネットワーク | リージョン間・外向き転送 | ソースとデスティネーションのリージョンを揃える |
| 初期バックフィル | 既存データ一括コピー分の処理量 | 必要なテーブルだけ初回コピー対象にする |
定常運用では CDC 差分が中心で軽くなりますが、初回バックフィルや大量更新が走るタイミングでは処理量が増える点に注意します。
セキュリティ
- 転送経路は**限定公開接続(VPC ピアリングなどのプライベート経路)**を基本にし、DB をインターネットへ公開しない
- ソースDBへは専用の最小権限ユーザーで接続し、レプリケーション・読み取りに必要な権限のみを付与する
- アクセス制御は IAM で行い、ストリームや接続プロファイルの操作権限を最小化する
- 保存・転送時の暗号化や監査ログ(Cloud Audit Logs)で、データの流れと操作を追跡できるようにする
Datastream はソースDBのログを読める前提で動きます。ログ出力(バイナリログ・論理レプリケーション・アーカイブログ等)が無効だったり、接続ユーザーの権限が不足していると、ストリームが開始できない・止まる原因になります。権限は付けすぎず、必要最小限に絞るのが原則です。
関連サービス・比較
GCP 内では、変更を BigQuery に流して分析する、または Cloud Storage に書き出して Dataflow / Dataproc で加工する、という連携が中心になります。Datastream は「ソースから変更を取り出して届ける CDC 部分」を担い、その先の保存・変換・分析は連携先サービスが担当する、という役割分担です。AWS で最も近いのは、DMS(Database Migration Service)の CDC 機能です。
| 観点 | Datastream(GCP) | AWS DMS(CDC) |
|---|---|---|
| 位置づけ | サーバーレスな CDC・レプリケーション | DB移行・継続レプリケーション |
| 取り込み方式 | ログベースの CDC+初期バックフィル | 全ロード+ログベース CDC |
| 主なデスティネーション | BigQuery / Cloud Storage | RDS / S3 / Redshift など多数 |
| 運用モデル | サーバーレス(基盤管理不要) | レプリケーションインスタンスを管理 |
| 主な用途 | 分析基盤への準リアルタイム連携 | 移行と継続レプリケーション全般 |
分析がゴールなら BigQuery デスティネーションで直結が手軽です。前処理や複数システムへの分配が要るなら Cloud Storage に書き出し、Dataflow(ストリーミング変換)や Dataproc で加工してから取り込む構成にすると柔軟です。
ハンズオン / CLI例
# ソース(MySQL)への接続プロファイルを作成
gcloud datastream connection-profiles create mysql-src \
--location=asia-northeast1 \
--type=mysql \
--mysql-hostname=10.0.0.5 \
--mysql-port=3306 \
--mysql-username=datastream \
--mysql-password=CHANGE_ME_USE_SECRET_MANAGER \
--display-name="mysql source"
# デスティネーション(BigQuery)への接続プロファイルを作成
gcloud datastream connection-profiles create bq-dest \
--location=asia-northeast1 \
--type=bigquery \
--display-name="bigquery destination"
# ソースとデスティネーションを結ぶストリームを作成
gcloud datastream streams create my-stream \
--location=asia-northeast1 \
--source=mysql-src \
--destination=bq-dest \
--display-name="mysql to bigquery" \
--mysql-source-config=source-config.json \
--bigquery-destination-config=dest-config.json \
--backfill-all
# ストリームを開始(バックフィル後に CDC へ移行)
gcloud datastream streams update my-stream \
--location=asia-northeast1 \
--state=RUNNING \
--update-mask=state
Google Cloud Service
Datastreamを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
データベース
比較で見る軸
クラウド: Google Cloud / カテゴリ: データベース / 難易度: intermediate
導入後に効く点
MySQL/PostgreSQL/Oracle/SQL Server などから BigQuery や Cloud Storage へサーバーレスで連携できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- データベース
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / cost / performance
判断チェックリスト
- 自社の用途が「データベース / operational」に近いか確認する。
- 強みである「ソースDBのトランザクションログを読み取り、変更を準リアルタイムで配信するマネージド CDC サービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。