はじめに
Google Compute Platformに限らず、パブリッククラウドで提供されているPaaS、IaaSサービス。なんとなくは理解しているつもりだけど、実際どれを使った方が良いのか整理できておらず、割となんとなく決めてしまっている気がします。できること、できないことを把握してないとサービスの規模や状況に対して過剰なインフラ環境を構築してしまったり、リソースを割きすぎてるケースもあるんじゃないかと思います。
初学者のため体験的な比較ができませんが、公式ドキュメントなどを参考に自分なりの判断基準をまとめてみようと思います。
概要
GAE(Google App Engine)
Google App Engine は、Google のインフラストラクチャ上でアプリケーションを作り、実行できるようにする PaaS ( Platform as a Service : サービスとしてのプラットフォーム)です。
Google App Engine にはスタンダード環境(Standard Environment)とフレキシブル環境(Flexible Environment)があります。どちらの環境を選択するべきかは以下の公式ドキュメントを参考にすると良さそうです。
ただし、以下にもあるように、どちらかの環境のみを使用する必要はなく、メインアプリケーションは、スタンダード環境で構築し、スタンダード環境では不可能な動作を必要とする部分をフレキシブル環境でマイクロサービスとして作成して呼び出すような構成が推奨されています。
フレキシブル環境は、スタンダード環境を補完することを目的としています。既存のアプリケーションをスタンダード環境で実行している場合、通常、アプリケーション全体をフレキシブル環境に移行する必要はありません。
GCE(Google Computer Engine)
Google Computer Engine は、Google のインフラストラクチャ上で仮想マシンを作成して実行できるようにする IaaS( Infrastructure as a Service : サービスとしてのインフラストラクチャ)です。
Compute Engine インスタンスでは、Google が提供する Linux 用または Windows Server 用の公開イメージだけでなく、独自に作成したか既存のシステムからインポートした非公開のカスタム イメージも実行できます。Docker コンテナをデプロイすることもできます。
GAEフレキシブル環境のVMとComputeEngineのVMの違い
- フレキシブル環境の VM インスタンスは毎週再起動します。再起動中に、Google の管理サービスがオペレーティング システムとセキュリティの更新を適用します。
- Compute Engine VM インスタンスにはルート権限でアクセスできます。デフォルトでは、フレキシブル環境の VM インスタンスへの SSH アクセスは無効になっています。アプリの VM インスタンスに対するルートアクセスを有効にすることもできます。
- Cloud Build サービスを使用してコンテナ イメージを構築すると、コードのデプロイに時間がかかる可能性があります。
- フレキシブル環境の VM インスタンスの地理的なリージョンは、GCP プロジェクトの App Engine アプリケーションに対して指定した場所によって決まります。Google の管理サービスは、VM インスタンスを同じ場所に配置して最適なパフォーマンスを得られるようにします。
GKE(Google Kubernetes Engine)
Google Kubernetes Engine は、Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行うマネージド環境です。GKE 環境は複数のマシン(具体的には、Google Compute Engine インスタンス)で構成され、これらのマシンがグループ化されてクラスタを形成します。
Kubernetesの詳細についてはこちらを参照してください。
公式ドキュメントで挙げられていた利点の中で、個人的に気になった点は以下の通りです。
- 継続的な開発、インテグレーション、デプロイ
- 開発、テスト、本番環境に跨った環境の一貫性
- 疎結合で、分散された、伸縮自在の遊離したマイクロサービス
- クラウドとOSディストリビューションの移植性
判断基準
以下の基本的な基準をケースにあてて判断ができそうです。
- アプリケーション(規模、アーキテクチャ、更新頻度)
- リソース(インフラ担当者の有無、導入コスト)
- 状況(開発フェイズ、将来的な見込み)
- 費用
インフラを自前で構築、管理する必要があるか
必要がある → GCE or GKE
必要がない → GAE
- GAE制限外の環境を構築する必要があるか
- インフラ面にリソースを割けるか
Kubernetesを利用する必要があるか
必要がある → GKE
必要がない → GCE
- 採用するメリットが、導入コストよりも多いか
おわりに
自分なりの基準なので、基本的には以下の公式ドキュメントを参考に使用するサービスを決めていきたいです。
参考
Google App Engine のドキュメント
Compute Engine ドキュメント
Google Kubernetes Engine のドキュメント
GCEとGAE、どっち使えばいいの?という人のためのGCP運用診断