📔

【GCP】CloudSQLの作成〜GCEとの連携を行う備忘録

2022/01/13に公開

はじめに

インフラ周りを触ることが増えてきたので学習の備忘録として残しています

https://www.udemy.com/share/102dyS3@Fqxih5w5xCgeN-LuioLMABTv3vidCvgFPQ4P5ZUogMSwZxZzYM3cBLrxW-neks30/

やり方

CloudSQL構築

任意のDBエンジンを選択する

スクリーンショット 2022-01-13 2.23.31.png

インスタンスを作成

スクリーンショット 2022-01-13 2.27.53.png

DBを作成

スクリーンショット 2022-01-13 2.48.47.png

Cloud SQL Admin APIを有効にする

スクリーンショット 2022-01-13 2.53.31.png

有効にしていない場合はエラーが発生します

https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=640010116609 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

CLOUD SHELLを開く

スクリーンショット 2022-01-13 2.57.40.png

DBに接続

gcloud sql connect demo --user=root --quiet
Allowlisting your IP for incoming connection for 5 minutes...done.     
Connecting to database with SQL user [root].Enter password:

mysql>

DBを操作する

-- DB一覧を表示
show databases;
+--------------------+
| Database           |
+--------------------+
| demo               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.04 sec)

-- DBを切り替え
use demo;
Database changed

-- テーブルを作成
CREATE TABLE users (id int NOT NULL PRIMARY key AUTO_INCREMENT,name VARCHAR(255));

-- データをテーブルに登録
INSERT INTO users(name) VALUES('hoge');

-- テーブルデータを取得
mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
|  1 | hoge |
+----+------+
1 row in set (0.03 sec)

GCEからCloud SQLに接続する

VMインスタンスの外部IPアドレスをネットワークに追加する

スクリーンショット 2022-01-13 3.25.05.png

スクリーンショット 2022-01-13 3.26.12.png

GCEmysql-clientをインストール

sudo su -

# mariadb-clientをインストール(mysql-clientが統合されている)
apt-get -y install mariadb-client

# SQLのパブリックIPアドレスを入力しSQLに接続
mysql -u root -h パブリック IP アドレス -p

# 接続成功
MySQL [(none)]> 

スクリーンショット 2022-01-13 3.28.43.png

GCEからCloudSQLのデータを取得する

php-mysqlライブラリをインストールする

sudo su -

# パッケージ一覧を更新
apt-get -y update

# ライブラリをインストール
apt-get -y install php-mysql

# Apacheを再起動
systemctl restart httpd.service	

CloudSQLのデータを取得・表示する

<?php
try {
    $pdo = new PDO('mysql:host='パブリックIPアドレス名';dbname='DB';charset=utf8','ユーザ名','パスワード',
      [(PDO::ATTR_EMULATE_PREPARES => false)];
      echo "成功";
    } catch (PDOException $e) {
    echo "失敗";
}
?>

<?php
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "<p>";
    echo $row["name"];
    echo "</p>";
}
?>

CloudSQLに登録したデータを表示できれば成功

スクリーンショット 2022-01-13 4.03.18.png

GitHubで編集を提案

Discussion