The Round

合同会社ナイツオの開発ブログ

静岡でGo言語やりたい人!!→こちら

Google App EngineのModules・Versionsとqueueやcronの設定ファイルとの関連をいろいろ試してみた。

どうもこんにちわ。マツウラです。
今回はGAEアプリケーションのModulesやバージョンと、CronやTaskqueueの設定がどう関連しているのかをいろいろ試してみました。

参考:App Engine Modules in Go - Go — Google Developers

GAEのモジュールは、異なるランタイムや設定でアプリを動作させることが可能です。
その際に、dispatch.yaml, cron.yaml, index.yaml, and queue.yamlの4ファイルは、アプリ共通の設定ファイルとなります。

どの設定ファイルが反映されるのか

感覚的にはこれら設定ファイルは、個々のモジュールごとのフォルダに別々に用意するものだと思っていましたが、正しくはデフォルトモジュールの設定ファイルのみが反映されるものでした。
異なるモジュールごとにこれら設定ファイルを用意して、サービスごとの定義をしても反映されないので注意してください。

以下の例ではmainqueueは作成されますが、subqueueは作成されません。

default/queue.yaml

queue:
- name: mainqueue
  mode: pull

moduleA/queue.yaml

queue:
- name: subqueue
  mode: pull

あくまでdefaultモジュールのフォルダに含まれる設定ファイルのみが有効になります。

異なるバージョンについて

次に異なるバージョンで、設定ファイルに異なる定義を行った場合についてです。

こちらは最後にデプロイしたdefaultモジュールの設定ファイルが反映されます。
過去にdefaultモジュールの設定ファイルで定義された設定については、無効になります。

最も最近にデプロイされた、defaultモジュールの設定ファイルに含まれないScheduleタスクは削除されます。
TaskQueueは定義に含まれないQueueはDisabledとなりますが、Queue自体は削除されません。

f:id:knightso:20140730110345p:plain

また、Developer Consoleからバージョンを切り替えても、過去の設定は無効です。
過去にdefaultモジュールの設定としてデプロイしてあったとしても、過去の設定がバージョン切り替えで再び有効になることはないので注意してください。

コマンド

開発サーバーで複数のモジュールを動作させるコマンドの例を次に示します。
モジュールごとの設定ファイルを並べる際に、必ずデフォルトモジュールのapp.yamlを先頭にするようにします。

goapp serve default/app.yaml moduleA/moduleA.yaml

参考:Uploading, Downloading, and Managing a Go App - Go — Google Developers

次に、設定ファイルだけを更新するコマンドの例を次に示します。

// taskqueue
appcfg.py update_queues myapp/

// schedule task
appcfg.py update_cron myapp/

モジュールは異なるランタイムでアプリ動作させられるので、別言語で1つのアプリを構築することもできる便利なものです。
ドキュメントには設定に関する詳細は載っていましたが、モジュールごとの設定ファイルの有無や、バージョンごとに異なる設定を行った場合などの情報が無かったため今回の内容を調べてみました。