RM-BLOG

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

RenderとSupabaseをちょっとだけ使ってみたのでその感想を述べる

はじめに

タイトルの通りなのだが。RenderSupabaseを使った簡素なWebアプリを作って試してみたので、その感想を簡単に書いておきたい。ちなみにいずれも無料の範囲でしか使ってない(カスタムドメインとかは別だが)

Render

Free Web ServiceRedisを使った。いずれも無料の範囲である。RedisはFree Planのページには載ってないけど、Pricing見る限りでは無料で使えるので、興味本位で使ってみた。

Web Service

  • このサービス、つまりWebアプリケーションのHosting Serviceという観点でのUXは、Herokuに非常に似ている。ていうかほぼHeroku。Heroku使い慣れた人ならすぐに使えるんじゃなかろうか。
  • 無料なのだが制限があって、一か月で750hの稼働時間分のみが与えられていて、それを超えるとsuspendされる。らしい。なお、毎月1日にリセットされるらしいので、suspendされても次月の1日を待てばまた使える。らしい。ただ、31日の月でも744hなので、少なくとも1アプリなら無料で動かし続けることが出来る計算である。試してないけど。ちなみにアクセスがないと15分でスリープし、次のアクセスで起きる(その「起き上がる」際の起動は遅くなる)。で、usage見てる感じではこの「スリープ」してる間は制限時間の750hには計上されないようである。
  • Buildが若干遅い。yarn install するだけのシンプルなexpressのWebアプリケーションでも平均1分前後かかった(長いときは3分くらいかかったときもある)。Next.jsとか使う場合はもうちょっとかかると思われる。加えて、Free Planだとひと月で合計400hのBuild Timeのみ与えられており、これを超えると1秒ごとの従量課金になるらしい。Buildが遅いのはRenderも自覚しているというか、Free Planでは意図的にそうしている節がある。Deployの画面上に「ビルドが遅い?有料プランに変えてみ?」とか出てくるし。
  • シンガポールリージョンを選べるので、日本人的には使いたくなるが、私が試したときは非常に不安定で、非常にシンプルなexpressのWebアプリケーションですら、2回に1回はHTTP 404になって不通になったし、仮にHTTP 200でレスポンスされても一部のCSSやJSは404のままなどの問題が起きた。一方、同じアプリケーションをOregonリージョンに乗せたら超安定して動作した(これが当たり前なんだけど)。結論、シンガポールリージョンは(一応使えるが)現時点では使い物にならないと判断した。
  • 例えばRailsのrakeみたいな、deploy時にDBのmigrationを行うための処理の設定方法が不明。調べたら/bin/render-build.shというのを用意しておけばRenderが勝手に動かしてくれるらしいんだけど、このshell用意してdeployしても呼ばれてる節がなかった。なにか間違ってるのかもしれないが。ただ、ここは詳しく原因を追跡できておらず、Freeだとだめなのか・Node.jsだとだめなのか・単に俺がミスってるだけか等、色々考えられるが、よくわかっていない。
  • migrationの話と関係してるんだけど、サーバに入ってゴニョゴニョやりたい場合のやり方が不明。ここに記載の方法で繋げられそうな気もするが、Free Planはnot supportedと書いてあるので、そもそも出来ない気がする。

Redis

  • FreeだとPersistentがついてこない。けどこれがどういう影響があるんだかわかってないwここの記載を見る限りだと「データ保持の永続性はない(=Platform都合で勝手に削除することもあるよ)」ということかな、と解釈した。個人的な利用範囲では(ただの実験用途なので)別に気にしていない。
  • 設置したリージョン以外からのアクセスができない。例えばWebアプリケーションをシンガポールで動かして、RedisをOregonに設置すると、そのWebアプリケーションからはRedisに繋がらない。Web ServiceもRedisも同一リージョンに存在する必要がある。ログ見てた感じではRedisのURLに対するLookupが失敗しているようだったので、多分Access ControlにWeb ServiceのOutbound IP設定しても無駄だと思う。試してないけど。

Supabase

DatabaseStorageを使った。やはりFreeの範囲である。

全般

  • 無料の範囲だと、1週間inactiveだと勝手に削除されるらしい。これはDatabaseというより「プロジェクト」の塊に対して適用されるルールなので、Storageも含め、削除されるときはプロジェクトごと全部削除される(はず)。ただ、「inactive」の定義がよくわかってなく、公式ドキュメントにも特に記載が見当たらない。Hacker Newsに関連情報があったけど、これも正確に言い表していない。Databaseに限って言えば1週間以内に1回でも接続してれば問題なさそうに見える…けど。正しいのかどうかわからない。
  • 無料の範囲だと2プロジェクトまでしか作れないらしい。Pricingのページにちーっさく書いてある。これもう少し目立つようにしておいた方がいい気がするけど。。個人的には1プロジェクトでも十分なくらいの範囲だったので全然問題ないが。

Database

  • Connection数の制限があるような気がするのだが、見つけられなかった。どこかに書いてあったような気がするんだが…記憶の間違いかも。Postgresqlである以上は内部的にはpg_hba.confとかで制限してそうな気がするんだが。まさか無限ってわけではあるまいし。どこかに記載ないかな?
  • ちなみに無料でもConnection Poolingすら提供されるのでアプリケーション経由からならこっちに繋いだ方が幸せかもしれない。試してないので使い勝手はわからんけど。。
  • 無料プランだと日次バックアップはない。まあ当たり前か。。逆に言えば有料プランだとマネージドでバックアップとってくれるらしいが、この画面見る限りだと、バックアップの取得時間を指定できるようには見えない。midnight(深夜)って何時だ…?時間指定できるのかな?
  • 東京リージョンが選べる。このテのサービスでは珍しい気がする。公式ドキュメントに見つけられなかったけど、ここ見る限りは結構いっぱい候補リージョンがあるようである
  • Supabaseの専用ライブラリがあって、DBの操作とかもこのライブラリ使ってできるらしいが、個人的な利用範囲ではnode-postgresみたいなよくあるライブラリでも問題なく接続できたし、実際CRUD全部ちゃんと動作した。なので、あんまりsupabase-js使うつもりもない。ただまあSupabaseの立場から言うと自前のライブラリ以外使って問題起きても知らないよ(サポートしないよ)って感じだろうから、素直にsupabase-js使っておいた方がよさそうではある。そしてそうなってくると、node-postgresのような汎用ライブラリ使ってるアプリケーションはSupabaseに合わせた固有のコード改修が必要になるわけで、そこの手間を考えると萎えてくる。。。個人的にはなんかヤバ目の問題起きるまではnode-postgresとかでいいやと思っているが。

Storage

  • 無料の範囲だと、一回のアップロードが5MBかつ1GBまでの容量のストレージしか使えない。Databaseに比べると正直、ショボいスペック。変にこの制限に振り回されるくらいならS3上に自分でbucketつくって使ったほうがいいような気がした(まあそっちはお金かかっちゃうけど…ストレージクラス次第では相当出費抑えられるし)。
  • ちょっと探しただけなのだが、調べた感じではaws s3 cpみたいにぽーんと(?)アップロード、みたいな手軽なアップロード方法がない。CLIにそれっぽい操作が紹介されてないっていうのが根拠で、あまり全力で探してないんだが。supabase-js使ってアップロードできるみたいだが、いちいちコード書かないといけないので面倒くさい。。。それ考えたらダッシュボードからアップロードするのが一番手軽かな~。日次でバックアップとって保存、みたいな用途で使うためにはちょっと手間がかかるかもしれない。Edge Functionを用意して外からIFTTTとかで叩く形にできると自動化できそうではある…が。試してないけど。

おわりに

RenderもSupabaseも、諸々制限はあるものの、無料の範囲でちょっとした(実験目的程度の)Web+DBのアプリケーションを作るのは全然問題なくできそうだった。世知辛い時代によいソリューションだと思いました(?)