GAEを調べてみた

GoでGoogle App Engine(GAE)を利用したくて公式ドキュメントを眺めてみた。

まずGAEではアプリケーションモジュールで組織する。各モジュールは更にバージョン管理される。 特定バージョンモジュールに対応したインスタンスが立ち上がり機能を実現する。 そしてインスタンスの稼働で生じたリソース消費に応じて課金される。 なんにせよ先ずはチュートリアルがお金もかからない。

モジュール・アプリケーションの定義

GoogleAppEngineではアプリケーションは モジュールで組織され少なくとも一つのモジュール(defaultモジュール)が存在する。

Application hierarchy(公式)

その全体像はApp Engine Modules in Goを読むと感じが掴める。 アプリケーション・モジュールはapp.yamlと呼ばれるメタファイルに設定を記述する。 リファレンス(Configuring With app.yml)を眺めると色々な事を指定できる。 下に主な項目を乗せておく。

下記のルーティング指定について補足すると、app.yamlではモジュール内でハンドラへのルーティングを扱いアプリケーション全体はdispatch.yamlで行うらしい。 また、アプリケーション・モジュールはドメインを持つがカスタムドメインを利用する事も出来る

モジュールの実装に使うコードはGo, Python,… がサポートされているがcustom を指定して自由に扱えるらしい。

モジュールを稼働させる方法

本番環境へアップロード したりローカル環境で立ち上げたり するには以下のコマンドを使う。

$ goapp deploy # 本番環境にアップロード
$ goapp serve  # ローカルで立ち上げてみる

Google Developers Console が提供されておりダッシュボードで操作したりログが見れたりするらしい。 コマンドラインツールも用意されておりgcloud Tool と呼ばれている様子だった。これはデプロイフロー・リソースコントロールを行うらしい。

リソース管理などをダッシュボード・コマンドラインツール・APIとして提供されているのはとても助かる。 クラウドサービスの課金がリソースに直接影響される以上、インタフェースは複数レイヤで提供すべきだと改めて思わされた。

インスタンスへの課金ルールとコストコントロール

生成されたインスタンスは設定したポリシーに従ってスケールされる。 当然リソースに課金されるので、 Quotasを用いて制限を加えたりManaging App Resourcesを参考に設定を調整する必要がある。 先ずはQuotasを設定するのが大事だ。

モジュール間のコミュニケーション

モジュール同士の連携やGCCエコシステムを利用できる。 連携はHTTPリクエストでやり取りを行う方法とGCCにあるObjectStorageやRedisを使う方法がある。 GCCの利用は後で書くのでここではHTTPリクエストについて書く。通常のhttp.Requestなどは使用しない。

GAEではappengine/urlfetch を用いてGoogleのインフラを利用する。 これにはスケーリング・効率の目的があるらしい。urlfech.Client 関数で*http.Clientインタフェースを実装した構造体が手に入るので後は普通に使うだけ。

GAEで提供されるサービス

まずapp.yamlinboud_servicesフィールドに許可したいサービスの一覧を明記する必要がある。 例えばMail受信を検知を使いたい場合は下の様に記載する。

1
2
inbound_services:
  - mail

GAE上のイベント(インスタンスの立ち上がりなど)検知やGCCサービスとの連携には予約されたURL(/form, /_ar/*)が利用される。 GCCで提供される機能一覧appengineパッケージのリファレンス を眺めておくと余計な苦労は減ると思った。

comments powered by Disqus