Closed9

GAEを使うときはmax_idle_instancesを指定した方がいい

catnosecatnose

Zennではバックエンドのアプリケーション(Rails)を動かすためにGoogle App Engine(GAE)を使っているのだけど、リリースしてから2ヶ月間どんどん料金が上がっていった。

catnosecatnose

設定がまずいのかなーと思い、インスタンスクラス(メモリ)を変えてみたりしたが、ほとんど変わらず…。

catnosecatnose

それで、Cloud Monitoring(旧Stackdriver Monitoring)で、メモリやらインスタンス数やらをチェックしてみた。メモリ使用量についてはリリースから比較的安定していて問題なさそうだったが、課金対象のインスタンス数がびっっくりするくらい立ち上がっていた。

catnosecatnose

実際に動いているインスタンス数は2〜3にも関わらず、idle_instances(負荷が大きくなったときのために待機してくれているもの)が常時10個くらい立ち上がっていた。
idle_instancesは普通に課金されるため、そりゃあ料金は高くなるよなと。

catnosecatnose

GAEではapp.ymlにインスタンス数に関する設定を書くことができる。ここにmax_idle_instancesが指定されていなかったのが問題だった。

具体的には、以下のような設定に変えた。

automatic_scaling:
  min_instances: 1
  max_instances: 20
  min_idle_instances: 1
  max_idle_instances: 2 # 👈 ここがポイント
catnosecatnose

結果どうなったかというと、idle_instancesの数が減り、料金が1/3になった。

catnosecatnose

どこかで「GAEは過去のアクセスから最適なidle_instancesの数を推測して立ち上げている」というような話を耳にしたことがある。真偽は分からないが、同じ負荷だったにも関わらず、日に日にidle_instancesが増えていったのは、このあたりが関係しているのかも

catnosecatnose

GAEは気軽に使えるが、ある程度アクセスが出てきたときには、ちゃんと設定しておかないと大変なことになるよ、というお話でした。

catnosecatnose

ちなみに「Google App Engine」についてググるときなんだけど、

  • 日本語 => 「GAE」
  • 英語 => 「AppEngine」

というキーワードにすると良さそう。英語圏だとあまり「GAE」という呼ばれ方はしていないように感じた。

このスクラップは2020/11/24にクローズされました