概要
GCPのWebコンソールのGAEの管理画面に「ダッシュボード」があるが、そのグラフ設定で「インスタンス」を選択すると、「作成」、「有効」、「課金インスタンス推定」の3つが表示される。それぞれ何を意味しているか、という話。AppEngineの料金を考える際にこの部分を理解しておく必要がある。
これらについての直接的な説明はドキュメント上にはない。
※「課金インスタンス推定」は、AppEngineのオートスケーリングを有効にしている場合にのみ表示される。
それぞれの説明
有効
まさにリクエストを処理しているインスタンス数。
作成
作成されたインスタンス数。重要な点として「作成されたインスタンス数=課金対象のインスタンス数」というわけではない。(詳細は後述)
「作成」されたが「有効」ではないインスタンスは一見無駄に見えるが、リクエストがバーストした際に速やかに使用される。
課金インスタンス推定
かかった費用を計算するのに使えるインスタンス数。AppEngineの料金は、インスタンス時間(インスタンスタイプ、インスタンス数、使用時間)で決定される。
オートスケーリングの場合、インスタンス数が動的に増減するため、実際にどれほどのインスタンスが稼働していたか見えにくい。そこで、「課金インスタンス推定」の情報が役に立つ。
ただし、この情報はあくまで推定であり目安なので、正確な数値ではない点に注意が必要。
AppEngine(オートスケーリング有り)の課金について
ある条件のもと、AppEngineは自動でインスタンスを増加させるが、15分間アイドルだったインスタンスは課金されない。(スケーリングの条件はapp.yamlに指定する。)
一度作成されたインスタンスは、リクエストが落ち着いた後もすぐには削除されず、リクエストのバースト時などに使われる。そして、GCPの任意なタイミングで削除される。(スケールイン)
このような待機用インスタンスを常にキープしておきたい場合は、min_idle_instancesのパラメータを使用する。しかし、常にキープされるため、課金の対象となる。(たとえ15分以上アイドル状態だったとしても)
安く使うためのチューニング
「有効」と「課金インスタンス推定」に開きがそれなりに場合、無駄があると言えるはず。また、「作成」と「有効」の差が大きい場合も設定が適切でない可能性が高い。(無駄にインスタンスを作成しているかも)
app.yamlの設定を見直すことで、より安く、同等のパフォーマンスを維持できる可能性がある。
参考
-
https://groups.google.com/forum/#!topic/google-appengine/Pbn4omhqv3Y
- GCPのサポート担当者が、作成、有効、課金インスタンス推定についての質問に回答している。一番詳しい情報。
-
https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed#instance_billing
- 「15分間アイドルのインスタンスは課金されない」的な話
-
https://cloud.google.com/appengine/docs/standard/?hl=ja#instance_classes
- AppEngineのインスタンスクラスについて
-
https://cloud.google.com/appengine/pricing?hl=ja#standard_instance_pricing
- AppEngineの料金
-
https://cloud.google.com/appengine/docs/standard/python3/config/appref
- app.yamlのリファレンス(スタンダード環境Python3.7)