こんにちは、小西です。
気がついたら年が変わっていました。2016年はブログを書く年にしようと思います。
さて、Google App Engine (GAE)をご存知でしょうか?
- 「知ってるよー。Google がやってるPaasでしょ。でも仕事じゃ使えないよねー。」
- 「JavaとPythonだけでしょ?」
- 「すごいダサい管理画面のやつでしょ?」
こういうイメージの方が結構多いんじゃないでしょうか。 僕も含め、GAEが出た当初触って以来、という方は、上の印象が正しいと思います。
僕もこういう印象だったのですが、いつのまにかPHPが正式対応していたのに気づき、軽く使ってみたら、非常によかったので、今日はその話をします。*1
GAEとは?
GAEは、Google がやっているPaasのサービスです。
- 必要な作業は、ソースコードをデプロイするだけ
- Paasなのでインフラの心配をしなくていい(最高!)
- 無料枠が大きく、無料運用が可能!
- Python, Go, Java, PHPの4言語に対応
- Google の最強のエッジキャッシュが使える(静的ファイル用CDN)
もともとPythonかjavaのコードをデプロイできて、Google のインフラで動かせるよ、という単体のサービスだったのですが、いつのまにか、Googleがやっているクラウドサービス Google Cloud Platform (GCP)に組み込まれていました。
おすすめの理由
おすすめの理由① 安い(月間数十万PV規模なら無料での運用も可)
やはりいちばんの理由は、「安い」ですね。そして、無料枠が多いので、多くのサイトで無料での運用ができると思います。おそらく、通常のサイトで数十万PV規模であれば十分無料枠に収まるんじゃないでしょうか。
主なコストは、インスタンスの稼働時間に対する課金になるかと思いますが、こちらは28時間まで無料です。
つまり24時間のうち20時間は1インスタンス、4時間は2インスタンス稼働するイメージです。 サイトにもよると思いますが、私が運用している月間50万PVほどあるサイトでは、この枠内で問題なく運用できています。
おすすめの理由② 開発・運用が楽
ソースコードのルートディレクトリにapp.yaml
というプロジェクト名や環境を記したファイルをおいて、SDKのコマンドでデプロイするだけで、サイト構築作業完了です。
あとは、「プロジェクト名.appspot.com」というURLにアクセスがあるたびにGoogleのインフラ上で「インスタンス」が立ち、アクセスをさばいてくれます。
この「インスタンス」は、サーバーというよりは、「1プロセス」に近いです。アクセスがあってから立ち上がるというと、立ち上がり遅そうですが、3-5秒くらいで立ち上がります。
いままでVPSだったりAWSのEC2で運用していましたが、ログローテーションがちゃんと動いてなかったり、たまにパッチをあてたり、何かと面倒な作業が発生しますよね。そういう面倒な運用から完全に開放されます。
また、ローカル用の開発環境もついているので、MAMPとかを入れる手間もありません。
おすすめの理由③ スケールする
GAEはデフォルトでAutoScalingの考え方で設計されています。アクセスが増えるとインスタンスが増え、減るとインスタンスも減ります。 これがGCEとかAWSのEC2とかだと非常に面倒ですよね。。
これでアクセスが集中した際の安心がありつつ、平常時のコストは最小に抑えられます。
設定自体はApacheのPreforkみたいなパラメータで調整します。
おすすめの理由④ 必要なものが大体入っている
大体使うであろうサービスもGAEの無料枠で使えます。
Memcache
無料枠で使えます。このサーバーはフルマネージドサービスとして利用でき、インスタンス時間は消費しません*2。
AWSのElastiCacheに似ていますが、このMemcacheサーバはElastiCacheと違って自動でスケールするので、空気みたいに利用できます。
Data Store
NoSQLサービスです。AWSのDynamoDBに近いですが、ドキュメントを読んだ感じは、DynamoDBよりは柔軟そうです。
残念ながら、MySQLなどのRDBMSを使用したい場合は、Cloud SQLというサービスを利用するか、諦めてこれを使う必要があります。 DataStoreへの対応はSDK経由でやらないといけないので、事実上不可能なので、Cloud SQLを使うことになるかと思います。
Data Storeに対応するように書いておけばスケールするので、安心ですね。その後GAEから抜けられなくなりますが・・
エッジキャッシュ
あまりサイトではプッシュされていないのですが、これだけでもGAEを使う理由になるんじゃないかと個人的に思うのが、このエッジキャッシュです。
CDNみたいなものなのですが、特に何も設定しなくても、cssやjs、画像などの静的ファイルは勝手にキャッシュされます。
HTMLをキャッシュするときは、HTTPのヘッダーにcache-control
をつければOKです。
GAEではWordPressも動くので、GAEに移動してこのヘッダつけるだけでも爆速になると思います。
Cloud Storage
静的ファイルホスティングもあります。AWSでいうところのS3、さくらクラウドでいうところのオブジェクトストレージですね。
ログ
ログ保存用のサービスも用意されています。プログラムからsyslogに送ったログがブラウザから確認できます。 ログの保管も地味に面倒なんですよね。ログからメトリクス作って、アラート飛ばす、というのも、CloudMonitoringとの連携で可能です。
Cloud Monitoring
監視サービスです。メトリクスの収集と表示、アラートの送信、インシデントの管理ができます。AWSでいうと、CloudWatch+SNSという感じです。 このサービスはGoogleが買収したstackdriverのサービスを使えるようになっています(今は無料)。
Cloud DNS
DNSサーバーです。SaaSなので、管理画面でポチポチするだけで設定完了です。AWSでいうとRoute53ですね。
こちらは有料ですが、1ゾーンあたり0.2ドルなので、月100円かからないくらいかと思います。 今までドメイン業者のレンタルDNSサーバーを使ってた方は直ちに移行していいレベルなんじゃないでしょうか。
これはGAEのサービスではないので、使った分課金されます。
その他
cron, タスクキューなどもあり。
残念な点
- 日本にデータセンターがない!(これは結構痛いです・・・西海岸のリージョンにしてもどんな軽い処理でも数百msかかってしまいます。。)
- 無料枠を超えてからはあまり安くない(運用しないと何インスタンス必要なのかわからないのも怖いですね。。)
- PHPのSDKがDataStoreに対応していない・・・なぜ。。(他の言語は対応しているのに・・)
- PHPだとcurlの対応がないので、書き直しが必要*3
こんなサイトにおすすめ
- アクセスの大半がほとんど閲覧
- インフラの面倒を見たくない
- コストを最小にしたい
- PVが月間数十万規模と小規模
- WordPressで運用している
- PHPでサイトを作ってみたい(練習用として最適)
WordPressについては、Googleが導入手順を以下にまとめています。 GitHub - GoogleCloudPlatform/appengine-php-wordpress-starter-project: Starter project for running WordPress on Google Cloud Platform
まとめ
表示されるだけのキャンペーンサイトや何かのLP、WordPressで動いているちょっとしたサイトなど、RDBMSの要らないシステムであれば、全部GAEで対応しちゃっていいんじゃないかと思います。RDBMSが必要でも、DBだけCloud SQLでやるのもありですね。
ブログやLPなど、人によってコンテンツを変える必要のないサイトの場合、Google のエッジキャッシュが使えるのはデカそうですね。
AWSにはGAEみたいなサービスはないので、今後出てくるかも? これはこれで楽しみ。
とりあえず使ってみる方はこちら:
本当に5分でデプロイまでいけちゃいます。
無料で運用したい方はこちら:
Standard Environment と Flexible Environmentについて
この記事は「App Engine Standard Environment」のものです。
裏でVMが立ち上がってSSHログインができたりする、「App Engine Flexible Environment」(旧Managed VMs=MVMs)というのもありますが、こちらのほうが運用負荷・導入の難易度が上がる代わりに、自由度が増えます。 ただこちらは、公式にはPHPは対応していないのと、まだ beta なので、この記事ではスルーしました。
公式サイト: App Engine - Platform as a Service | Google Cloud Platform
ちなみに① わたしのサイトでの運用状況
僕としては少しでもGAE人口が増えて情報が増えたらとても嬉しいです。
ちなみに、以下のサイトは月間50万PVくらいありますが、12月にGAEに移行し、これまで完全無料で運用しています。
両方共、トップページはエッジキャッシュが効くようになっているので、二回目は50msくらいで表示できるのがわかると思います。
ちなみに② Herokuより良い点
イメージとしてはHerokuに近いですが、Herokuと比べると、以下の違いがあります。
- 安い(というか無料枠が大きい)
- Googleの巨大インフラにそのまま乗っかれる(エンジニア的な気持ちよさがすごい)
- コンソール(管理画面)がかっこいい(これ大事ですよねw)