GCPとは。GAE・GCE・GKEを調査しました

GCP とは

Google Cloud Platform の略で、Google が提供するクラウドサービスです。
クラウドサービスを提供する大手の一つで、AWS , Azure の 2 社と並びます。

準拠法・裁判地

日本でサービスを導入するにあたって気になるのが準拠法と裁判地ですが、2020/04 現在、GCP の準拠法は日本法ではないようです。

Google Cloud Platform Terms of Service

  1. 準拠法は、「16.10 U.S. Governing Law.」と書いてあり「米国法」です。
  2. 裁判地は、「SANTA CLARA COUNTY, CALIFORNIA, USA」と記載されており、カリフォルニア州です。

GCP の現在のシェア

  1. 以下記事によると、2019 年 11 月時点の世界の GCP のシェアは、全体の約 6%を占めており、AWS が全体の約 40%であるので、まだまだ AWS のシェアのほうが高いです。
  2. AWS のシェアの変移が平行であることに比べ、GCP のシェアは年々上昇しており、近年のマイクロサービス化の流れにより、コンテナ利用の需要が高まると、シェアが上昇していくのかもしれません。
  3. ふくおかフィナンシャルグループの勘定系システム基盤では、GCP を導入することが決定しているそうです。

GCP とマイクロサービス

  1. マイクロサービスでアプリケーションを開発する場合、一般的に、各アプリケーションを 1 サービスとして、docker によりコンテナ化します。
  2. コンテナを運用管理(スケールしたり、デプロイしたり)する際に一般的に使われている Kubernetes というオープンソフトウェアの開発元は Google です。
  3. GCP には Kubernetes を使う GKE というサービスがあったり、docker コンテナに関するサービスが充実しています。
  4. また、Go 言語も Google が開発元で、GCP の殆どの機能で Go 言語がサポートされています。

GCP でのコンテナを使ったアプリケーション開発

GCP には、コンテナを扱えるサービスがいくつかあります。
開発するアプリケーションによってどのサービスを利用するか変わってくるので、それぞれについて記載します。
この記事では、下記 3 種類について記載します。

  1. GAE(App Engine)
  2. GCE (Compute Engine)
  3. GKE (Kubernetes Engine)

GAE を利用したアプリケーション開発

GAE は、PaaS です。
アプリケーションを実行する環境を提供するサービスなので、インフラの構築・運用保守管理が不要で、アプリケーション開発のみに専念できます。

GAE には 2 種類の環境があり、それぞれ仕組みや制限が異なります。

  1. スタンダード環境
    1. Google のインフラストラクチャー上でアプリケーションは動作する
    2. ディスクへの書き込み不可、CPU,メモリに制限がある、使用できるライブラリが制限される
    3. 外部サービス(GCP 内の別サービス)へのアクセスは、google.appengine API を利用する
    4. アプリケーションは、App Engine SDK で動作するため、App Engine SDK で動作専用で実装する必要がある
  2. フレキシブル環境
    1. Google Compute Engine(GCE) の Docker コンテナ上でアプリケーションは動作する
    2. ディスクへの書き込み可、CPU,メモリは GCE のマシンタイプ次第、任意のプログラミング言語、ライブラリが使用可能
    3. 外部サービスへのアクセスは、Google Cloud クライアント ライブラリを利用する(GKE、GCE 上でも利用可能なため、それらに移行して実行可能)
    4. アプリケーションは、通常の実装と同じで OK(App Engine SDK は使用しない)ただし、Cloud Datastore など、GCP のサービスを利用する箇所は、ローカルで実行する際は、実際にテスト用に用意する必要がある。

スタンダード環境は、GCP のサービスの中で最も容易に WEB アプリの構築が可能ですが、制限が多く、HTTP リクエストに素早くレスポンスするアプリケーションに向いています。
マイクロサービスの単位で部分的に GAE を使うなど、使い分けることも可能です。

また、GAE は、1 プロジェクト= 1 アプリケーションなので、複数アプリケーションを動かすには、GCP のプロジェクトを複数用意することになります。

GCE 上でコンテナを起動するアプリケーション開発

GCE は、IaaS です。
仮想化されたインフラ環境を提供するサービスなので、EC2 などと同じく、提供された VM 上で、ミドルウェアのインストール等、VM として自由に実行可能です。(もちろん、ssh で root でアクセスして・・ということも可能)

また、GCE では、コンテナイメージを指定してコンテナを起動するインスタンスを構築ができるため、コンテナイメージさえあれば、簡単にコンテナ化したアプリケーションを起動できます。

コンテナイメージを指定する場合、下記のようにインスタンスが生成されます。

  1. VM の OS は Container-Optimized OS という GCP で提供されているものに限る
  2. VM 1台で動かせるコンテナは 1 台
    • VM 1台で複数のコンテナを動かすためには、GKE を利用することになります。

GKE を利用したアプリケーション開発

GKE は、Kubernetes の技術を用いた、コンテナのデプロイ、スケーリングといった、コンテナの運用管理が可能なサービスです。

小さな簡易なアプリケーションであれば、GAE や GCE を利用することで十分ですが、
大きな WEB サイトなどで、スケーリングしたり、負荷分散を行う場合には、GKE を利用することになります。

GKE の大まかな仕組み

GKE の仕組みは下記図のようになります。

  • クラスターマスター
    1. ここで Kubernetes のコンテナ管理機能が動作します。実際には、API や、kubectl コマンドで実行したり、Cloud Console の UI から操作を実行します。
    2. クラスターマスターは、google によってメンテナンスされますが、メンテナンスがあってもサービス断はありません。
    3. 単に「クラスター」や「マスター」と呼んだりもします。
  • ノード
    1. 実際にコンテナを動作させる場所です。
    2. 実体として、Compute Engine のインスタンス(GCE)で動いています。(そのため、GCE の利用料金がかかる)
    3. インスタンスはクラスタを作成すると GKE によって自動的に作成されるので、あまり意識する必要はありません。(インスタンスが作成される数は指定可能)

基本的に、コマンドラインから、クラスタの生成や、コンテナのイメージを実行できます。
例えば、コンテナイメージの更新であれば、kubectl コマンド など GKE の用意する API によって実行します。(kubectl コマンドも、根幹は API を使っていると思われる)
Kurbernates API は、 SLA 99.95% のため API の可用性も保たれています。

クラスタ・ノードのリージョン・ゾーン

クラスタやノードは、可用性のため、リージョン、ゾーン(各リージョンの配下に存在する。)をまたいで稼働させることができます。

下記種類があります。

  • シングルゾーンクラスタ
    • 1 つのゾーンで、マスタとノードを稼働させます。
    • 一番安価だが、可用性は低い。
  • マルチゾーンクラスタ
    • ノードは、複数のゾーンで稼働しますが、マスタは 1 つのゾーンで稼働します。
    • 実際にアプリケーションが稼働するノードの可用性は高くなります。
    • マスタの可用性は、シングルゾーン クラスタと変わらず、例えば、クラスタのアップグレード中は、マスタ上でコンテナの構成変更等が行えなくなります。(クラスタは定期的にアップグレードする必要がある)
  • リージョンクラスタ
    • マスタとノードを特定の 1 リージョン内の複数のゾーンで稼働させます。
    • その分、GCE(Compute Engine)を使用するため、効果になります。
    • マスタに可用性があるので、クラスタのアップグレード中でも、コンテナの構成変更等が行なえます。

SLA は下記のように定義されています。

  • リージョンクラスタ: 可用性 99.95%
  • ゾーンクラスタ: 可用性 99.5%

GKE の料金

料金体系の詳細は下記に記載されているのですが、ざっとポイントを箇条書きします。
https://cloud.google.com/kubernetes-engine/pricing

  • クラスタごとに 1 時間あたり \$0.10 の管理手数料
  • 1 ゾーンクラスタ 1 つ分は無料
  • ノードで稼働する Compute Engine の料金は課金対象(ノードをどのくらいの規模で動かすかによって Compute Engine の数(料金)は変動する。)

実際に WEB アプリを作成

実際に WEB アプリを GCP で構築してみました。下記記事を参照ください。
GCP で Web アプリ環境構築

さらに、下記記事で、GCP で CI/CD 実践してみました。

GCP で CloudBuild を使って CI/CD を実践