Google Cloud Platformに戻る

Cloud SQL

Cloud SQLとは

Cloud SQL は、Google Cloud Platform (GCP) が提供するフルマネージドのリレーショナルデータベースサービスです。MySQL、PostgreSQL、SQL Serverなどの一般的なデータベースエンジンをクラウド環境で簡単に展開、管理、スケーリングできます。Cloud SQLはインフラストラクチャの管理、バックアップ、レプリケーション、パッチ適用などの運用タスクを自動化し、開発者がアプリケーション開発に集中できるようにします。

Cloud SQLの主な特徴

Cloud SQLのアーキテクチャ

Cloud SQLは以下の主要コンポーネントで構成されています:

コンポーネント 説明
インスタンス データベースサーバーを実行する仮想マシン。特定のリージョンとゾーンに配置される
データベース インスタンス内に作成される個々のデータベース
ストレージ データを保存する永続ディスク。自動的に拡張可能
バックアップ データベースの定期的なスナップショット。自動バックアップとオンデマンドバックアップが可能
レプリカ プライマリインスタンスのコピー。読み取りレプリカまたは高可用性用のスタンバイレプリカとして機能
ネットワーク インスタンスへの接続を制御するファイアウォールルールとVPCネットワーク

Cloud SQL と自己管理型データベースの違い

Cloud SQLと自己管理型データベースには以下のような違いがあります:

Cloud SQLインスタンスの作成と管理

Cloud SQLインスタンスは、Google Cloud Console、gcloud CLIツール、またはAPIを使用して作成および管理できます。

Google Cloud Consoleを使用したインスタンス作成

  1. Google Cloud Consoleにログイン
  2. Cloud SQLページに移動
  3. 「インスタンスを作成」をクリック
  4. データベースエンジン(MySQL、PostgreSQL、SQL Server)を選択
  5. インスタンス名、パスワード、リージョン、ゾーンなどを設定
  6. マシンタイプ、ストレージ容量、高可用性オプションなどを構成
  7. 「作成」をクリックしてインスタンスをプロビジョニング

gcloud CLIを使用したインスタンス作成

MySQLインスタンスの作成例

gcloud sql instances create my-mysql-instance \
    --database-version=MYSQL_8_0 \
    --tier=db-n1-standard-2 \
    --region=asia-northeast1 \
    --root-password=my-secure-password \
    --storage-size=100 \
    --storage-type=SSD \
    --availability-type=REGIONAL

PostgreSQLインスタンスの作成例

gcloud sql instances create my-postgres-instance \
    --database-version=POSTGRES_14 \
    --tier=db-n1-standard-2 \
    --region=asia-northeast1 \
    --root-password=my-secure-password \
    --storage-size=100 \
    --storage-type=SSD \
    --availability-type=REGIONAL

データベースの作成

インスタンスを作成した後、データベースを作成できます:

gcloud sql databases create my-database \
    --instance=my-mysql-instance

ユーザーの作成

データベースにアクセスするためのユーザーを作成します:

gcloud sql users create my-user \
    --instance=my-mysql-instance \
    --password=my-user-password

Cloud SQLへの接続

Cloud SQLインスタンスには複数の方法で接続できます:

Cloud SQL Proxyを使用した接続

Cloud SQL Proxyは、暗号化されたセキュアな接続を提供する推奨の接続方法です:

Cloud SQL Proxyのインストール

# Linuxの場合
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.0.0/cloud-sql-proxy.linux.amd64
chmod +x cloud-sql-proxy

# macOSの場合
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.0.0/cloud-sql-proxy.darwin.amd64
chmod +x cloud-sql-proxy

Cloud SQL Proxyの実行

./cloud-sql-proxy --instances=my-project:asia-northeast1:my-mysql-instance=tcp:3306

MySQLクライアントでの接続

mysql -u my-user -p -h 127.0.0.1

PostgreSQLクライアントでの接続

psql -U my-user -h 127.0.0.1 -d my-database

直接接続

パブリックIPアドレスまたはプライベートIPアドレスを使用して直接接続することもできます:

# パブリックIPアドレスを使用した接続
mysql -u my-user -p -h 35.189.203.xxx

# プライベートIPアドレスを使用した接続(VPC内から)
mysql -u my-user -p -h 10.0.0.xxx

アプリケーションからの接続

アプリケーションからCloud SQLに接続する例:

Node.jsでのMySQL接続例

const mysql = require('mysql2/promise');

async function connectToDatabase() {
  const connection = await mysql.createConnection({
    host: '127.0.0.1', // Cloud SQL Proxyを使用する場合
    user: 'my-user',
    password: 'my-user-password',
    database: 'my-database'
  });
  
  const [rows] = await connection.execute('SELECT * FROM users');
  console.log(rows);
  
  await connection.end();
}

connectToDatabase();

Javaでの接続例(PostgreSQL)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class CloudSqlExample {
  public static void main(String[] args) {
    try {
      String url = "jdbc:postgresql://127.0.0.1:5432/my-database";
      Connection conn = DriverManager.getConnection(url, "my-user", "my-user-password");
      
      Statement stmt = conn.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM users");
      
      while (rs.next()) {
        System.out.println(rs.getString("name"));
      }
      
      rs.close();
      stmt.close();
      conn.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Cloud SQLの高度な機能

高可用性構成

高可用性(HA)構成では、プライマリインスタンスと同じリージョン内の別のゾーンにスタンバイレプリカが作成されます:

gcloud sql instances create my-ha-instance \
    --database-version=MYSQL_8_0 \
    --tier=db-n1-standard-2 \
    --region=asia-northeast1 \
    --root-password=my-secure-password \
    --availability-type=REGIONAL

既存のインスタンスを高可用性に変更:

gcloud sql instances patch my-mysql-instance \
    --availability-type=REGIONAL

読み取りレプリカの作成

読み取りレプリカを作成して読み取りワークロードを分散できます:

gcloud sql instances create my-read-replica \
    --master-instance-name=my-mysql-instance \
    --region=asia-northeast1

クロスリージョンレプリカの作成:

gcloud sql instances create my-cross-region-replica \
    --master-instance-name=my-mysql-instance \
    --region=asia-northeast2

バックアップとリストア

自動バックアップの構成:

gcloud sql instances patch my-mysql-instance \
    --backup-start-time=23:00 \
    --backup-location=asia \
    --retained-backups=7

オンデマンドバックアップの作成:

gcloud sql backups create --instance=my-mysql-instance

バックアップからのリストア:

gcloud sql instances restore my-mysql-instance \
    --backup-id=1234567890

ポイントインタイムリカバリ:

gcloud sql instances restore my-mysql-instance \
    --restore-time=2023-08-01T12:00:00Z

Cloud SQLのセキュリティベストプラクティス

SSL/TLSの強制

gcloud sql instances patch my-mysql-instance \
    --require-ssl

監査ログの有効化(MySQL)

gcloud sql instances patch my-mysql-instance \
    --database-flags=log_output=FILE,slow_query_log=on,general_log=on

Cloud SQLのモニタリングとロギング

Cloud SQLはGoogle Cloud Monitoringおよびロギングと統合されており、データベースの健全性とパフォーマンスを監視できます:

主なモニタリング機能

クエリインサイトの有効化

クエリインサイトを有効にして、データベースのパフォーマンスを最適化できます:

gcloud sql instances patch my-mysql-instance \
    --insights-config-query-insights-enabled \
    --insights-config-query-string-length=4096 \
    --insights-config-query-plans-per-minute=20

Cloud SQLのコスト最適化

Cloud SQLのコストを最適化するためのベストプラクティス:

インスタンスの停止と再開

# インスタンスの停止
gcloud sql instances patch my-mysql-instance --activation-policy=NEVER

# インスタンスの再開
gcloud sql instances patch my-mysql-instance --activation-policy=ALWAYS

Cloud SQLのトラブルシューティング

Cloud SQLで発生する一般的な問題とその解決方法:

問題 考えられる原因 解決策
接続エラー ファイアウォールルール、認証情報の誤り、ネットワーク構成の問題 ファイアウォールルールを確認
認証情報を確認
Cloud SQL Proxyを使用して接続
パフォーマンスの低下 リソース不足、非効率なクエリ、インデックスの欠如 クエリインサイトでスロークエリを特定
インデックスを追加
インスタンスサイズをアップグレード
ディスク容量不足 データ増加、一時ファイル、ログファイル ストレージサイズを増加
不要なデータを削除
自動ストレージ増加を有効化
レプリケーションの遅延 高負荷、ネットワーク問題、大きなトランザクション レプリカのマシンタイプをアップグレード
大きなトランザクションを分割
ネットワーク帯域幅を確認

診断クエリ集

Cloud SQLのユースケース

Cloud SQLは以下のようなユースケースに適しています:

Cloud SQLとの統合サービス

Cloud SQLは他のGoogle Cloudサービスと統合して、より強力なアプリケーションを構築できます:

サービス 統合の利点
Cloud Run サーバーレスアプリケーションからデータベースに安全に接続
GKE コンテナ化されたアプリケーションからデータベースにアクセス
App Engine マネージドアプリケーションプラットフォームとデータベースの統合
Cloud Functions サーバーレス関数からデータベース操作を実行
BigQuery Cloud SQLのデータをBigQueryにエクスポートして分析
Dataflow ETLパイプラインでCloud SQLのデータを処理
Cloud IAM データベースアクセスの一元管理

まとめ

Cloud SQL は、Google Cloud Platform上でのリレーショナルデータベースの管理を簡素化するフルマネージドサービスです。MySQL、PostgreSQL、SQL Serverなどの一般的なデータベースエンジンをサポートし、運用タスクを自動化することで、開発者はアプリケーション開発に集中できます。

Cloud SQLの主な利点は以下の通りです:

Cloud SQLを効果的に活用するには、適切なインスタンスサイズの選択、セキュリティ対策の実装、パフォーマンスの最適化、コスト管理が重要です。また、他のGCPサービスと組み合わせることで、スケーラブルで信頼性の高いアプリケーションを構築することができます。