Google Cloud の Cloud SQL って何だろう?
はじめに
こんにちは!クラウドエース株式会社の金井です。
今回は初学者向けに Google Cloud の Cloud SQL について書かせていただきます。
Cloud SQL はフルマネージドなリレーショナル データベースを提供するサービスですが、これだけでは何ができるかイメージしにくいと思います。
そこで今回の記事では Cloud SQL の機能について簡単に説明した後、コンソールでの作成方法を紹介していきます。
Cloud SQL とは
まず Cloud SQL が何かを公式ドキュメントから見てみましょう。
Cloud SQL は、
- MySQL
- PostgreSQL
- SQL Server
のフルマネージド リレーショナル データベース サービスです。Cloud SQL はフルマネージド RDBMS サービスであるため、インフラは Google が管理してくれる点が特徴です。
そのため、ユーザーはインフラ周りを気にする必要がなく、上記 3種類の DB を使用することができます。
Cloud SQL には多数の機能が用意されているため、データベースサービスを自分で構築して管理したり、バックアップやメンテナンスをユーザーが行う必要はありません。
以下はそれぞれの特徴をまとめた表になります。
機能 | MySQL | PostgreSQL | SQL Server |
---|---|---|---|
サポートされるバージョン | 5.6, 5.7, 8.0 | 9.6, 10, 11, 12, 13, 14 | 2012, 2014, 2016, 2017, 2019 |
ライセンス | オープンソース (GNU GPL) | オープンソース (PostgreSQL License) | プロプライエタリ (Microsoft EULA) |
トランザクションサポート | ✓ | ✓ | ✓ |
JSONサポート | ✓ (8.0以上) | ✓ | ✓ (2016以上) |
リードレプリカ | ✓ | ✓ | ✓ (2016以上) |
自動バックアップ | ✓ | ✓ | ✓ |
ポイントインタイムリカバリ | ✓ | ✓ | ✓ |
高可用性オプション | ✓ (マルチゾーンレプリカ) | ✓ (マルチゾーンレプリカ) | ✓ (Always On 可用性グループ) |
パフォーマンス | 高速な読み書き、 高度な拡張性 | 複雑なトランザクション処理と 高度な拡張性 | 大規模なデータ処理と ビジネスインテリジェンス |
拡張性 | 水平スケーリング | 水平スケーリングは難しい | 水平スケーリングは難しい |
セキュリティ機能 | 豊富な認証と認可 | 豊富な認証、暗号化、 行レベルセキュリティ | 豊富な認証、暗号化、 行レベルセキュリティ |
サポートされるプラットフォーム | Linux, Windows, macOS | Linux, Windows, macOS | Windows |
ユーザーはデータそのものに集中し、次のようなオペレーションを Google に任せることができます。
- バックアップ
- 高可用性とフェイルオーバー
- ネットワーク接続
- エクスポートとインポート
- メンテナンスと更新
- モニタリング
- ロギング
次の章からは各機能について紹介をしていきます。
Cloud SQL の機能紹介
- バックアップ
バックアップはその名の通り、データベースのデータを定期的にコピーし、データの損失や障害発生時にデータを復元できるように保存してくれる機能です。
この機能によってデータが失われた際、 Cloud SQL インスタンスに復元できます。また、インスタンスに問題がある場合には、以前の正常な状態にバックアップからCloud SQL インスタンスを上書きすることができます。
バックアップには
-
オンデマンド バックアップ
-
自動バックアップ
の二種類があります。
オンデマンド バックアップは手動で実行できるバックアップです。一度バックアップを取得すれば、バックアップを削除するか、インスタンスを削除するまでバックアップとして存在し続けます。
一方、自動バックアップは4時間のバックアップ時間枠内に毎日行われます。毎日自動で行ってくれるため、手軽な代わりに保存期間は最大で365日(一年)となっています。 -
参考:Cloud SQL バックアップについて | Cloud SQL for MySQL | Google Cloud
- 高可用性とフェイルオーバー
前提として、可用性とはシステムやサービスが継続して稼働し続け、安定して利用することができる能力のことを指します。
高可用性はシステムやサービスが使用不能になることが少ない、と言い換えることができます。
Cloud SQL ではこの高可用性を実現するために、SQL インスタンスを作成したリージョン内にプライマリゾーンとセカンダリゾーンの二つを用意します。
このゾーンそれぞれにプライマリ インスタンス、スタンバイ インスタンスが作成されます。
各ゾーンの永続ディスクへプライマリ インスタンスへの書き込みのすべてが複製される点がポイントです。
ゾーンやインスタンスへ障害が発生した際、スタンバイ インスタンスがプライマリインスタンスとなり、システムやサービスの稼働を継続させます。
このプロセスをフェイルオーバーと呼びます。サービスを継続して稼働させ続ける必要がある際には非常に便利な機能になります。
- ネットワーク接続
Cloud SQL インスタンスの接続方法にはパブリック IP とプライベート IP があります。
Cloud SQL においてパブリックIP は公共のインターネット経由で cloud SQL インスタンスへアクセスできることを意味します。
一方でプライベート IP は公共のインターネット経由ではアクセスできず、VPC 経由でのアクセスを想定しています。用途にあった接続方法を選択しましょう。
ただし、パブリック IP では Cloud SQL Auth Proxy か承認済みネットワークのどちらかを使用してアクセスを制限する必要があります。
また、プライベート IP でも任意で Cloud SQL Auth Proxy やセルフマネージド SSL 証明書のいずれかを使用しないと接続できない設定をすることもできます。
- インポートとエクスポート
Cloud SQL のエクスポート機能ではデータベースのデータを SQL ダンプファイルまたは CSV ファイルとして Cloud Storage にエクスポートできます。
エクスポートをすることでデータベースのバックアップやデータベース移行、複製、データ分析を円滑に行うことができます。
インポート機能では、エクスポート機能とは逆にCloud Storage に保存されている SQL ダンプファイルまたは CSV ファイルをデータベースにインポートできます。
インポートによってバックアップからの復元やデータ更新が可能です。
- メンテナンスと更新
Cloud SQL はフルマネージドサービスなので、Google がデータベースとオペレーティングシステムのメンテナンスと更新を自動的に行います。
常に最新の状態に保たれ、セキュリティとパフォーマンスが最適化されます。
インスタンスの稼働中に定期的に行われるメンテナンスではデータベースエンジンやオペレーティングシステムの更新、セキュリティパッチの適用などを行ってくれます。
また、計画的メンテナンスと呼ばれるハードウェアのアップグレードやデータセンターの移行などの大規模なメンテナンスもあります。このメンテナンスは短期間サービスが中断される場合もありますが、事前に時間枠や曜日を指定できるため、稼働中のサービスになるべく影響が出ないように調整が可能です。
メンテナンス自体を一定期間拒否することも可能です。この機能を使えばメンテナンス拒否期間は 1~90 日の範囲で設定することが可能になります。
Enterprise Plus Edition のインスタンスで HA 構成(高可用性)を有効にすることで、計画的メンテナンス時のダウンタイムを 1 秒未満に抑えることができます。
- モニタリング
Cloud SQL はインスタンスのパフォーマンス、可用性、正常性を監視することができます。
CPU 使用率、メモリ使用率、ディスク I/O などのメトリクスを監視し、パフォーマンスの最適化に役立てることができます。
また、アラートを設定することで特定のしきい値を超えた際にアラートを通知できます。
例えば CPU 利用率が 80% を超えた時、メールで通知を行うように設定したりすることができます。
- ロギング
Cloud SQL はデータベース運用やトラブルシューティングに役立つロギング機能が備わっています。
例えば SQL クエリの実行履歴を表示したり、エラー発生時に出力されるログを表示することもできます。
SQL クエリのログは一般的なログを出力するように設定する必要があります。
general_logを有効にし、log_outputフラグを「FILE」に設定することでSQL クエリのログがファイル出力されます。
また、監査ログといったデータアクセスやシステムイベントのログを確認することもできます。
データベース フラグを構成することも可能です。例えばデータベースフラグ の slow_query_log を on にすることで、遅いクエリをログから特定することも可能です。
- 参考:Cloud SQL インスタンスのログを表示する | Cloud SQL for MySQL | Google Cloud
- 参考:Cloud SQL データベース フラグを構成する | Cloud SQL for MySQL | Google Cloud
コンソールでの作成方法
コンソールからの Cloud SQL の作成方法をご紹介します。
- Cloud SQL のデータベースエンジンの選択
- インスタンス作成時に MySQL、PostgreSQL、SQL Server の中から好きなものを選択して作成できます
- インスタンス作成時に MySQL、PostgreSQL、SQL Server の中から好きなものを選択して作成できます
- インスタンスの作成
- Cloud SQL のエディションを選択します
- エディションの違いは主に可用性 SLA の違い、メンテナンス時のダウンタイムやデータキャッシュの有無、総合的な金額があります
- エディションのプリセットを選択
- プリセットごとの違いは以下のようになります
- 本番環境プリセットから順にメモリやストレージが減少する
- その分費用は安くなる
- 本番環境以外はシングルゾーン構成となる
- エディションとプリセットの変更はSQL インスタンスの立ち上げ後は行えないため、要件に合わせた選択をするようにしましょう
- 今回は
- プリセットごとの違いは以下のようになります
- データベースのバージョン設定とインスタンス ID を指定
- バージョンや ID (インスタンスの名前) の変更もインスタンス作成後変更ができないため注意しましょう
- パスワード設定も行います。パスワードは SQL インスタンス作成時に自動で作成されるデフォルトのユーザーである root ユーザーのパスワードとなります
- root ユーザーは Cloud SQL においてすべての権限を保持しているユーザーとなるため、実際に Cloud SQL を使用して開発をする際には非推奨なユーザーアカウントです
- 使用するリージョンとゾーンの可用性
- リージョンは使用される場所に近いリージョンの選択 (日本ならば東京や大阪のリージョン) の方がパフォーマンスは向上します
- リージョンによっては価格が安価に抑えられたり、環境に配慮した Google Cloud リージョンも選択できます
- ゾーンの可用性について、以下のメリット・デメリットがあります
- メリット
- 複数のゾーンを選択した高可用性のインスタンスを作成できる設定のため、同一の Cloud SQL インスタンスがもう一つ作成され、障害時にフェイルオーバーしてくれるようになる
- 高可用性を実現できる
- デメリット
- インスタンス数が倍になる分金額も倍となる
- 書き込みのパフォーマンスはシングルゾーン構成よりも劣ってしまう場合がある
- メリット
- こちらの設定項目もインスタンス作成後は変更できないため慎重に選びましょう
- 料金の見積もり
- インスタンス設定から確認できます
- 動作確認をしたいだけであればこの部分をできるだけ安く抑えられるように各種設定を確認することをおすすめします
Cloud SQL インスタンスの操作
Cloud SQL インスタンスの作成後、簡単な動作確認をしてみましょう。
インスタンスの構成は以下のようなものを使用します。
-
ユーザーとデータベースの作成
まずはユーザーを作成します。 root ユーザーでも様々な操作は可能ですが、基本的に権限の強すぎる root ユーザーの使用は非推奨なため、新規にユーザーを作成することをお勧めします。
以下の画像のようにコンソールからユーザーは作成できます。
パスワードは指定もできますが、この後使用するのでメモをしておきましょう。
次にデータベースを作成しておきます。こちらもコンソールから作成できます。今回は画像のようなデータベースを作成します
-
インスタンスへの接続
作成した Cloud SQL インスタンスへ接続を行います。
今回は Cloud Shell による gcloud コマンドを使った接続方法を紹介します。Cloud Shell とはウェブブラウザからアクセスできる、クラウド上の仮想マシンでコマンドライン操作ができるツールです。
まず、以下のコマンドを実行します。 INSTANCE_NAME と USER_NAME にはそれぞれ作成した Cloud SQL インスタンスの名前とユーザー名を入れてください。
gcloud sql connect INSTANCE_NAME --user=USER_NAME
するとパスワードの入力が求められます。正しいパスワードを入力し、エンターを押します。
画像のように Cloud SQL へ接続ができたことを示すメッセージが表示されます。これで Cloud SQL インスタンスへの接続ができました。
- データベースへのアクセスと書き込み
次に Cloud SQL インスタンス内のデータベースへアクセスするためのコマンドを実行します。 DATABASE_NAME には作成したデータベース名を入れてください。
USE DATABASE_NAME;
データベースには現在何もないため、テーブルを作成します。
今回は CREATE TABLE コマンドを使用し、ユーザーの名前とメールアドレスを保存するテーブルを作成します。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
作成後、データの書き込みを行ってみます
INSERT INTO users (name, email) VALUES ('田中太郎', 'tanaka@example.com');
書き込みができているか、確認を行います。
- テーブルの一覧を確認
SHOW TABLES;
- 指定したテーブルの中身の確認
SELECT * FROM users;
画像のように書き込みが確認できれば成功です。
- Cloud SQL の削除
最後に Cloud SQL インスタンスの削除を行います。Cloud SQL インスタンスは存在する限り料金が生じてしまうため、使用しない Cloud SQL インスタンスは停止するか削除をしましょう。
削除するためにはまず Cloud SQL インスタンスの削除からの保護が無効になっていることを確認します。有効の場合は無効に設定し、インスタンスの更新を行います。
コンソールから削除を選択すると画像のようにインスタンスの名前の入力を求められます。今回は削除して問題がないため、名前を入力して削除をします
まとめ
いかがでしたでしょうか。
今回は Cloud SQL がどのようなものかの解説と作成手順を紹介しました。
Cloud SQL には数多くの機能がある一方、設定できる内容を理解していないと SQL DB 作成のミスにつながりやすくなってしまいます。
また、Cloud SQL はインスタンスを起動している限り料金が発生します。料金に関しては特に注意して設定することをお勧めします。
本記事が Google Cloud 初心者の皆さんの助けになれば幸いです。
Discussion