Cloud Workstations で構築する SQL 100本ノック環境 🏏

2023/03/14に公開

こんにちは。Enabling team の山本です。

みなさんは花粉症対策されていますか🌲?

「フラクトオリゴ糖」が花粉症に効果があると業務委託メンバーに聞き、自分の体を利用した実験を始めました。
次回の記事で、「フラクトオリゴ糖」の経過を書きたいと思います。
現時点では、キマってるような気がします 🤩✨

まえおきはこのくらいにして、今回は Cloud Workstations(Workstations)について書きます。

ご存じのとおり、Workstations は、Cloud 上に開発環境を構築できるサービスです。(記事作成時点では Preview です)
4月から始まる「新入社員研修の開発環境(SQL 100本ノック環境)」を構築するため、Workstations の設定を見ていきます。

新入社員研修の開発環境(SQL 100本ノック環境)

  • 小売の現場を変革するためには、データを利用した意思決定が不可欠です。データの利活用の第1歩として、SQL の使い手になってもらう必要があります。
  • 弊社の Engineer の端末は、Mac と Windows が混在しています。
    Windows は、ソフトウェアのインストールが統制されており、自由にソフトウェアをインストールすることができません。

こういった理由から、Engineer の端末環境に依存しない開発環境を必要としていました。

要件は、以下のとおりです。

  • 再現性。データが壊れても何度でも作り直せる。
  • 期間限定。研修後は必要なくなる。
  • セキュリティ。リモートワークで研修を進める期間があるためリーモートでログインできる。

Cloud Workstations

Workstations は、Cluster 上の Node に IDE が preinstall されたサービスです。

  • 使わない時は、停止できる。
  • 一定時間未使用の場合は自動で停止される。
  • 状態は Disk に保持される。
    例えるなら Kubernetes の Deployment に remote でログインし操作するような環境です。
    そこが Google の Security で保護されている。

今回、Workstations を新入社員研修の開発環境として運用してみることにしました。

課題1:Devcontainer(Remote Container)はどうする?

環境を構築し始めて、問題点に気づきました。
それは、Devcontainer が使えないことです。
SQL の研修として、Devcontainer の Docker(PostgreSQL)を使用するつもりでした。
しかし、Workstations で Devcontainer を使用できないようです。
そこで改めて Docs を読むと、こう書いてあります。

VPC 内の実際の環境でコードを実行する
Cloud Workstations は VPC 内で実行可能なため、コードをプライベート ネットワークとステージング環境で開発して実行でき、サービスをエミュレートする必要はありません。

要するに、VPC に接続されているものであれば、Workstations から接続できる。
これを利用できれば、Devcontainer のようなことができます。
実際に、Code-OSS の Terminal から Compute Engine Instance に Ping してみると、以下のとおり通信できることがわかります。

user@workstation-danny:~/sitemap-submit$ ping 10.128.0.4
PING 10.128.0.4 (10.128.0.4): 56 data bytes
64 bytes from 10.128.0.4: icmp_seq=0 ttl=63 time=3.905 ms
64 bytes from 10.128.0.4: icmp_seq=1 ttl=63 time=0.430 ms
64 bytes from 10.128.0.4: icmp_seq=2 ttl=63 time=0.444 ms
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.430/1.593/3.905/1.635 ms
user@workstation-danny:~/sitemap-submit$ 

検証1

Workstations の PostgerSQL Tool で接続できるかを検証します。
今回は、Compute Engine に PostgreSQL をインストールします。

  1. Compute Engine で Instance を起動する。
     yamamoto_daisuke@instance-1:~$ sudo apt update
    
  2. PostgreSQL を Install する。
     yamamoto_daisuke@instance-1:~$ sudo apt install postgresql
     yamamoto_daisuke@instance-1:~$ psql --version
     psql (PostgreSQL) 13.9 (Debian 13.9-0+deb11u1)
    
  3. PostgreSQL の User/Password を設定する。
     yamamoto_daisuke@instance-1:~$ sudo passwd postgres
     yamamoto_daisuke@instance-1:~$ su - postgres
     postgres@instance-1:~$ createuser --pwprompt --interactive sample1
     postgres@instance-1:~$ vi /etc/postgresql/13/main/postgresql.conf
     postgres@instance-1:~$ vim /etc/postgresql/13/main/pg_hba.conf
     postgres@instance-1:~$ exit
     yamamoto_daisuke@instance-1:~$ sudo systemctl restart postgresql
     yamamoto_daisuke@instance-1:~$ systemctl status postgresql
    
  4. Code-OSS に PostgreSQL Tool の extension を追加する。
  5. Code-OSS から PostgreSQL に接続する。
  6. 接続成功❗️❗️❗️

まとめ

Cloud Workstations について書きました。

途中、Devcontainer 問題で行き詰まりかけて焦りました 💦

ちなみに、僕が新入社員研修に関わるのは、今年が初めてです。

新入社員研修は、彼ら・会社・僕たちの未来に関わることですので、本気で向き合う必要があると思っています。

やれることは、100%取り組んで、また、来年の新入社員研修に活かせればと思います。

Discussion