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

# はじめに

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

https://www.udemy.com/course/google-cloud-platform-gcp/

# やり方

# `CloudSQL`構築

## 任意のDBエンジンを選択する
![スクリーンショット 2022-01-13 2.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/a7704f82-01b3-b96d-da76-7c5480cb83b7.png)

## インスタンスを作成
![スクリーンショット 2022-01-13 2.27.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/20d25a3e-2202-8653-d3f4-6991b533edc4.png)

## DBを作成
![スクリーンショット 2022-01-13 2.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/392a3f33-db3c-758e-4d0b-26d1d0e53b3e.png)

## `Cloud SQL Admin API`を有効にする

![スクリーンショット 2022-01-13 2.53.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/6b2ca82a-9daa-405d-6aca-5712740f3954.png)

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

```bash
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/f9443370-d09f-7cb2-4842-7ff1b8801759.png)

## DBに接続

```bash
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を操作する

```sql
-- 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/0357b592-aebe-5b4c-3e75-427a92cf1f61.png)

![スクリーンショット 2022-01-13 3.26.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/eddd2378-1ede-0f1f-96a9-c8d8ca6af23a.png)

## `GCE`に`mysql-client`をインストール

```bash
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/ccb2c919-2f25-b8c1-88aa-455e6c9bd958.png)


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

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

```bash
sudo su -

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

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

# Apacheを再起動
systemctl restart httpd.service	
```

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

```php
<?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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555632/78bb01df-203b-60a4-67a0-b9bd28125627.png)