概要
- 前回記事の続き
- AppEngineから接続するDBインスタンスを作成する
- ここでのDBはCloudSQLを使用する
- そのままでは接続できないため、サーバレスVPCコネクタを作成する
- AppEngineからCloudSQLへ接続する
- データベース内のデータ作業をするため、GCEで踏み台サーバを作成する
VPCネットワーク
設定
- DBインスタンスが存在するためのVPCを作成する



- CloudSQLでDBインスタンスを作成する
- プライベートIPで接続させる
- パブリックIPは有効にしていないためCloudShellからは接続できない
CloudSQL
設定

*「割り当てて接続」を選択




- mysql rootユーザのパスワードを設定

- mysql 一般ユーザを作成

GCE
設定
* DBに接続するため同じVPC内にGCEで踏み台サーバを作成
- インスタンスを作成する



ファイアウォールルール
設定


- GCEインスタンスへ接続し、CloudSQLへ接続
$ ssh -i <path_to_privatekey> <os_user>@<gce_external_ip>
$ sudo apt upgrade
$ sudo apt-get install mariadb-client
$ mysql -uroot -h<cloudsql_private_ip> -p
Enter password:
$ create database test;
$ exit
公式:MySQL クライアントの Compute Engine からの接続
サーバレスVPCアクセス
設定
-
AppEngineからCloudSQL接続するためにサーバレスVPCコネクタを作成する
-
「コネクタ作成」


結合試験
設定
- CloudShellを起動
- app.yamlを以下のように記載
app.yaml
runtime: php72
service: <service_name>
vpc_access_connector:
name: "projects/<project_id>/locations/asia-northeast1/connectors/<vpc_connector_name>"
- AppEngineからデータベース接続を確認するためindex.phpを以下のように変更
- 先程作ったDB”test”に接続を試す
index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<?php
echo "Hello World";
echo '<br>';
$link = mysqli_connect('<cloud_sql_private_ip>', 'root', '<password>', 'test');
if (!$link) {
echo "データベース接続失敗" . PHP_EOL;
echo '<br>';
echo "errno: " . mysqli_connect_errno() . PHP_EOL;
echo "error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo 'データベース接続成功';
echo '<br>';
// 切断
mysqli_close($link);
?>
</body>
</html>
$ gcloud app deploy
$ gcloud app browse -s <service_name>
接続
- 出力されたアドレスでアクセスし、DB接続を確認

- カスタムドメインのアドレスでアクセスし、DB接続を確認

上記でAppEngineからCloudSQLの接続を設定・確認を完了