Google Cloud ハンズオン教科書|2026-08 版
第 9 章 試験ガイド 1.3 試験ガイド 2.2

リレーショナルデータベース — Cloud SQL・AlloyDB・Spanner

HA 構成とグローバル整合。RDB 3 兄弟の使い分けを設計する

この章で学ぶこと

試験ガイド対応: セクション 1.3(ネットワーク、ストレージ、コンピューティング リソースの設計)、2.2(ストレージ システムの構成)

RDB 3 兄弟の全体像 — どれを選ぶか

前章のオブジェクトストレージが「ファイルの置き場」だったのに対し、本章はトランザクションを伴う構造化データ、つまりリレーショナルデータベースを扱います。Google Cloud のマネージド RDB は 3 つあります。Cloud SQL は MySQL・PostgreSQL・SQL Server をそのまま動かす定番のマネージド RDB、AlloyDB for PostgreSQL は PostgreSQL 互換のまま性能を引き上げた Google 独自エンジンの上位版、Spanner は書き込みまで水平スケールするグローバル分散 RDB です。まず選択の順序を頭に入れましょう。

複数リージョンでの書き込みや 99.999% の可用性が必要? Spanner グローバル分散・水平スケール はい いいえ PostgreSQL 互換のまま性能と 分析(HTAP)を強化したい? AlloyDB 高性能 PostgreSQL 互換 はい いいえ 既存の MySQL / PostgreSQL / SQL Server 互換をマネージドで Cloud SQL 定番のマネージド RDB はい
図 9-1 RDB 選択のデシジョンツリー。まず「書き込みの水平スケール・99.999%」という Spanner でしか満たせない要件を切り分け、次に PostgreSQL 互換の性能要件で AlloyDB を検討する。残る大多数の「既存 RDB をそのまま」が Cloud SQL の領分。
観点Cloud SQLAlloyDB for PostgreSQLSpanner
互換性MySQL / PostgreSQL / SQL Server をそのままPostgreSQL 完全互換GoogleSQL と PostgreSQL 互換の 2 方言
書き込みスケール単一プライマリ(垂直スケール)単一プライマリ + リードプール(読み取りのみ水平)自動シャーディングで水平スケール
可用性 SLA(2026-08 時点)Enterprise 99.95% / Enterprise Plus 99.99%99.99%(メンテナンス込み)リージョナル 99.99% / マルチリージョン 99.999%
得意分野既存アプリの lift & shift、汎用 Web バックエンド高負荷 OLTP + リアルタイム分析(HTAP)グローバル分散、超大規模 OLTP
コスト感共有コアから小さく始められるCloud SQL より高性能・高価格帯プロビジョニング課金(最小 100 processing units)
試験の視点: データベース選択問題はキーワードのマッピングでほぼ解けます。「グローバルに分散」「水平スケール」「強整合性」「99.999%」→ Spanner。「PostgreSQL のまま性能を上げたい」「トランザクションと分析を 1 つの DB で」→ AlloyDB。「オンプレの MySQL / SQL Server を最小変更で移行」→ Cloud SQL。逆に「リレーショナルである必要がない」ことを示すヒント(柔軟なスキーマ、キー値アクセス)が出たら第 10 章の NoSQL、「分析専用ならデータウェアハウス」なら 第 11 章の BigQuery に切り替えます。

Cloud SQL — 定番のマネージド RDB

Cloud SQL は MySQL・PostgreSQL・SQL Server の 3 エンジンに対応するフルマネージドのリレーショナルデータベースです。実体としては、各インスタンスが Google 管理の VM + 永続ディスク + 静的 IP アドレスで構成され(第 4 章の部品と同じ土台です)、バックアップ・HA とフェイルオーバー・メンテナンスとパッチ適用・モニタリングを Google 側が引き受けます。利用者は SQL とスキーマ設計に集中できる、というのがマネージド DB の価値です。オンプレからの移行では Database Migration Service が使えます(第 17 章)。

2 つのエディション

Cloud SQL には Enterprise と Enterprise Plus の 2 エディションがあり、SLA・メンテナンスの影響・性能機能が異なります(2026-08 時点)。

項目EnterpriseEnterprise Plus
可用性 SLA99.95%(メンテナンス除く)99.99%(メンテナンス込み)
計画メンテナンスの停止時間60 秒未満1 秒未満(ニアゼロダウンタイム)
性能機能標準データキャッシュで読み取り性能最大 4 倍など
DR 機能基本(クロスリージョンレプリカ)高度な DR(write endpoint による切り替え)

学習用途やスモールスタートは Enterprise の共有コアマシン(db-f1-micro など)で十分です。試験では「メンテナンスの停止も許されない」「読み取り性能を強化したい」という文言が Enterprise Plus を指すシグナルになります。

高可用性(HA)構成 — リージョナルインスタンス

Cloud SQL の HA 構成はリージョナルインスタンスとも呼ばれ、同一リージョン内の異なるゾーンにプライマリとスタンバイの 2 台を配置します。書き込みは、トランザクションのコミットが応答される前に両ゾーンの永続ディスクへ同期複製されるため、フェイルオーバーでコミット済みデータは失われません。プライマリの死活は毎秒のハートビートで監視され、応答が複数回途絶えるとスタンバイへの自動フェイルオーバーが始まります。切り替え中は 60 秒程度利用できなくなります(2026-08 時点のドキュメント記載値。環境により変動)。

リージョン asia-northeast1 ゾーン a ゾーン b プライマリインスタンス スタンバイインスタンス 永続ディスク 永続ディスク 書き込み 同期複製 ハートビート(毎秒) コミット応答は両ゾーンのディスクへの複製完了後 障害検知でスタンバイが自動昇格 — ダウンタイムは約 60 秒(2026-08 時点)
図 9-2 Cloud SQL の HA 構成(リージョナルインスタンス)。守っているのはゾーン障害までで、リージョン全体の障害にはクロスリージョンのリードレプリカで備える。スタンバイは通常時にクエリを受け付けない点に注意。

設計上の注意は 2 つです。第一に、スタンバイは読み取りクエリを処理しません。純粋な待機系です。第二に、HA 構成の料金は CPU・RAM・ストレージが 2 台分になるため単体構成の 2 倍です。「可用性のための HA」と「読み取りスケールのためのリードレプリカ」は目的が別物です。

リードレプリカ — 読み取りスケールとクロスリージョン DR

リードレプリカはプライマリのデータを非同期で複製する読み取り専用のコピーです。レポート集計や参照系トラフィックをオフロードしてプライマリの負荷を下げるのが本来の用途で、別リージョンに置くクロスリージョンレプリカにすればリージョン障害への備え(DR)や低レイテンシの読み取り拠点にもなります。レプリカの下にさらにレプリカをぶら下げるカスケードレプリカはプライマリを含めて最大 4 階層まで構成でき、プライマリ直下のレプリカ数は 10 以下が推奨です(2026-08 時点)。

HA 構成(可用性) リードレプリカ(読み取りスケール) プライマリ スタンバイ 同期複製 自動フェイルオーバーあり スタンバイは読み取り不可 同一リージョン内(ゾーン障害対策) 料金は単体構成の 2 倍 プライマリ リードレプリカ 非同期複製 自動フェイルオーバーなし(手動昇格) 読み取りクエリをオフロード クロスリージョン配置可(DR に活用) 昇格すると独立インスタンスに
図 9-3 同じ「もう 1 台」でも目的が違う。可用性(自動フェイルオーバー)が欲しければ HA、読み取りスケールやクロスリージョン DR が欲しければリードレプリカ。要件が両方あるなら併用する。

重要な違いとして、リードレプリカにはフェイルオーバー機能がありません。プライマリが失われたときは、レプリカを独立したインスタンスへ手動で昇格(プロモート)します。昇格したレプリカは書き込み可能な単体インスタンスになり、配下のカスケードレプリカは階層ごと引き継がれます。

バックアップとポイントインタイムリカバリ

Cloud SQL のバックアップは初回を除いて増分バックアップで、自動バックアップ(スケジュール実行)とオンデマンドバックアップ(任意のタイミングで作成、明示的に削除するまで保持)の 2 種類があります。さらにポイントインタイムリカバリ(PITR)を有効にすると、バックアップ時点だけでなく「昨日 14:32 の状態」のような任意の時点へ復元できます。仕組みは、自動バックアップを土台に、そこからのトランザクションログ(MySQL ではバイナリログ)を連続適用するものです。したがって PITR には自動バックアップとバイナリログの両方が有効であることが前提で、復元は常に新しいインスタンスとして行われます。既存インスタンスをその場で巻き戻すことはできません。

接続方法 — Auth Proxy とプライベート IP

データベースは作って終わりではなく、「どこから・どう安全につなぐか」が設計問題です。Cloud SQL の接続は次の 3 パターンを押さえます。

方法仕組み使いどころ
Cloud SQL Auth Proxy / コネクタIAM 認証と TLS 暗号化をプロキシが自動処理。承認済みネットワークの登録が不要パブリック IP 経由でも安全に接続したいとき。接続元 IP が変動するクライアント
プライベート IPVPC 内部アドレスで直接接続(private services access または Private Service Connect)本番の Google Cloud 内アプリ。セキュリティ推奨・低レイテンシ(第 3 章)
パブリック IP + 承認済みネットワーク接続元 IP レンジを明示的に許可リスト登録固定 IP を持つ外部クライアント。学習・検証用途

公式ドキュメントの推奨は、セキュリティ観点でプライベート IP、認証観点でIAM データベース認証です。パブリック IP を使うなら Auth Proxy などのコネクタを挟み、承認済みネットワークを広く開けることは避けます。

試験の視点: Cloud SQL の頻出論点は「HA とリードレプリカの役割の区別」と「RTO / RPO への対応づけ」です。ゾーン障害への自動復旧 → HA 構成、リージョン障害への備え → クロスリージョンレプリカ(昇格は手動)、誤オペレーションで消したデータを直前の状態に戻す → PITR、と要件から機構へ変換できるようにしておきましょう。「スタンバイで読み取りもしたい」という選択肢は Cloud SQL では誤りです。

AlloyDB for PostgreSQL — PostgreSQL 互換の高性能版

AlloyDB for PostgreSQL は、PostgreSQL 完全互換のインターフェースに Google 製データベースエンジンとクラウドネイティブな分散アーキテクチャを組み合わせたフルマネージド DB です。Cloud SQL for PostgreSQL と同じアプリケーションコード・ドライバがそのまま動きつつ、より高い性能と可用性を狙うワークロードの受け皿になります。

位置づけとしては「Cloud SQL for PostgreSQL では性能が足りない、しかし Spanner ほどの水平スケールとグローバル分散は要らない」という中間帯を埋めるプロダクトです。MySQL や SQL Server の互換性が要る場合は選択肢に入りません。

Spanner — 水平スケールとグローバル整合

外部整合性と自動シャーディング

Spanner は、リレーショナルの整合性と NoSQL 級の水平スケールを両立させた Google 独自の分散データベースです。リレーショナルに加えてグラフ・キー値・検索のモデルを 1 つのサービスに統合しており、SQL インターフェースは GoogleSQL と PostgreSQL 互換の 2 方言から選べます。

最大の特徴が外部整合性(external consistency)です。これは「分散トランザクションであっても、全世界のどこから見てもコミットの順序が実際の時刻順と一致する」という、単一マシンの直列化可能性をグローバル規模に広げた最強クラスの整合性保証です。全 Google サーバーに提供される高可用の分散クロック TrueTime がこれを支えています。またデータはスプリットという単位に自動分割(自動シャーディング)され、スプリットはサーバー間を独立に移動して負荷を分散します。コンピュート容量は稼働中のインスタンスに対して後から増減できます。

インスタンス構成と SLA

Spanner のインスタンスは、レプリカをどこへ配置するかを決めるインスタンス構成を選んで作成します(2026-08 時点。エディションは Standard / Enterprise / Enterprise Plus の 3 つで、デュアルリージョン以上は Enterprise Plus が必要です)。

リージョナル構成 — SLA 99.99% マルチリージョン構成 — SLA 99.999% ゾーン a RW レプリカ ゾーン b RW レプリカ ゾーン c RW レプリカ 書き込みは 3 レプリカ中 2 つの合意でコミット 例: regional-asia-northeast1 リージョン A RW レプリカ ×2 デフォルトリーダー リージョン B RW レプリカ ×2 同期レプリケーション witness リージョン 投票のみ参加 書き込みは投票レプリカ 5 つ中 3 つの合意
図 9-4 Spanner のレプリカ配置と書き込みクォーラム。書き込みは投票レプリカの過半数の合意でコミットされるため、リージョナル構成では 1 ゾーン、マルチリージョン構成では 1 リージョンを失っても書き込みを継続できる。

コンピュート容量(processing units)と無料トライアル

Spanner の性能はコンピュート容量で決まり、単位は processing units(PU)またはノードです。1,000 PU = 1 ノードで、100 PU 単位で指定できるため、1 ノード未満の小さなインスタンスから始められます。ストレージは 100 PU あたり 1,024 GiB、1 ノードあたり 10 TiB まで使えます(2026-08 時点)。課金は「使ったクエリ数」ではなくプロビジョニングした容量 × 時間で、レプリカ数分のノード時間に対して発生し、最低 1 時間分から按分されます。CPU 使用率などに応じて容量を自動調整するマネージドオートスケーラーも利用できます。

学習用には無料トライアルインスタンスが用意されています。90 日間・データ 10 GB・最大 5 データベースまで使えますが、SLA の適用外で、バックアップや CMEK は使えません。有効な請求先アカウントが必要で、作成できるのはプロジェクトのライフサイクルにつき 1 つ、請求先アカウントにつき最大 5 つです。期限が来る前に、ダウンタイムなしで有料インスタンスへアップグレードできます(2026-08 時点)。

ハンズオン 9-1|Cloud SQL for MySQL インスタンスを作って接続する

共有コアの最小インスタンスを作り、Cloud Shell から接続して SQL を実行します。所要 30〜45 分(インスタンス作成の待ち時間を含む)。費用の目安: db-f1-micro 1 台を 1 時間弱 — 数円〜十数円程度。Cloud SQL に無料枠はないので、終わったら必ず削除します。コマンドは Cloud Shell 実行を想定しています(ローカルの gcloud CLI でも同じです)。

  1. Cloud SQL Admin API を有効化する。プロジェクトは第 1 章で作った学習用プロジェクトを使う(gcloud config get-value project で確認)
gcloud services enable sqladmin.googleapis.com
  1. MySQL 8.0 の最小インスタンスを作成する。ROOT_PASSWORD は自分で決めた管理者パスワードに置き換える。作成完了まで数分〜10 分程度かかる
gcloud sql instances create handson-mysql \
  --database-version=MYSQL_8_0 \
  --tier=db-f1-micro \
  --region=asia-northeast1 \
  --root-password=ROOT_PASSWORD
  1. 状態を確認する。STATUS が RUNNABLE になれば準備完了
gcloud sql instances list

期待される出力(要点列のみ抜粋):

NAME           DATABASE_VERSION  LOCATION           TIER         STATUS
handson-mysql  MYSQL_8_0         asia-northeast1-b  db-f1-micro  RUNNABLE
  1. Cloud Shell から接続する。このコマンドは Cloud Shell の IP を 5 分間だけ承認済みネットワークに登録し、mysql クライアントを起動する(「Allowlisting your IP for incoming connection for 5 minutes...done.」と表示される)。パスワードを聞かれたら手順 2 のものを入力
gcloud sql connect handson-mysql --user=root
  1. mysql プロンプトでデータベースとテーブルを作り、読み書きを確認して切断する
CREATE DATABASE handson;
USE handson;
CREATE TABLE books (id INT PRIMARY KEY, title VARCHAR(100));
INSERT INTO books VALUES (1, 'Cloud SQL 入門'), (2, 'PCA 合格ガイド');
SELECT * FROM books;
EXIT;

後片付け: インスタンスを削除し、一覧に何も残っていないことを確認します。

gcloud sql instances delete handson-mysql --quiet
gcloud sql instances list
ハンズオン 9-2|Spanner インスタンスを作って SQL を実行する

最小の 100 PU リージョナルインスタンスを作り、DDL と DML を gcloud だけで実行します。所要 20〜30 分。費用の目安: 100 PU は 1 ノードの 1/10 のノード時間として時間課金され、最低 1 時間分が課金されます。1 時間以内に削除すれば少額(東京リージョンの最新単価は公式の Spanner 料金ページで確認)ですが、無料枠はありません。

課金注意: Spanner はクエリを 1 回も投げなくても、インスタンスが存在する限りコンピュート容量に課金され続けます。このハンズオンは必ず最後の削除まで一気に実行してください。請求先アカウントの条件を満たすなら、コンソールから無料トライアルインスタンス(90 日・10 GB)を作って代用しても構いません。
  1. API を有効化し、東京リージョンのリージョナル構成に 100 PU・Standard エディションのインスタンスを作成する
gcloud services enable spanner.googleapis.com
gcloud spanner instances create handson-spanner \
  --config=regional-asia-northeast1 \
  --description="PCA handson" \
  --processing-units=100 \
  --edition=STANDARD
  1. データベースを作成する(GoogleSQL 方言。PostgreSQL 方言にしたい場合は --database-dialect=POSTGRESQL を付ける)
gcloud spanner databases create handson-db \
  --instance=handson-spanner
  1. DDL でテーブルを作る。Spanner の GoogleSQL では主キーを括弧の外に書くことに注目
gcloud spanner databases ddl update handson-db \
  --instance=handson-spanner \
  --ddl='CREATE TABLE Players (PlayerId INT64 NOT NULL, Name STRING(100)) PRIMARY KEY (PlayerId)'
  1. DML で行を挿入し、クエリで読み出す
gcloud spanner databases execute-sql handson-db \
  --instance=handson-spanner \
  --sql="INSERT INTO Players (PlayerId, Name) VALUES (1, 'Sato'), (2, 'Suzuki')"
gcloud spanner databases execute-sql handson-db \
  --instance=handson-spanner \
  --sql='SELECT PlayerId, Name FROM Players ORDER BY PlayerId'

期待される出力:

PlayerId  Name
1         Sato
2         Suzuki

後片付け: インスタンスを削除すると配下のデータベースも一緒に消えます。一覧が空になることまで確認します。

gcloud spanner instances delete handson-spanner --quiet
gcloud spanner instances list

つまずきポイント

HA を有効にしたのに読み取りが速くならない: Cloud SQL の HA スタンバイは純粋な待機系で、クエリを一切処理しません。料金だけ 2 倍になって「性能が変わらない」と混乱しがちです。読み取りをスケールさせたいならリードレプリカを追加します。可用性と読み取りスケールは別の機構で解決する、が Cloud SQL の原則です。
Spanner の削除し忘れは高くつく: Spanner はプロビジョニング課金のため、アイドル状態でも PU × 時間で課金され続けます。学習で作ったインスタンスの消し忘れは課金事故の典型です。第 1 章で設定した予算アラートが最後の砦になるので、ハンズオン前に有効なことを確認しましょう。また無料トライアルインスタンスはプロジェクトのライフサイクルにつき 1 つしか作れないため、「消してもう一度」はできません。
PITR で今のインスタンスに巻き戻せない: Cloud SQL の PITR は常に新しいインスタンスを作って復元します。「本番インスタンスをその場でロールバック」はできず、復元後にアプリの接続先を切り替える運用まで含めて DR 手順を設計する必要があります。さらに PITR は自動バックアップとバイナリログが有効でなければ使えません。無効のまま障害を迎えると任意時点への復元手段がなくなります。
接続まわりの落とし穴: gcloud sql connect はパブリック IP インスタンス前提で、Cloud Shell からプライベート IP のインスタンスには届きません。また「つながらないから」と承認済みネットワークに 0.0.0.0/0 を登録するのは、データベースをインターネットに公開するのと同じで厳禁です。本番はプライベート IP か Auth Proxy / コネクタ + IAM 認証を使います。

理解度チェック

Q1. Cloud SQL の HA 構成のスタンバイとリードレプリカは何が違う?

スタンバイは同期複製 + 自動フェイルオーバーで可用性を守るための待機系で、読み取りクエリは処理できません。リードレプリカは非同期複製の読み取り専用コピーで、読み取りのオフロードやクロスリージョン DR に使いますが、自動フェイルオーバーはなく、障害時は手動で昇格します。

Q2. ポイントインタイムリカバリ(PITR)を使うための前提条件と、復元先の制約は?

自動バックアップとトランザクションログ(MySQL ならバイナリログ)の両方が有効であることが前提です。復元は常に新しいインスタンスの作成として行われ、既存インスタンスをその場で巻き戻すことはできません。

Q3. Spanner を 1 ノード未満の容量で使うには? そのときのストレージ上限は?

processing units(PU)を 100 PU 単位で指定します(1,000 PU = 1 ノード)。ストレージは 100 PU あたり 1,024 GiB、1 ノード以上では 1 ノードあたり 10 TiB まで使えます(2026-08 時点)。課金はプロビジョニングした容量に対する時間課金です。

Q4.(試験形式)世界中で展開するオンラインサービスが、全リージョンからの書き込みを強い整合性で処理でき、99.999% の可用性を満たすリレーショナルデータベースを求めている。選ぶべきは?
A. Cloud SQL Enterprise Plus + クロスリージョンリードレプリカ B. AlloyDB プライマリ + リードプール C. Spanner マルチリージョン構成 D. Firestore マルチリージョン

C。「グローバル書き込み + 強整合 + 99.999%」は Spanner マルチリージョン構成の定義そのものです。A はレプリカが非同期・読み取り専用で書き込みは単一リージョンのプライマリに集中し、SLA も 99.99% 止まり。B も単一リージョンの単一プライマリで 99.99%。D はリレーショナルデータベースではないため、SQL とリレーショナルスキーマを前提とする要件に合いません。

Q5.(試験形式)オンプレの MySQL 8.0 をアプリ改修なしで移行し、ゾーン障害時には自動でフェイルオーバーさせたい。計画メンテナンスの停止時間も 1 秒未満に抑えたい。最適な構成は?
A. Cloud SQL for MySQL Enterprise Plus・HA 構成 B. Cloud SQL for MySQL Enterprise・単一ゾーン + リードレプリカ C. AlloyDB・HA クラスタ D. Spanner リージョナル構成

A。MySQL 互換 + 自動フェイルオーバー(HA 構成)+ 計画メンテナンス 1 秒未満(Enterprise Plus)をすべて満たします。B のリードレプリカには自動フェイルオーバーがありません。C の AlloyDB は PostgreSQL 互換で MySQL は動きません。D の Spanner は MySQL 互換ではなく、アプリ改修なしの移行という要件に反します。

まとめと次章へ

リレーショナルで持つ必然性がないデータ — 柔軟なスキーマのドキュメント、超大量の時系列、キャッシュ — には、それぞれ専用のデータベースがあります。次の第 10 章では Firestore・Bigtable・Memorystore を取り上げ、ストレージプロダクト全体の選択マップを完成させます。