Lean Baseball

No Engineering, No Baseball.

個人開発のプロダクトにおけるクラウド料金のはなし - GCPの年間コストをランチ一回分に抑えた話

GCP(Google Cloud Platform)を個人開発プロダクトの中心として使っているマンです.

AWSやAzureなど他のクラウドサービスもそうですが,

クラウドサービスを自分の財布から使ってる時ってめちゃくちゃドキドキしませんか?特にお金の話💰

gigazine.net

例えばこういう記事が流れてくると,

  • 勉強のつもりでアカウント作ったけどどうしよう🤔
  • 仕事で使ってるけど怖くなってきた😫

などなど, 色々と不安を覚えると思います, 自分も昔はそうでした, クレカの情報入れるのこわいお💳的な.

ですが安心してください.

仕組みを正しく理解して使えば個人レベルだとメチャクチャ安く収まります.

このエントリーでは,

  • 私が今年(2020年)に使ったGCPの料金をチラ見せしつつ,
  • 目的に合わせたクラウドサービスの使い方をTipsとして紹介し,
  • GCP(に限らず他のクラウドサービスも合わせて)もっと個人で使い倒そう, 個人開発しようぜ!

というお話を紹介します.

趣味や個人的なプロジェクトの開発だけでなく, 資格取得などで自腹でクラウドサービスを使おうと思ってる方に有益なTipsかもしれません.

TL;DR

  • クラウドサービスの料金体系はちゃんと読んで使おう
  • 個人利用の少量なデータだったらむしろガンガン使うべき
  • 台数・スペックをスケールするような仕組みはちゃんとデバッグしてから慎重にやろう(自動化は慎重に)

おしながき

今年の個人開発をコストで振り返る

2019年末から現在まで, 私は以下の個人開発プロジェクトを進めていました.

年間コストも含めたまとめがこのエントリーのサムネイルです.

f:id:shinyorke:20201221224821j:plain
このエントリーの要約です.

東京都内の飲食店さんでランチするとだいたい800円程度っぽい*1ので, 年間コスト$7.17(日本円で750円ちょい?)は都内でランチするより安く済んでると言えそうです.

ちなみに毎月のコストはこんな感じです.

f:id:shinyorke:20201221232454p:plain
2019/12 - 2020/12(12/21時点)のコスト.

7ドルちょいに収まった理由

もちろんこの低コストは偶然やったわけではないです, ちゃんと計算してやりました.

そのノウハウを簡単ではありますが紹介します.

サーバレスなサービス中心で使い倒す

これはBotを立てたプロジェクトでの事例です.

shinyorke.hatenablog.com

こちらのプロジェクトでは,

作るモノの特性上サーバレスなサービスだけで構築できるぜ!っていうことで,

  • Cloud Scheduler(関数を動かすためのトリガー)
  • Pub/Sub(実行のキューを担う)
  • Cloud Functions(Botプログラムを動かす環境)
  • Firestore(通知の制御を行うための一時的なデータストア)

...というふうに, 「自分で仮想マシン(VM/Virtual Machine)を立てなくてもいいぜ!」っていう環境を選択しました.

理由はエントリーの中でこんな感じで言及しています.

  • VM(GCE)だと一ヶ月で$30前後と予想, 払える金額だが遊んでる時間が長いのでもったいない!(Botでつぶやくときだけリソース使えばいい)
  • Cloud Pub/SubからFunctionsを動かすサンプルが揃ってる&やりたいことって結局これじゃん!

何がいいたいかと言うと,

小さいサービスだったら最初からサーバレスなやり方前提で考えると楽かつ費用も収まりますよ!ってことです.

将来的なスケーラビリティについては(個人レベルなら)必要になったら考えるでいいかなと.

料金体系を使いながら正しく理解する

一言でいうと,

ざっくりな試算でいいので月間コストを予測し, 実績と見比べる

のを愚直にやると良いです.

私の場合は上記のBotで使っているサービスに加え,

  • BigQuery(成績予測で使ってた)
  • GCS(同上)
  • GCE(成績予測の一時的な計算で使用)

の料金をチェックし, ある程度試算してから実行しました.

なんとなくの仮説として,

  • BigQueryは全体のデータ量がせいぜい数GB(もうすぐ10GB)*2かつ一括して取り込んだりクエリもそんなに叩かないので上手く行けば無料かも
  • GCSは生データの保存をしているので毎月そこそこ料金掛かりそう
  • GCEは一時的な計算を数回やるので回数×$1ぐらいかな

と考えてやっていて, その結果.

f:id:shinyorke:20201221235900p:plain
この一年のサービス毎の料金

だいたいそんな感じに収まりました.

Botで使ったCloud Schedulerが思ったよりかかった*3なー程度でほかはだいたい当たってました.

この辺はある程度使い倒す・慣れも肝心かと思いますが, いずれにせよコスト構造を理解して使うのはすごく大事かと思います.

使い終わったサービスはさっさと閉じる

これも超基本ですが忘れがちなやつ.

使い終わったサービス, 特にVMみたいにリソース専有するものはさっさと閉じる!以上.

データサイエンスとか機械学習で使ったサービスはしつこいぐらい確認したほうがいいです, サーバーを消すの忘れて毎日数ドルかかってました, はもったいない.

これに関してはGCPの場合,

  • 予算アラートをちゃんと使う.
  • ↑のアラートを許容できる金額でセットして備える.

ぐらいやっておくと安心できると思います, アラートが鳴るということは異常事態だって気がつく訳で.

ちなみに自分は両方セットしています&アラートが鳴る事態は今の所発生していません.

スケールする仕組みは注意しよう

個人開発でオートスケール(サーバーの台数を増やす・リソースを自動的に増強するなど)をする機会は早々無いと思いますが.

gigazine.net

この事例たしかに可哀想, 同情できる余地もあるのですが個人的には,

利用料金が膨れあがった原因は、Chauhan氏のチームがCloud Runに適用したコードにあったとのこと。AnnounceのスクレイピングシステムはCloud Run上のコードを複数のインスタンスで実行するという構造でした。しかし、コードが不適切であったため、インスタンスが無数に起動し、かつそれぞれのインスタンスで無限にコードが実行されるという状況でした。

これってコード書いてからちゃんとデバッグしたら防げるモノ(のハズ)なので自分でやらかした事故(ry

っていう一面はあるなと思いました.

スケールするコードを書く時は可能な限りローカルで再現するようなテストとかして動きを把握した上でクラウドに放流しましょう.

結び

というわけで, 「個人開発なり趣味でクラウドをいい感じに使う, お金の面で」という話を紹介しました.

個人開発, メッチャ楽しいですし勉強になるし(ちょっとした)お小遣いにもなるので良いですよ!

shinyorke.hatenablog.com

このエントリーをご覧になった方が, 個人開発なりプロジェクトで2021年を楽しめるような感じになってくれると嬉しいですし, 個人じゃなくても仕事でクラウドをお金気にせず堂々と使い倒すみたいな感じになると嬉しいです.

最後までご覧いただきありがとうございました&よいメリー・クリスマスを🎄

*1:もちろんこれが外ごはんじゃなくてお弁当やコンビニだったらもうちょっと安いでしょう(リンク先の記事の通り).

*2:10GB超えると保管コストがかかります&改めて確認したら10GB未満だったので無料で収まってました(2020/12/25:この辺勘違いしてたので更新)

*3:途中でBotの関数を増やした結果, 無料枠から足が出たみたいな感じで料金かかってました. が出してるバリューを考えたら全然許容範囲です