ポストHerokuなサーバーレスサービスを色々といじったので感想と比較をする
バックエンドを環境をどれにしようかな、と一通り
- goで作ったバックエンド
- Next.jsで作ったフロントエンド
- Redis
を動かす必要に迫られサクッとサーバーレスサービスでデプロイしたかった。
よって
- Githubで連携できる
- Dockerファイルをビルドできる
- Redisがある
などの条件でサーバーレスサービスを動かしてみたのでその感想を共有したい。
また今回の要件上、外部DB(Supabase)への接続や、別の日本にあるサーバーへのAPI接続が必要であったため
- アジアのリージョン
- アウトバウンド通信で固定IP
というのが必須ポイントであった。
注意事項
感想は個人のものです。各種サービス共に常に更新されているため、現時点(2024年7月)のものとお考えください。
Railway
使用感:★★★★★
一番近いリージョン:シンガポール
使用感
使用感は今回触った中でサクサク動く感じやデザイン、ダッシュボードのコンセプトなどが一番好きだった。
Githubと連携、Dockerビルド、また各種テンプレートも豊富で、DBもPostgreSQL、MySQL、MongoDB、Redisを立ち上げることが可能。
テンプレートはLaraveやDjango、WordPressなどちょっとしたアプリケーションならRailwayだけで済む。
プロジェクト管理
「プロジェクト」というくくりの中に「サービス」を作るという形であり管理がしやすい。
またproductionや開発環境の切り替えや複製も簡単。
さらに「プロジェクト」内では「プライベートネットワーク」という概念があり、例えばDBのサービスは非公開にして、プライベートなサービス名(例:postgres.railway.internal等)でアプリケーション側から名前解決が可能。
環境変数管理
また環境変数を同一プロジェクト内で、サービス名でアクセスすることができ、例えばLaravelとPostgresというサービスが立ち上がっていたとして、Postgresの方にPGUSERという環境変数があったとしたら、Laravelの環境変数の値として${{Postgres.PGUSER}}のような形でアクセス可能。
これでサービスや環境変数が増えたり変わったりした時に管理や変更がごちゃごちゃならずに済む。簡単に言えばまるでdocker compseをそのままGUIで触ってるような使用感だった。
上記はLaravelサービス側の環境変数
アウトバウンド固定IP
また自分が使った半年前は外部への固定IPがなく、セキュリティ上泣く泣く仕様を見送ったが、最近Proプランであればアウトバウンド固定IPが利用できるようになったため、今ならこれを使うと思う。
リージョン
2024年7月現在リージョンは少なめ。
シンガポールで十分、という時はRailwayは凄くおススメ。
Render.com
使用感:★★★★☆
最寄リージョン:シンガポール
使用感
使用感は前述のRailwayに若干及ばないが必要十分
アウトバウンド固定IP
ユニークなのは立ち上げた際にデフォルトでアウトバウンドIPが3つ割り振られており、外部通信に対してある程度のセキュリティを高めることが出来る。
プロジェクト管理
各管理がRailwayみたいに「プロジェクト」単位の管理ではなく「サービス」単位のため、使い続けると各サービスを命名で区切るしかなくなり(例:xxxx_laravelとかxxxxx_server_apiとか)ごちゃごちゃする。
環境変数管理
また環境変数に関してsecretを扱えるのはとてもいいが、Railwayのように環境変数をサービス間でシェアする機能ではなく「Env Group」というのを作って、そこから引っ張ってくる形となっている。
個人的にはこのやり方は管理しづらくて結局やらなかった。
リージョン
リージョンに関しては現時点ではシンガポールが最寄だが、東京リージョンの要望が随分前から上がっておりロードマップではステータスがIn Proguressとなっているが、他に優先度高いFeatureがあるようで、数年そのままである。
その他便利機能
あとこれも個人開発であった為結局使わなかったが、プルリクエストプレビュー、という機能があり、Amplifyで実装されているようなプルリクエストによるプレビューができるようで、開発に非常に便利だと思う。
Fly.io
使用感:★★★☆☆
最寄リージョン:東京
使用感
東京リージョンが用意されているのが特徴かつ最大のメリット。
中の人には日本人のエンジニアの方もいらっしゃるとのこと。
しかし、、大変申し訳ないけれどGUIが一番悪く非常に使いづらかった。
GUIの表示もなぜかイチイチ遅く(画面切り替えに3秒~5秒程度かかる)、またサービスの一覧性が低く、各サービスの詳細から別のサービスを開きたい時など面倒かつ、よく混乱した。
またgitによる自動連携が主体ではなく、独自のyaml設定とCLIによるデプロイであり、これも他のgitとシームレスに簡単に連携出来るサービスと比べてあまり好きになれなかった。
(gitとデプロイを連携したい場合はgit actionsでCLIを使ってデプロイコマンドを打つ形)
アウトバウンド固定IP
2024年7月現在でアウトバウンドの固定IPは用意されていない。
スレッドによると外部のプロキシサービスなどを使って固定するしかない、とのこと。
Discussion