🙆

個人開発激安 GCP (にしたい)

2022/06/02に公開

とりあえず GCP で軽くサーバーとデータベース立ててみたいっつって脳死で使ってたら1日で 1800 円いって焦った。慌ててチャットサポートに聞いたらいろいろ教えてくれて安心したけど、もうちょっと調べてみためも。自分が使いそうなものしか書いてないよ。

Google Cloud Calculator めっちゃ便利。

App Engine

TLDR これを app.yaml に書いておけば一番安上がり

env: standard
instance_class: F1
automatic_scaling:
  max_instances: 1

env

Standard environment と Flexible environment があって、無料枠があるのは Standard だけ。他にも Flexible だと想定外の請求が来たりするらしい。なので Standard を指定しておく

instance_class

サーバのインスタンスの種類。F1 が一番しょぼいスペックのサーバで F1, F2 とかの "F" 系なら一日 28 インスタンス時間まで無料。

インスタンス時間は、複数のサーバが立ち上がってるときそれぞれの稼働時間を積和したもの。1つのインスタンスしか立ててなければ 28h は超えないので大丈夫。

https://cloud.google.com/free/docs/gcp-free-tier/#app-engine
https://cloud.google.com/appengine/docs/standard#instance_classes

automatic_scaling

高トラフィック時とかに GCP がよしなにインスタンスを増やしてくれる設定。ここでは、 max_instances で最大インスタンス数を1にすることで、勝手に増えないように書いてる。

デメリットとして、 min_idle_instances っていうアイドル時のインスタンス数を書いていないので、立ち上がりにちょっとだけ時間がかかる (書いてないとアイドル時は 0 インスタンス)。

Cloud SQL

TLDR: 最安設定。他のところは要件に合わせて設定してね。


課金のメトリクスは

  • インスタンスのマシンタイプ (CPU, メモリー, 稼働時間)
  • ストレージ
  • ネットワーク通信 (egressのみ、 ingress はなさそう)
    で、この値段はリージョンによって変わる。この記事 によると、 Iowa が一番安いらしい。

稼働時間

インスタンスは稼働してる時間に応じて課金されるので、これを読んでるのにインスタンスが立ち上がってたらいますぐ止めよう。

# インスタンスの一覧を取得
$ gcloud sql instances list
# 対象のインスタンスの NAME の値をコピーして↓の INSTANCE_NAME のとこに入れる

$ gcloud sql instances patch INSTANCE_NAME --activation-policy=NEVER

docs: https://cloud.google.com/sql/docs/mysql/start-stop-restart-instance

インスタンスのマシンタイプ (CPU とメモリー)

ややこしいんだけど、インスタンスの種類が shared core か dedicated core かによって課金の表が変わる。dedicated core だと、CPU とメモリーに応じて課金されて、 shared core だとインスタンスタイプそのままが課金の行になる。

設定画面でインスタンスの種類を選ぶ↓

Standard は dedicated core の一つで、Standard の中から CPU とメモリーを選べる↓

shared core だとこうなる↓
上の 0.614GB のインスタンスタイプが db-f1-micro で、1.7GB の方が db-g1-small

一応ここにインスタンスの一覧が書いてある。 db-f1-micro が一番安いけど、shared core の f1-microg1-small は SLA に含まれていないので本番では使わないでね、とも書いてあるけど開発用なら問題なし。

料金に戻ると、 Lightweight/Standard/High memory から選んだ dedicated core のインスタンスは、下の表に基づいて vCPU と Memory に応じて課金される。

Shared core だとこの表になる。

料金表の「HA」とは "High Availability" のことで、インスタンスのリージョンの設定をマルチゾーンにすると HA になる。逆にいうと、 Single zone なら HA がオフになって安くできる。

docs: https://cloud.google.com/sql/docs/mysql/configure-ha#console_3

ストレージ

料金表はこれ。

ポイントは

  • SSD は HDD の2倍高い

  • HA は通常の 2倍高い

  • バックアップも課金される
    で、たとえばこういう風に設定すると最安。

  • Storage type: HDD

  • Storage capacity: 10GB

  • automatic storage increases: ON

さすがに容量たりなくてエラーとかは面倒なので、最後のオプションはオンにした。バックアップも忘れずにオフにする。

ネットワーク

Ingress はタダ。やったね!

Egress の表↓

Cloud Interconnect は Google と社内のシステムをつなぐ VPN みたいなやつで、とりあえず個人開発には関係なさそう。

ポイントは、

  • Compute Engine か CloudSQL との通信なら、同じリージョンにするとタダ
  • ↑以外の Google 製品なら、同じ大陸ならタダ、そうじゃなかったら課金
  • その他の通信 (Cloud SQL とローカルとか) も課金
    で、たとえば App Engine と通信したいなら Cloud SQL と App Engine のリージョンを両方アイオワにしておけばタダになる。

Cloud Scheduler

TLDR: billing account 1つに対して3つまでのジョブなら無料

無料枠に収まる例↓

  • 1つのプロジェクトで3つのジョブ
  • 3つのプロジェクトでそれぞれ1つずつジョブ

前提: 「ジョブ」と「実行」は違う。「ジョブ」はたとえば「毎日12:00に通知を送る」で、毎日通知を送ることが実行。課金は「ジョブ」に対して起こるので、この例だと1つのジョブで計算すればいい。

無料枠だと、1つの Google billing account に対して月あたり3つのジョブが割り当てられる。それ以降は $0.10/job/month になる。無料枠はプロジェクト単位じゃないのでそこだけ注意かも。

Cloud Functions

ぶっちゃけ数字が大きくてよくわからなかった。

課金のメトリクスは

  • 呼び出し
  • コンピューティング時間
  • ネットワーク通信
    で、全部に無料枠がある。

同じリージョンにある他の GCP サービスなら無料なので、ネットワークのコストはここで抑えられそう。

Discussion