鱒身(Masu_mi)のブログ

知った事をメモする場所。

GAEを調べてみた

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

まず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 が提供されておりWEB上で操作したりログが見れたりするらしい。 コマンドラインツールも用意されておりgcloud Tool と呼ばれている様子だった。これはデプロイフロー・リソースコントロールを行うらしい。

リソース管理などをWEBコンソール・コマンドラインツール・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受信を検知 を使いたい場合は下の様に記載する。

inbound_services:
  - mail

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