はじめに

Google App Engine(以降GAE)を無料枠内で使いたいと思って、いろいろ試行錯誤した結果をメモしておく。

結論

確実に無料枠内で収める方法はない(と思う)

無料枠の前提

  • フロントエンドインスタンスはF128時間、バックエンドインスタンスはB19時間
  • Webアプリケーションを常時稼働させるためには、フロントエンドインスタンスを利用する必要がある
  • フロントエンドインスタンスを利用するためには、オートスケーリング設定にする必要がある

確実に無料枠内に収められない理由

簡単に言ってしまうと、1つのインスタンスだけを確実に起動する設定が出来ない為ということが言える。

ちょっと説明すると、課金されるインスタンスには以下の2種類ある。

  • 稼働中のインスタンス
  • アイドリング中のインスタンス

それぞれ最大の個数を設定できるんだけど、共に設定できるのは1以上の値。
0も設定できるんだけど、実質おまかせ設定になってしまう。

つまり、少なくとも最大2つはインスタンスが作成されてしまう可能性があるということになる。
無料枠で28時間のインスタンス時間が提供されているのだが、インスタンスが常に2つ作成されるとなると最大48時間となって20時間分が課金されるということになる。

出来るだけ無料枠で収める設定の例

自分なりに試行錯誤して結果利用している設定はこんな感じ。
念の為設定できる9項目全てを明示的にセットしている。

app.yaml

instance_class: F1
automatic_scaling:
  target_cpu_utilization: 0.95
  target_throughput_utilization: 0.95
  min_idle_instances: 0
  max_idle_instances: 1
  min_instances: 0
  max_instances: 1
  min_pending_latency: 5000ms
  max_pending_latency: automatic
  max_concurrent_requests: 80
  • instance_classはもちろんF1
  • target_*は最大値をセット
  • *_idle_instances は最小値をセット
  • *_instances は最小値をセット
  • min_pending_latency は許容できる範囲で出来るだけ大きくする
  • max_concurrent_requests は最大値をセット

上記の設定でやっているのは以下の通り。

  • 稼働するインスタンスの最大数は1
  • アイドリングするインスタンスの最大数は1
  • CPUの使用率が95%を超えると新しいインスタンスを作成する
  • 同時リクエスト数がmax_concurrent_requestsの95%を超えると新しいインスタンスを作成する
  • リクエストキューに5秒以上留まっていたら、新しいインスタンスを作成する

アイドルインスタンスについての仮設

そもそもインスタンスの最大値を1にセットしているのに、なぜ細かく設定しているのかというと、この辺を細々と設定しておかないとアイドルインスタンスがどかどか作ってしまうっぽい。
実際上記の設定で、max_idle_instances0(多分automaticと同義)にした時に課金が増えた。
このあたりはブラックボックスなので、問い合わせをしてもあんまり要領を得ない感じだった。

おわりに

もし、2つのインスタンスを常時稼働させた場合、1日$1以上近くの出費となってしまうので、プライベートで利用するとなるとまあまあの出費に感じる人も多いんじゃなかろうか。
少なくとも、自分は高く感じるし。
けど、ある程度課金されることは許容しつつも、何かと自動でやってくれるというのはとにかく楽なので、今後も上手に付き合っていけたらなと思う。