💧

GCEもMashuも永久無料枠でクリーンに評価する

2023/09/04に公開

はじめに

当社の提供しているMashuというメタデータ管理サービスがあります。
https://services.robon.co.jp/mashu

Mashuは、30テーブルまでクレジットカード登録不要(=無料)なので、Windows PC一台で、オンプレミスのRDBMS(Oracle)接続を評価する記事を書きました。
https://zenn.dev/robon/articles/df4cea32587479

ですが、会社のPCにDockerとかOracleとか入れたくないし…という方もいるかも?ということで、GCEの無料枠を使って、そこにPostgreSQLもインストールすれば、完全無料で、どこにも影響を与えずに評価できるじゃん。という記事です。

評価しよう

Google Compute Engine(GCE)

https://cloud.google.com/free/docs/free-cloud-features?hl=ja#compute

上記の範囲だと無料になります。今回は、リージョンはアメリカの西側オレゴン(us-west1)にします。

Google Cloud Platformの開始

https://console.cloud.google.com/から始めます。(後出しなんで、効率良くも書けますが、

まぁ、あるんで、Compute Engineを選びますよね。で、行くと

プロジェクトを作成しなさいと言われるので従います。(タダで機械の体が貰えると言えば

そして、APIを有効にする

には、お金が必要と言われます。

クレジットカードを登録すると、APIが有効にできて、

インスタンスを作成できるようになるので、無料になるように設定します。

オレゴン(us-west1)で、マシンをe2-microにして、

ブートディスクを標準永続ディスク30GBにします。今回はUbuntuにしました。

HTTPSを通したいので、トラフィックを許可しておきます。VMインスタンスの一覧に追加されるので、一覧内のSSHボタンを押すと、ブラウザベースのSSHターミナルが使えます。

Ubuntuの設定

初期化

途中、確認されますが、プロンプトはYで、CUIはスペースで進みます。

sudo apt update
sudo apt dist-upgrade
sudo shutdown -r now

Dockerのインストール

https://docs.docker.com/engine/install/ubuntu/
Set up the repository の 2.Add Docker's official GPG Key をやります。

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

3.Use ther following command to setup the repository もやります。

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4.Update the apt package index もやります。

sudo apt-get update

Install Docker Engine が目的なので、やります。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

PostgreSQLのインストールと初期設定

https://www.postgresql.org/download/linux/ubuntu/

sudo apt-get install postgresql

でインストールはできるので、UNIX認証で接続するためにパスワードを設定して、ユーザーを切り替えます。

sudo passwd postgres
su - postgres

ユーザーを切り替えた状態で、DBを作ります。

createdb mashu

ユーザーを作ります。■■■■ は、パスワードなので、自分で決めてください。

$ psql
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
Type "help" for help.

postgres=# create role mashu with login password '■■■■';
CREATE ROLE
postgres=# \q

権限を付与します。

$ psql mashu
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
Type "help" for help.

mashu=# grant all on all tables in schema public to mashu;
GRANT
mashu=# \q

postgresユーザーのセッションを終了して、mashuユーザーでcreate tableしておきます。

$ psql -h localhost -U mashu -d mashu
Password for user mashu: 
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

mashu=> \i create_table.sql

今回使ったSQLは、こちら
https://github.com/take0a/go-rest-sample/blob/master/testdata/create_table.sql

DockerでMashuサーバーを動かす

今回は、HTTPS接続可能なMashuサーバーにしますので、Docker Composeで、Nginxをリバースプロキシ―で設定します。PostgreSQLは、クライアントからの接続を設定する必要があるため、Dockerコンテナの内部のIPをnetworkで指定しておきます。

./docker-compose.yaml
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - 443:443
    volumes:
      - ./config/nginx:/etc/nginx/conf.d
      - ./log:/var/log/nginx

  mashu:
    image: roboninc/mashu:latest
    container_name: mashu
    ports:
      - 3000:3000

networks:
  default:
    ipam:
      config:
        - subnet: 172.18.0.0/24

Nginxの設定ファイルも用意します。10.138.0.2は、今回作ったGCEの内部IPです。証明書ファイルと鍵ファイルを./config/nginx/sslに配置しました。

./config/nginx/nginx.conf
server {
    listen 443 ssl;
    server_name ■■■■;

    ssl_certificate /etc/nginx/conf.d/ssl/■■■■.crt;
    ssl_certificate_key /etc/nginx/conf.d/ssl/■■■■.key;

    location / {
        proxy_pass http://10.138.0.2:3000;
    }

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

PostgreSQLの設定ファイルを変更します。(長いので追加した行のみ)

/etc/postgresql/14/main/postgresql.conf
listen_addresses = 'localhost,10.138.0.2'   # what IP address(es) to listen on;
/etc/postgresql/14/main/pg_hba.conf
host    all             all             172.18.0.0/24           scram-sha-256

Docker Compose で動かします。

$ sudo docker compose up -d
[+] Running 20/20
 ✔ mashu 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled           7.6s 
   ✔ dd5ad9c9c29f Pull complete                                       0.4s 
   ✔ 960043b8858c Pull complete                                       0.5s 
   ✔ b4ca4c215f48 Pull complete                                       1.3s 
   ✔ eebb06941f3e Pull complete                                       1.3s 
   ✔ 02cd68c0cbf6 Pull complete                                       1.3s 
   ✔ d3c894b5b2b0 Pull complete                                       1.4s 
   ✔ b40161cd83fc Pull complete                                       1.4s 
   ✔ 46ba3f23f1d3 Pull complete                                       1.5s 
   ✔ 4fa131a1b726 Pull complete                                       1.6s 
   ✔ 6ac2b5033bfd Pull complete                                       1.6s 
   ✔ dc1525197384 Pull complete                                       5.0s 
 ✔ nginx 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                 11.5s 
   ✔ 52d2b7f179e3 Pull complete                                       6.6s 
   ✔ fd9f026c6310 Pull complete                                       8.9s 
   ✔ 055fa98b4363 Pull complete                                       8.9s 
   ✔ 96576293dd29 Pull complete                                       9.0s 
   ✔ a7c4092be904 Pull complete                                       9.0s 
   ✔ e3b6889c8954 Pull complete                                       9.0s 
   ✔ da761d9a302b Pull complete                                       9.0s 
[+] Running 3/3
 ✔ Network docker_default  Created                                    0.3s 
 ✔ Container nginx         Started                                    4.0s 
 ✔ Container mashu         Started                                    4.0s 

今回は、Let's Encryptの証明書を用意しましたが、オレオレ証明書でも接続できると思います。Let's Encryptの証明書の取得は、先日の記事を参照ください。
https://zenn.dev/robon/articles/3db856390626b0

おわりに

どちらかというとMashuサーバーはオマケみたいになってしまいましたが、Mashuサーバーを使うのが簡単だからなので、これはこれで良しとします。

MashuサーバーとPostgreSQL接続については、Mashuサポートセンターにも記事があります。

https://services.robon.co.jp/ja/kb/mashu/source/connect-postgresql

https://services.robon.co.jp/ja/kb/mashu/mashuサーバーオンプレミス用

GitHubで編集を提案
株式会社ROBONの技術ブログ

Discussion