サーバレスアーキテクチャ

Google App Engine(GAE)のフレキシブル環境とスタンダード環境の違いを把握する

Google App Engine(GAE)のバックエンド環境である、フレキシブル環境とスタンダード環境の違いを見ていきます。

Google App Engineの環境とは?

Google App Engineには、フレキシブル環境とスタンダード環境の二つ環境があります。環境の指定は、app.yamlで、

env: standard

とすることで、指定できます。

名前が違うだけでなく、中身も料金体系も全く異なるため、GAEでアプリをリリースする前にそれぞれの特徴を確認しておきましょう。

スタンダード環境の特徴

スタンダード環境は、指定した言語のアプリを「GAEが用意するサンドボックス内で実行」する環境です。

スタンダード環境にデプロイしたアプリは、GAEが管理する環境内で実行され、インスタンスのスケーリングも自動で行ってくれます。まさに、サーバーの存在を意識しない(もしくは全く見えない)サーバーレスなサービスとなっています。

また、トラフィックがない場合はインスタンスを0にすることも可能で、GAEスタンダード環境のインスタンスの動きは、

  • GAEが自動で待ち受けインスタンスを設定する(無料)
  • アクセスがきたらインスタンスを有効(課金)にする
  • アクセスが急増したら設定に合わせてスケーリングする
  • 課金はトラフィックに合わせたインスタンス起動時間

となっています。

また、GAEスタンダード環境は、Google Cloud PlatformのAlways Free枠が設定されていて、

  • 1 日あたり 28 インスタンス時間
  • 5 GB のクラウド ストレージ
  • 共有 Memcache
  • 1 日あたり 1,000 回の検索オペレーション、10 MB の検索インデックス作成
  • 1 日あたり 100 件のメール

までが無料となります。

フレキシブル環境の特徴

GAEが用意したサンドボックス内で実行されるスタンダード環境と違い、フレキシブル環境はGoogle Compute Engine(GCE)上の仮想マシンでDockerコンテナを実行する形式になっているため、簡単にいうと「GAEでデプロイするけど、実質、管理が容易なGCE」です。

「gcloud app deplay」コマンドでのアプリのデプロイや、インタンスの自動スケーリング設定など、アプリをデプロイ・管理する方法は、スタンダード環境と同じです。ただ、バックエンドや機能、課金体系が違うだけです。

GAEフレキシブル環境は、GCE上で展開するDockerコンテナなので、Dockerfileで環境を自由に構築することができるため、カスタマイズ性はスタンダード環境と比べて格段にアップします。

ただし、リクエストを捌くためには仮想マシンを常時起動しなくてはならないので、スタンダード環境とは違ってアクセスがない時の0インスタンス指定ができず、Alyways Free枠もないため、フレキシブル環境では無料運用ができません

つまり、GAEフレキシブル環境は、

  • Dockerでできることは何でもできる
  • アクセスがなくても最低でも1インスタンスを常時起動・常時課金
  • GAE指定の言語なくても利用可能
  • 課金は、使用したvCPU、メモリ、ディスク量に応じて課金

と、ヘビーユーザー向けの環境と言えるでしょう。

GAE環境比較表

機能 スタンダード環境 フレキシブル環境
インスタンスの起動時間 秒単位 分単位
リクエストの最大タイムアウト 60秒 60分
バックグラウンド スレッド ○(制限付き)
バックグラウンド プロセス ×
スケーリング 手動、基本、自動 手動、自動
ゼロインスタンス ×(最小 1 インスタンス)
ランタイムのカスタマイズ × ○(Dockerfile 経由)
デプロイ時間
利用可能言語 (ランタイム) Python 2.7、Python 3.7
Java 8、Java 11(ベータ版)
Node.js 8、Node.js 10
PHP 5.5、PHP 7.2、PHP 7.3(ベータ版)
Ruby 2.5(ベータ版)
Go 1.9、Go 1.11、Go 1.12
Python
Java
Node.js
Go
Ruby
PHP
.NET
およびDockerfileで指定した言語
ロケーション 北米、アジア太平洋、ヨーロッパ 北米、アジア太平洋、ヨーロッパ
料金 インスタンス時間単位 vCPU、メモリ、永続ディスクの使用量単位
Always Free ×
予算上限の設定 ×

課金体系で比較する

GAEでの課金に関する部分で環境を比較していきます。

機能 スタンダード環境 フレキシブル環境
料金 インスタンス時間単位 vCPU、メモリ、永続ディスクの使用量単位
Always Free ×
予算上限の設定 ×
ゼロインスタンス ×(最小 1 インスタンス)

大きな点でいうと、

  • スタンダード環境は無料運用可能で、予算上限の設定もできる
  • フレキシブル環境は常時課金で予算上限設定はできず、インスタンス上限で制御するしかない

という点です。

特に、フレキシブル環境は「常時1インスタンス以上の立ち上げが必須」となり、設定した予算上限は無視されます。そのため、スタンダード環境よりも高額の請求になりがちです。

GAEで無料でアプリを運用したい場合は、こちらの記事もどうぞ。

機能で比較する

GAEの機能面から環境を比較します。

機能 スタンダード環境 フレキシブル環境
リクエストの最大タイムアウト 60秒 60分
利用可能言語 (ランタイム) Python 2.7、Python 3.7
Java 8、Java 11(ベータ版)
Node.js 8、Node.js 10
PHP 5.5、PHP 7.2、PHP 7.3(ベータ版)
Ruby 2.5(ベータ版)
Go 1.9、Go 1.11、Go 1.12
Python
Java
Node.js
Go
Ruby
PHP
.NET
およびDockerfileで指定した言語
バックグラウンド プロセス ×

目につく大きな違いは、利用言語環境の違いですが、さらに注意しておきたいのは、リクエストの最大タイムアウトです。

最近は高速レスポンスが常識となっているので、タイムアウトが60秒もあれば十分なことが多いですが、何か巨大な処理を行うようなサービスの場合(データの同期やダウンロードなど)、60秒でタイムアウトしてしまうと致命的になることもあるため、その場合は必然的にフレキシブル環境一択となります。

また、バックグランドで処理をする必要がある場合もフレキシブル環境でしか実行できません。

逆にいうと、そこに問題がないのであれば、コスパを考えてもスタンダード環境を選ぶ方が良いでしょう。


以上、簡単にですが、Goole App Engineのフレキシブル環境とスタンダード環境の違いを比べてみました。

デプロイする時には環境の違いを全く意識しないで良いように作られているのがGAEの優れたところで、どちらもきちんと「サーバーレスサービス」になっています。

ただし、よくよく機能や課金体系をみていくと、名前以上の違いがあることがわかります。GAEを利用する際は、環境の違いもしっかりと把握してきましょう。

参考:App Engine 環境の選択 | Google Cloud


価格は記載がある場合を除き、すべて税抜きです。

この記事の関連キーワード

サーバレスアーキテクチャの記事