Google Apps Scripsから、Google Cloud SQLのMySQLにSSL(TLS)で通信を暗号化して接続するコードのサンプル。このとき、Cloud SQLのMySQLは、MySQL 5.7よりも古くないと接続できない。
DBへの接続は、JDBCを使用する。このとき、JDBCの読み込みは必要なく、GASのエディタ上で直接記述してよい。このサンプルでは、SSL(TLS)を使用するバージョン。接続にPEMファイルを使うため、あらかじめGoogle Cloud SQL側で発行しておく必要がある。
記載するPEMファイルの中身は、末尾に改行コードを表す”\n”をいれて、さらにコード上の改行を明示的にするために”\”を入れる必要があった。なので、PEMファイルの中身の末尾が”\n\”になっている。
接続のチェックのため、コンソールログに、いろいろと書き出すようにしている。Logの部分はなくても、問題なし。
サンプルコード。
function myFunction() {
dbConnection();
}
// --------------------------------
// SSLで接続する
// --------------------------------
function dbConnectionSSL(){
Logger.log('start dbConnection function.');
// 接続先設定
var connectionIp = 'xxx.xxx.xxx.xxx'; // 接続のMysqlのIPアドレス(ホスト名も可)
var userName = 'user'; // 接続で使うユーザ名
var passwd = 'pass'; // 接続で使うパスワード
var databaseName = 'dbname'; // データベース名
var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName + '?useSSL=true';
// SSL用の証明書を変数に入れる
var clientKey = '\
-----BEGIN RSA PRIVATE KEY-----\n\
MIIEowIBAAKCAQEAyDuIOE1t/ABFSMIz/2Ni4vIoaNvBkDLaeJdl6KmeK9iexl2D2d\n\
~~~中略~~~
P8B5s7xmSbH4Yv/OeKrw8F6xAmoQmWVlnw686I0QqNHexlwIe3lss2LDEI3d\n\
-----END RSA PRIVATE KEY-----';
var clientCert = '\
-----BEGIN CERTIFICATE-----\n\
MIIDVzCCAj+gAwIBAgIEJD9I+TANBgkqhkiG9w0BAQsFADB7MS0wKwYDVQQuEyRl\n\
~~~中略~~~
QNwLDry8Tk3DwnD07+dkQf+FFFu943GFUlY9d4Rv75S+Vwm2Ci2azIRR2Q==\n\
-----END CERTIFICATE-----';
var serverCa = '\
-----BEGIN CERTIFICATE-----\n\
MIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAB3MS0wKwDELW39xwSDyQ3ZjVm\n\
~~~中略~~~
bfgDM8ARAAqMqECaXYC8+xHviva4ON6weeD/wsdessDP9K3ws3mGKbbjlLmc=\n\
-----END CERTIFICATE-----';
Logger.log('start mysql con');
Logger.log(addr);
var connectionInfo = {
user: userName,
password: passwd,
_serverSslCertificate: serverCa,
_clientSslCertificate: clientCert,
_clientSslKey: clientKey
}
Logger.log(connectionInfo);
var connection = Jdbc.getConnection(addr, connectionInfo);
Logger.log(connection.getCatalog());
// コネクションを閉じる
connection.close();
Logger.log('end');
}