GASからCloud SQL(MySQL)にSSL接続するコード

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');
}

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする