VPC as a Serviceというサービスを考えた。 Virtual private server network as a Serviceと言い換えてもよい。 要するにサーバー用の仮想ネットワークをSaaSとして提供するものである。
結構需要が出るんじゃないかなどと考えているが、自分で実装するには知識不足なので誰か作って欲しい。 誰かが起業するなら、コントロールプレーン以上の開発なら出来るし、むしろ得意領域だから声をかけて欲しい。
背景
思いついた背景については入り組んでいる上に自分ももやもやしているので徒然なるままに書く。
AWS vs GCP
現代においてクラウドインフラは事実上AWSとGCPの2択である。 某所で個人開発においては圧倒的にGCPの方が使いやすいという意見を見かけた。 一方別の場所ではGCPは素人くさくプロユースの利用においてはAWSの方が信頼がおけると言う人もいた。
この違いはどこから出るのかと考えたとき、他にもあるだろうが一つの要素としてネットワーク設計の思想の違いもあるのかなと思った。 AWSはネットワーク設計や設定がわりと細かく求められるのに対し、GCPはあまり考慮しなくてもざっくり動いてしまう。 ネットワーク運用の知識のない人にとってはGCPの方が使いやすく、逆に知識のある人にとってはAWSの方が信頼感がおける、ということなのかもしれない。
VPSの再評価
ところで個人開発という観点からするとクラウドを使わないという選択肢もあると思っていて、VPSやベアメタルのサーバーを利用するというのも意外と良いのではと思っている。
今どきだと月5ドルも出せばそれなりのスペックのサーバーが借りられるのでコスト面でと悪くない。
クラウドで安くあげようとすると結局サーバレスインフラとイマイチ使い勝手の悪いKVSの組み合わせで頑張るということになり、サービスのデプロイはお手軽だけど、ローカルで開発スタックを立ち上げるのはそれなりに面倒くさいことになる。
それに技術選択も限られてしまい、勉強、スキルアップという意味でも不利だ。
自分でサーバー構築するなら好きな環境を構築して遊べるのでVPSで個人サービスを立ち上げるのはありだと思っている。
サーバー構築、運用の難点
自分でサーバーを構築する場合の難点として、ネットワークやセキュリティの設定が面倒というのはある。
そこで考えたのはネットワークは全部VPN経由でのアクセスのみ許可して外部からの接続はすべてブロックしてしまうことだ。これなら設定も簡単である。
外部からの接続はどうするのかということだが、管理者のアクセスはその管理者(個人の場合は自分自身)の開発環境をそのままVPNに繋いでしまえばよいし、サービスへのアクセスはマネージドなロードバランサーを外に置いて、ロードバランサーからのアクセスだけ許可すればよい。
自分はcloudflaredでロードバランサから直接トンネルを張っているがセキュアだし管理も楽である。
VPNにはtailscaleを使っておりこちらも設定が非常に楽で良い。
VPSで計算リソースが足りないなら自宅サーバーにVPN接続してそちらで処理するという手が使えるのも良い。
もうちょっと大きなサービスについて
上で挙げたのは本当の個人で趣味でやっている開発の例だが、ある程度収益を目指したりPoCだったり小規模受託開発なりだとシンプルなVPNでは不安というケースも出てくると思う。
セグメント分けしたり、ネットワーク内でファイアウォールの設定を分けたりしたくなってくると結局設定が複雑になってくる。
AWSやGCPでインフラ構築するメリットの一つはそういうネットワーク周りもマネージドなリソースとして取り扱えることである。
だからある程度成長を見込んだインフラを考えるとクラウド構築一択という風潮になるのもわかる。
だが本当にそうなのだろうか?
必要なのはネットワークインフラだけでは?
クラウドなら一つのパッケージに全部入りなのは魅力だが、逆に全部入りでなければならない理由はないのではと思っている。
たとえばDNSやロードバランサーについては僕は前述のCloudflareを使っている。
サーバーインフラについてはec2などよりVPSで建てた方が安い。 短時間でのスケーラビリティを求めないのであればVPSの方にメリットがあると感じている。
足りないのはマネージドな仮想ネットワークで、これらも個別に導入出来るなら、色々なSaaSを組み合わせで自分の好きなインフラを構築できる。
VPC as a Service
そう考えるとVPC as a Serviceというのは結構潜在的なニーズがあるのではないかと思えてくる。 まあ、cloudflareかtailscaleあたりがそのうちやりそうな気もするけど、そのときには僕もアイディアとして思いついていたよと言えるようにここに書き残しておく。