カテゴリー: 技術系

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

  • OpenSSLでCSRを発行したときに”.rnd”が開けないというエラーが出た

    OpenSSLでCSRを発行したときに”.rnd”が開けないというエラーが出た。エラーは出たが、CSRファイル自体は出力できた。

    Can't load /root/.rnd into RNG
    140466838241728:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd

    毎回エラーがでると、ドキッとするので、エラーが出ないようにした。

    `/etc/ssl/openssl.cnf `を開いて、下記の行をコメントアウトした。

    RANDFILE                = $ENV::HOME/.rnd

    これでコマンドを実行してもエラーが表示されなくなった。

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

    Google Apps Scripsから、Google Cloud SQLのMySQLに接続するコードのサンプル。このとき、Cloud SQLのMySQLは、MySQL 5.7よりも古くないと接続できない。

    DBへの接続は、JDBCを使用する。このとき、JDBCの読み込みは必要なく、GASのエディタ上で直接記述してよい。このサンプルでは、SSL(TLS)を使わないバージョン。通信経路が暗号化されないので、注意が必要。

    接続のチェックのため、コンソールログに、いろいろと書き出すようにしている。Logの部分はなくても、問題なし。

    function myFunction() {
      dbConnection();
    }
    // --------------------------------
    // SSL 接続なしで接続する
    // --------------------------------
    function dbConnection(){
      Logger.log('start dbConnection function.');
      // 接続先設定
      var connectionIp = 'xxx.xxx.xxx.xxx'; // 接続のMysqlのIPアドレス(ホスト名があれば、ホスト名も可)
      var userName = 'user'; // 接続で使うユーザ名
      var passwd = 'password'; // 接続で使うパスワード 変数名をpasswdにしているのは、コネクションInfoの作成時にキーワードと変数が同じになるのを避けるため。
      var databaseName = 'dbname'; // データベース名
      var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName;
      Logger.log('start mysql con');
      Logger.log(addr);
      var connectionInfo = {
        user: userName,
        password: passwd
      }
      var connection = Jdbc.getConnection(addr, connectionInfo);
      // 接続できたことを確かめるために、ログにDB名を出力。
      Logger.log(connection.getCatalog());
      // コネクションを閉じる
      connection.close();
      Logger.log('end');
    }
  • 新しくインストールしたUbuntuでNginxが起動しない

    新しくUbuntuをインストールして、NginxやPHPをインストールした。Nginxを起動させようとしたところ、エラーで起動せず。

    zen@dev:/etc/nginx/sites-available$ sudo service nginx start
    Job for nginx.service failed because the control process exited with error code.
    See "systemctl status nginx.service" and "journalctl -xe" for details.
    zen@dev:/etc/nginx/sites-available$
    zen@dev:/etc/nginx/sites-available$ sudo systemctl status nginx.service
    ● nginx.service - A high performance web server and a reverse proxy server
         Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
         Active: failed (Result: exit-code) since Wed 2021-11-17 16:13:11 JST; 2min>
           Docs: man:nginx(8)
        Process: 294747 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_pro>
        Process: 294758 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; >
    Nov 17 16:13:08 dev systemd[1]: Starting A high performance web serve>
    Nov 17 16:13:08 dev nginx[294758]: nginx: [emerg] bind() to 0.0.0.0:8>
    Nov 17 16:13:09 dev nginx[294758]: nginx: [emerg] bind() to 0.0.0.0:8>
    Nov 17 16:13:09 dev nginx[294758]: nginx: [emerg] bind() to 0.0.0.0:8>
    Nov 17 16:13:10 dev nginx[294758]: nginx: [emerg] bind() to 0.0.0.0:8>
    Nov 17 16:13:10 dev nginx[294758]: nginx: [emerg] bind() to 0.0.0.0:8>
    Nov 17 16:13:11 dev nginx[294758]: nginx: [emerg] still could not bin>
    Nov 17 16:13:11 dev systemd[1]: nginx.service: Control process exited>
    Nov 17 16:13:11 dev systemd[1]: nginx.service: Failed with result 'ex>
    Nov 17 16:13:11 dev systemd[1]: Failed to start A high performance we>
    zen@dev:/etc/nginx/sites-available$

    エラーを見ると、ポートのバインドに失敗している。もしやと思って調べると、Apacheがいて、ポート80で起動していた。Apacheを終了させると、無事にNginxを起動させることができた。

    aptでいろいろとインストールしていると、いつのまにかapache がいて邪魔をする。初歩的なミスだけど、よくやらかす。

  • .NET6で、gitignoreを生成する

    .NET6SDKがインストールされていれば、コマンドを実行するだけでgitignoreを生成できる。

    プロジェクトの状況を見ているわけではなく、テンプレートを生成してくれるだけなので、後から実態に合わせて編集する必要はある。それから、空のフォルダ上でも、”.gitgnore”は生成できる。

    PS C:\Dev\test> dotnet new gitignore 
    .NET 6.0 へようこそ! 
    --------------------- 
    SDK バージョン: 6.0.100 
    テレメトリ 
    --------- 
    .NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1'  または 'true' に設定できます。 
    .NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry 
    ---------------- 
    ASP.NET Core の HTTPS 開発証明書をインストールしました。 
    証明書を信頼するには、'dotnet dev-certs https --trust' (Windows および macOS のみ) を実行します。 
    HTTPS の詳細については、https://aka.ms/dotnet-https を参照してください 
    ---------------- 
    最初のアプリを作成するには、https://aka.ms/dotnet-hello-world を参照してください 
    最新情報については、https://aka.ms/dotnet-whats-new を参照してください 
    ドキュメントを探索するには、https://aka.ms/dotnet-docs を参照してください 
    GitHub で問題の報告とソースの検索を行うには、https://github.com/dotnet/core を参照してください 
    'dotnet --help' を使用して使用可能なコマンドを確認するか、https://aka.ms/dotnet-cli にアクセスしてください 
    -------------------------------------------------------------------------------------- 
    テンプレート "dotnet gitignore ファイル" が正常に作成されました。 
    PS C:\Dev\test>

    初回のみ、いろいろと表示された。コマンドの実行の2回目からは、「テンプレート “dotnet gitignore ファイル” が正常に作成されました。」とだけ表示される。

  • MySQLをSSLで接続するときのポート番号

    メモとして。

    MySQLデータベースに接続するとき、SSL接続のオプションを使うとき、何番ポートを使っているのか。ファイアウォールの許可などもあるので、調べてみた。

    MySQLに接続するとき、SSLのオプションをつけても、つけなくても、同じ3306番ポートを使っている。設定で3306番から変更している場合には、そのポート番号で受け付ける。

  • 2021年12月の時点でも、GASのJDBCからMySQL8.0に接続できない。

    昨年、Google App Scriptから、JDBC経由で、Google CloudのCloud SQL のMySQL 8.0のインスタンスに接続を試して、失敗した。JDBCがMySQL 8.0  に対応しておらず、接続エラーになるというものだった。

    あれから1年がたち、もう一度、試してみたが、Google App ScriptからJDBCを使って、MySQL 8.0のインスタンスに接続することはできなかった。まだ、MySQL 5.7のインスタンスまでしか対応していない。

    MySQL 5.7 のインスタンスには、GASから正常にアクセスできていることも、ついでに確認した。

  • Visual Studio 2019で.net6のアプリは開発できない。

    Visual Studio 2019と .net6 の組み合わせで開発できるかを試そうとしたのだが、.net6のダウンロードページには、Visual Studio 2019 は入っておらず、Visual Studio 2022からだった。

    https://dotnet.microsoft.com/download/dotnet/6.0

    .net6 のVisual Studioのサポートバージョン

    Visual Studio support
    Visual Studio 2022 (v17.0)
    Visual Studio 2022 for Mac (v17.0)

    https://dotnet.microsoft.com/download/dotnet/6.0

    ダメ元で、.net6をインストールして、Visual Studio 2019 を立ち上げて、新規プロジェクトを作ろうとしたが、core 3.1か. net5しか選択できなかった。

    .net6 のプレビュー版では、Visual Studio 2019が使えたところがあったので、対応するかと思っていたのだが、対応せず。Visual Studioのバージョンアップも必要だ。

  • さくらインターネットのVPSでは、IPv6は有効にする作業が必要。

    メモとして。さくらインターネットのVPSで、Ubuntu 20.04を立ち上げたが、IPv6のIPアドレスがインターフェースで有効になっていない。IPv6のアドレスは、「2017/4/18より 標準OSインストールにて新規にインストールされるOSはIPv6の設定が無効化されています。」とのこと。手動で、IPv6のアドレスの有効にする作業を行う必要あり。

    手順は、公式(↓)でアナウンスされているので、それに従う。

    https://manual.sakura.ad.jp/vps/network/ipv6/ubuntu20.html

    前にインストールしたときは、IPv6のアドレスが自動的に使えるようになっていたという記憶は間違えじゃなかった。