はじめに
学生や社会人の方でも個人開発したプロダクトを運用するのにお金がかかってしまってませんか?特に学生の方ならクラウドサービスに払うお金もバカにならないです。できる限り無料でサービスを開発、運用するためのTipsを紹介します
クラウドサービス
クラウドサービスといえば、以下の三つになりますが他にもたくさんの企業から様々な種類のサービスが登場しています
- GCP
- AWS
- Azure...
事例
今回はハッカソン時にAzureの提供があったためコスト度外視で作成したプロダクトを無料で運用できるようにした事例をもとに紹介します。
改善前の構成
詳しい構成は note に載っていますが、一部抜粋して紹介します。
改善前構成図
- APIGateway的役割
- Azure Virtual Machines
- 画像生成処理
- Azure Virtual Machines
- DB(MySQL)
- Azure SQL database
- 画像保存DB
- Azure Blob Storage
- データ処理API
- Google App engin
- フロントエンド(React App)
- Vercel
上記のような構成になっており、Vercel以外は全て有料のものを使っていました。これをそのまま運用しようとすると、放っておくだけでもかなりの金額がかかってしまいます。
改善の方針
マイクロサービス的に運用していたのでモノレポにし1つのインスタンスで完結させればかなり費用が抑えれるのですが、今回は一円も払いたくないかつコードの改変もしたくない!というモチベーションでした
改善案
DB
データベースは大きく分けてSQL系とNoSQL系に分かれます。今回はMySQLを使用していたので、NoSQL系データベースの代表格であり、無料枠があるFireStoreは使えません。しかしながらFirebaseは、無料で使える良いサービスなので設計の段階でNoSQL取り入れていれば採用するべきだと思います。SQL系のクラウドサービスはほとんどのものが有料です。herokuが提供してるPostgreSQLのサービスも先日のHeroku無料プランの廃止により有料化されました。現状SQL系のサービスで無料枠があるのはPlanetScaleです。PlanetScaleはMySQLのようなデータベースです。MySQLとの違いとしては、少しだけ使えない機能があったり、追加されている機能があります。少し特性を理解する必要はありますが代替としては優秀です。
また、Azure Blob Storageに保存していた画像データはGCPのCloud Storageに移行しました。5GBまで無料で保存することができます。AzureのSDKからGCPのSDKへと変更し少しだけコードの改変をする必要がありますが、数行変えるだけで大丈夫です。
API
自作のAPIも昔はとりあえずHerokuに置いておけば無料でしたがその時代は終わってしまいました。しかしながらAzure App Serviceには無料のインスタンスF1があります。AzureのApp ServiceはPythonやJavaといった主要言語から最近ではGoにも対応したPaasです。コンテナをデプロイする機能もありコンテナ化すればどの言語でもデプロイすることができます。
今回は、PythonとGoのAPIをデプロイする必要があったためPythonはそのまま、Goに関してはAzure App Serviceは対応したばかりであり安定性に難があったためコンテナとしてデプロイしました。
改善案まとめ
改善後構成図
- APIGateway的役割
- Azure Virtual Machines→Azure App Service
- 画像生成処理
- Azure Virtual Machines→Azure App Service
- DB(MySQL)
- Azure SQL database→Planet Scale
- 画像保存DB
- Azure Blob Storage→Cloud Storage
- データ処理API
- Google App engin→Azure App Service
- フロントエンド(React App)
- Vercel(そのまま)
最後に
今回そのまま運用すれば月数万円かかるサービスを無料で運用する過程を紹介しました。サービスは運用してこそ意味があります。だからこそいつの日かサービスにユーザがついた時サービスを継続して動かせるということも重要です。無料だからといってスケールアウト、スケールアップできないサービスを使ってしまうと意味がありません。Azureは無料インスタンスから必要があればスケールアップ、スケールアウトが簡単にできます。いつの日かユーザがつくまではお財布に優しくサービスを運用しましょう。
今回使用したサービス
PlanetScale
Azure
Vercel
GCP