ついにGoogle App Scriptから、JDBC経由で、Google CloudのCloud SQL のMySQL 8.0のインスタンスに接続を試して、成功した。JDBCがMySQL 8.0 に対応した。(忘れていたけれど、2022年11月も成功していたようだ・・・)
なお、接続はSSL / TLS クライアント証明書による接続。
GASサンプルコード:接続して、DB名とバージョンを取得する
function myFunction() {
dbConnectionSSL()
}
// --------------------------------
// SSLで接続する
// --------------------------------
function dbConnectionSSL(){
Logger.log('start dbConnection function.');
// 接続先設定
var connectionIp = '34.xx.xx.xx'; // 接続のMysqlのIPアドレス(ホスト名も可)
var userName = 'username'; // 接続で使うユーザ名
var passwd = 'passowrd'; // 接続で使うパスワード
var databaseName = 'CT'; // データベース名
var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName + '?useSSL=true';
// SSL用の証明書を変数に入れる
var clientKey = '\
-----BEGIN RSA PRIVATE KEY-----\n\
zylvsBC2kozS3rAxO1KUeD+rUbdDC/0PDbANXi4s/96qEN9vV80WBfH7Ut1TDdWt\n\
~~~中略~~~
wGeppu4uYW4hSE6rATB+GhNwFJtAl1qz4M2nefKWBCc97wmZte/G\n\
-----END RSA PRIVATE KEY-----';
var clientCert = '\
-----BEGIN CERTIFICATE-----\n\
g+vn0NZqwTzhGhfXV9y7k0wsjqN3VjfvLSkSqinYRgDID/vb7FvAD3qyGyTiR9HT\n\
~~~中略~~~
l+AUFjEP\n\
-----END CERTIFICATE-----';
var serverCa = '\
-----BEGIN CERTIFICATE-----\n\
pIa8Cnto3SIGqcwdV1SjA8iS1ohC3t+2igQq9aykOjd51jSQlVRqsE5lYty1VhiX\n\
~~~中略~~~
fCcN9N2TqwxUXmD7g/+5lBi+wf+FBCPml/cyeRvDu5PZIqQ=\n\
-----END CERTIFICATE-----';
Logger.log('start mysql con');
Logger.log(addr);
var connectionInfo = {
user: userName,
password: passwd,
_serverSslCertificate: serverCa,
_clientSslCertificate: clientCert,
_clientSslKey: clientKey
}
// DBにコネクションをはるオブジェクトを作る
var connection = Jdbc.getConnection(addr, connectionInfo);
Logger.log(connection.getCatalog());
// Select文を実行するための処理
// sqlステートメントをデータベースに送信するためのオブジェクトを作る
var statement = connection.createStatement();
// sqlを実行して結果をオブジェクトに入れる
var result = statement.executeQuery('select @@version;');
// 結果を取り出す
while (result.next()) {
var name = result.getString('@@version');
// ログに出力する
Logger.log(name);
}
// コネクションを閉じる
connection.close();
Logger.log('end');
}
// -----------------------------------
// DB Connection close
// -----------------------------------
function dbConnectionClose(connection) {
Logger.log('start db connection close');
connection.close;
Logger.log('end db connection close');
}
