AppEngineで静的コンテンツ配信用テンプレート

AppEngineで静的コンテンツ配信用テンプレートを作りました。

2016/4/16

Google App Engine(GAE)は、Python、Java、Go、PHPでWebアプリケーションが作れるPaaSのサービスです。
実は、静的コンテンツを配信する為のサーバーとしてもとても強力なサーバーになります。

GAEで静的コンテンツを配信する上での予備知識

以下の特徴を知っていると理解しやすいかと思います。

  • PaaS
  • リクエストがきたら上がって、その分だけの課金
  • オートスケール
  • Static Server(インスタンス使わない)
  • エッジキャッシュ

以下で、簡単に各機能を紹介したいと思います。

PaaS

Platform as a Service です。
世の中でクラウドという言葉がバズワードになってだいぶ経ちますが、PaaSはやっと実用段階になってきている感はありますね。
GAEは、Googleがクラウドサービスとして一般に提供し始めた最初のサービスとも言えるサービスです。
正確には、GmailなどSaaSにあたるサービスはそれ以前からありましたが、自分のサービスを提供できるプラットフォームとしては、かなり早い段階で出ています。

一般によく使われているApacheなどのWebサーバーなどを既によういしてあり、ユーザ側はHTMLなどを用意してデプロイ(サーバーへのアップロード)をするだけで、世界に発信できる様になります。

リクエストがきたら上がって、その分だけの課金

GAEは、通常はinstanceが落ちている状態になります。
リクエストを受けてからinstanceを立ち上げて、リクエストを処理します。instanceを立ち上げるのを「spin up」落とすのを「spin down」と言っています。
GAEは、このspin upが異常に早いために、無駄なリソースを利用せずに課金額が抑えることが可能となっています。
これを実現するために、ある程度の制限が入っていますが、静的コンテンツを配信する上では、影響の出る制限はありません。

オートスケール

オートスケールは、このspin upが早いことで通常のシステムでは考えられない様なスケールをすることが可能となっています。
GAEでは、アクセスが多くなって一つのインスタンスでは捌ききれなくなると、自動でインスタンスを上げて処理をしてくれます。
後述しますが、静的コンテンツの配信では、オートスケールの機能を使う必要もありません。

Static Server(インスタンス使わない)

GAEは、Python,Java,Golang,PHPでアプリケーション開発が可能となっていますが、これらのアプリケーションを実行するためのアプリケーションサーバーが用意されています。これらを動かすと課金対象となります。
(無料枠もあるし、アクセスがあまり多くなければほぼ無料で運用が可能です)

これに対して、html,css,js,image,fontなどの静的コンテンツは、Static Serverからの配信が可能です。
こちらは、インスタンを立ち上げることもないため、課金対象にもなりません。
静的コンテンツだけの配信は、このサーバーのみを利用することが可能となります。
※アクセス数が多くなると、ネットワーク料金が多少かかることは有ります。

Googleの強力なインフラを利用しているため、アクセスの急激な増加も気にする必要はありません。

エッジキャッシュ

Googleのネットワークは、各国にそれぞれのGoogleのネットワークへの入り口が用意されています。GmailなどのGoogleのサービスを利用する際に、その入口のところでキャッシュされているものを返す機能があります。
利用者に近いところでキャッシュされているため、レスポンスがとても早くなります。

クライアントキャッシュを利用する際に、レスポンスのheaderにキャッシュの設定をすると思いますが、それを設定しているとエッジキャシュに乗ることがあります。ベストエフォートとなっているため、利用者側での制御はできず、Google側が独自のルールにより判断してキャッシュに乗せているそうです。

GAEを使った静的コンテンツの配信のメリットまとめ

  • GAEが備えているStatic Searverを使うことで、課金対象にもならない。
  • Googleの強力なインフラを利用できるため、急激なアクセス増加(いわゆるWBS砲など)も気にする必要がない。
  • 場合によっては、強力なキャッシュが利用可能。

各行政ので、災害時のHPなど通常はほとんどアクセスがなく、発生時に急激なアクセスが見込まれる様なページにも最適だと思います。

テンプレートについて

普段GAEを使っている側からすると、静的コンテンツにGAEを使わない理由がないくらいなのですが、AppEngine SDKの導入、GAEの設定ファイルのapp.yamlなど記載方法を覚えることもあり、敷居が高くなるのではないかと思います。
そこで、簡単にお試し頂けるようなテンプレートを作ってみました。

こちらでGithubのリポジトリを公開しています。

こちらのREADME、および、ここからもリンクしている以下のリンクでapp.yamlなど記載方法等を解説しています。

最後に

この内容は、GCPUG Shonan feat.GAE vol.2 向けに作成しました。
イベントでは、この内容を説明し実際に触って頂きました。

今回は、個人的な趣味もあり、一部(NotFoundの場合の処理)Golangを入れています。
Pythonの方が、GoogleAppEngineLauncherが使えるようになるため、ターミナル等を利用する部分が減ってさらに敷居が低くなるように思いました。
今後、Python用もつくろうかなー。

GAEに関して、何か質問や相談などありましたら、こちらの問合せフォームからご連絡下さい。
FreeGufo 問い合わせフォーム

By nuki_pon

Related articles

--- AD ---