GCEもMashuも永久無料枠でクリーンに評価する
はじめに
当社の提供しているMashuというメタデータ管理サービスがあります。
Mashuは、30テーブルまでクレジットカード登録不要(=無料)なので、Windows PC一台で、オンプレミスのRDBMS(Oracle)接続を評価する記事を書きました。
ですが、会社のPCにDockerとかOracleとか入れたくないし…という方もいるかも?ということで、GCEの無料枠を使って、そこにPostgreSQLもインストールすれば、完全無料で、どこにも影響を与えずに評価できるじゃん。という記事です。
評価しよう
Google Compute Engine(GCE)
上記の範囲だと無料になります。今回は、リージョンはアメリカの西側オレゴン(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のインストール
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のインストールと初期設定
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は、こちら
DockerでMashuサーバーを動かす
今回は、HTTPS接続可能なMashuサーバーにしますので、Docker Composeで、Nginxをリバースプロキシ―で設定します。PostgreSQLは、クライアントからの接続を設定する必要があるため、Dockerコンテナの内部のIPをnetworkで指定しておきます。
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
に配置しました。
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の設定ファイルを変更します。(長いので追加した行のみ)
listen_addresses = 'localhost,10.138.0.2' # what IP address(es) to listen on;
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の証明書の取得は、先日の記事を参照ください。
おわりに
どちらかというとMashuサーバーはオマケみたいになってしまいましたが、Mashuサーバーを使うのが簡単だからなので、これはこれで良しとします。
MashuサーバーとPostgreSQL接続については、Mashuサポートセンターにも記事があります。
Discussion