- 2015年にGoがサポートされ、最近東京リージョンが発表されるなどGAEの取り巻く環境は、改善されてきています。また、AWS Lambdaのような、Paas的なサービスがリリースされPaas的なサービスが増えてきています。
- Paasの古参GAE/GO でWebアプリを作るための情報収集をしました。
概要
まずは公式から
Google App Engine は拡張可能なウェブ アプリケーションとモバイル バックエンドを作成するためのプラットフォームです。App Engine には、NoSQL データストアや Memcache、ほとんどのアプリケーションで使用されているユーザー承認 API など、さまざまな API と組み込みサービスが用意されています。
App Engine は、受信したトラフィック量に応じて自動的にアプリケーションを拡張するので、未使用のリソースに対して費用が発生することはありません。 コードをアップロードするだけで、Google がアプリの可用性を管理します。サーバーのプロビジョニングやメンテナンスを行う必要はありません。
まとめると↓
コンセプトと機能
- スケーラビリティとアベイラビリティ
- Web/MobileアプリプラットフォームのPAAS
- (Webアプリのスタックで)Httpサーバレイヤー以下を提供
- 加えて、認証など通常アプリサーバレイヤーで実現する機能も提供
ざっくりとしたイメージだと、Javaでいうサーブレットレベルのところまで独自開発したPAAS。特定の用途に特化したため、DBやキャッシュ、ロードバランシングなども全て独自のものを作ってある。また、一般的なレイヤーにとらわれず、認証など必要なものは入れた感じです。
コストが下がる要素
- インフラの物理的なコスト
- インフラ構築・運用コスト
- インフラ設計コスト(※GAEの構成を理解して適切な設定をする必要はあるが、従来に比べれば低い)
コストが上がる要素
- GAEの構成を理解する必要がある
- HTTPサーバの特性、負荷分散のしくみなど
- HTTPSやドメイン関連で実現できないことがある
- GAEの各サービスを理解する必要がある
- NoSQL(Datastore), Memcacheなど
- GAEの開発手法を理解する必要がある
- 開発環境、テストフレームなど
- (上記特性を生かした)GAE向けの設計にする必要がある
- 情報が古い場合がある。最新の情報は1次情報を確認する
情報源
- 公式 Google App EngineドキュメントGoチュートリアル、ガイド、リファレンスなど一通り揃っている
- プログラミングGoogle App EngineGAEのコンセプトとはまりどころがよくまとまってる。GAEは、一般的なWebアプリをクラウド化したサービスでは「ない」ことが技術的な観点で書いてあって、Webアプリエンジニアにとっては、違いが明確になって理解しやすい。Goの説明はない。
- 2016年半ば現在のGoogle App Engine GAEの歴史と経緯
GAEの書籍は他にもいくつか出ているので、1冊手元にあるといいと思います。
また、ネット記事は2013年くらいまでのが多いですが、大体出てくるので、個別のトピックに関しては、都度検索する方が良さそうです。
Sample
- 公式チュートリアル 一通り触って動かせる。
- 公式How-to Guides Developing Go Apps on App Engine GAEのドキュメントを開くと左メニューにハウツーガイドが表示される。そこのDeveloping~の中にテストの仕方などがある。
- Google App EngineとGoでブログ風CMSを自作する 実際に開発する際のライブラリなどの紹介があるなど非常に実践的です。
実際に
GAEは特定用途に特化したGoogleらしいサービスです。確かにゲームなど想定するアクセス数のレンジがかなり広い場合は有効だと思います。
GAEの紹介ケースで、メディアなど突発的ににアクセスが増えた場合に自動でスケールするというのがあります。GAEが出た当初はそうかもしれませんが、現在は状況によりけりかと思います。上記の本にもありますが、GAEはサーバ1台でまかなえなくなったときに真価を発揮するですが、Iaasのバランシングの制御も今はかなり楽に柔軟にできるので。
実際に開発する場合は、GAEの設計モデルとDatastore(GAE向けに開発されたKVS)、各種API群をよく理解して使いこなすのが肝です。
AWSのLambdaでもそうですが、Paasでは設計モデルと各種サービスとの連携の理解が不可欠です。従来のWEBフレームワークを使うのと同様に、しっかりと習熟するレベルになっておけば、モデル自体はシンプルなので開発効率が高まります。
単純にWebアプリを作るだけならば、得意なWAF+Iaasで作った方が簡単です。 また、PaasだとOSSではないため、動作がわからないときは、ソースを見るのは通じないですね。
「得意なWebアプリ開発プラットフォームにGAEを加えよう」という考え方で取り組む方が、しっくりきそうです。
ではよきGAEライフを!