GAEを調べてみた
GoでGoogle App Engine(GAE)を利用したくて公式ドキュメントを眺めてみた。
まずGAEではアプリケーションをモジュールで組織する。各モジュールは更にバージョン管理される。 特定バージョンのモジュールに対応したインスタンスが立ち上がり機能を実現する。 そしてインスタンスの稼働で生じたリソース消費に応じて課金される。 なんにせよ先ずはチュートリアルがお金もかからない。
モジュール・アプリケーションの定義
GoogleAppEngineではアプリケーションは モジュールで組織され少なくとも一つのモジュール(defaultモジュール)が存在する。
その全体像はApp Engine Modules in Goを読むと感じが掴める。
アプリケーション・モジュールはapp.yaml
と呼ばれるメタファイルに設定を記述する。
リファレンス(Configuring With app.yml)を眺めると色々な事を指定できる。
下に主な項目を乗せておく。
下記のルーティング指定について補足すると、app.yaml
ではモジュール内でハンドラへのルーティングを扱いアプリケーション全体はdispatch.yamlで行うらしい。
また、アプリケーション・モジュールはドメインを持つがカスタムドメインを利用する事も出来る。
モジュールの実装に使うコードはGo, Python,… がサポートされているがcustom を指定して自由に扱えるらしい。
- アプリケーションの識別情報
- モジュールの識別情報
- 開発コードの指定
- インスタンスのWebサーバ段の挙動 : - ルーティングの指定 - セキュリティポリシーの指定 - ログインポリシーの指定 - デフォルトエラーページの変更 - 静的ファイルのハンドラ設定(キャッシュポリシー,...)
- 管理者ツール設定
- google提供サービスの利用
モジュールを稼働させる方法
本番環境へアップロード したりローカル環境で立ち上げたり するには以下のコマンドを使う。
$ 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.yaml
でinboud_services
フィールドに許可したいサービスの一覧を明記する必要がある。
例えばMail受信を検知を使いたい場合は下の様に記載する。
|
|
GAE上のイベント(インスタンスの立ち上がりなど)検知やGCCサービスとの連携には予約されたURL(/form, /_ar/*)が利用される。 GCCで提供される機能一覧 とappengineパッケージのリファレンス を眺めておくと余計な苦労は減ると思った。