g4というサービスを運営しているのですが、ここ数ヶ月間でGCPの月額費用を4万円以上節約したので、経緯を書いておきます。
7月の費用 ¥53,818
9月の費用 ¥18,801 詳しくはこちらのレポート
11月の費用 ¥7,333 詳しくはこちらのレポート
完全にやらかしてますね!!敗因は
- 無料期間なのもあり利用料金気にせずに使っていた
- そして無料期間の終わりを忘れていた
- アラートを設定していなかった
です。
まずは、
7月の費用から約3万円節約するために、GAEのオートスケール周りの設定を見直しました
7月の状態は
- 本番: (GAE flexible/custom cpu x 2) x 2台
- ステージング: (GAE flexible/custom cpu x 2) x 2台
(DBに関しては本番とステージングで同じインスタンスを使っています)
でした。これは、app.yamlの設定をほぼ何もしなかったためなので、設定を変更して単純にcpuを1つにしたうえでインスタンス増えないようにしました。
resources:
cpu: 1
manual_scaling:
instances: 1
これだけ!
結果、約2万円くらいにまで下がりました。
それでも2万円近い月額。ちょっとつらい
そもそもステージングに7千円近くかけたくない...タダにして
ステージングは結構稼働してないことが多く、使ってないときは料金かからないと嬉しい。
使うときだけ手動で立ち上げるとかも考えましたが、やっぱり自動でやりたいのでベータ版であるAppEngineのStandard環境(ruby)にすることを決意しました。
あとStandard環境には無料枠があるのでそれによる節約も期待できます。
GAE (Flexible環境/Docker) をStandard/ruby環境に移行
g4のバックエンドはシンプルなRuby on RailsのGraphQL APIサーバーなのですが、mecabを使っている箇所があります。
mecabはOSへのインストールが必要で、Dockerを使えるカスタムランタイムでインストールして使っている状態でした。
Standardのrubyイメージを使うにはこいつが邪魔だった。
なのでこいつを外部API化して別に切り出してしまうことを検討しました。
移行先はこいつCGPのCloud Runです。すでにg4では利用実績が合ったので、イニシャルコストが安いこともわかっていたこいつを使うことにしました。
# encoding: utf-8
require 'sinatra'
require 'natto'
get '/hogehoge' do
# 処理してjson返す
end
not_found do
content_type :txt
"404 page not found."
end
Railsからの切り出しなので、こんな感じでsinatraにしたらサクッと20行くらいのコード+Dockerfileとか設定ファイルだけで済んでしまいました。めっちゃ簡単じゃん。
スタンダード環境化であとやったことは
- mecabを使っている箇所でAPIリクエストするようにコードを変更して、依存を消す
- app.yamlの設定をrubyのstandardに変更して、オートスケールなど設定
くらいです。
app.yamlについてはとりあえずこんな感じにしてみました。
env: standard
runtime: ruby25
automatic_scaling:
max_instances: 5
max_concurrent_requests: 40
target_cpu_utilization: 0.6
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
1ヶ月ちょっとやってみて3台くらいインスタンスが立ち上がっていることも割と多い印象。
立ち上がりに若干時間かかる気がするので、最低インスタンス数とか設定は見直していきたい。
結果、サーバー費用は200円くらいに収まり、現在はほぼデータベースの約7千円のみに落ち着きました。
データベースは今後データも多くなるし、ある程度コストかかってもしかたないかなって思っているのでこれにて一旦節約プロジェクトは完了です!
忘れずに金額アラートを設定
GCPの予算とアラートのページからアラートを設定できるので設定しておきましょう。
とりあえず1万円で設定して、5千円を超えたら通知が来るようにしました。
まとめ
- 無料期間中でもしっかり料金計算して必要な分だけ使うようにしましょう
- CloudRunでマイクロサービス化するといろんな依存を外出しできるので活用しましょう
- アラートは設定しておきましょう
という自分への戒め
こんな感じでg4というサービスを開発しています。
ポモドーロ・テクニックを用いて現実で頑張った分だけ成長できるゲームのようなサービスなので、興味があったら触ってみてくださいね。