Backendsを使うと、フロントのインスタンスとは別の、バックエンドのインスタンスでプログラムを実行できます。定期的なランキングの作成などの重めの処理に使うと便利です。バックエンドは、タスクキューやcronの実行先ターゲットに、target引数でバックエンドを指定するだけで使うことができます。バックエンドの無料枠が9インスタンス時間もあるので、活用しないのは損です。また、バックエンドに処理を逃した分だけ、フロントの処理が空くので、サーバのレスポンスも改善すると思います。尚、バックエンドのドキュメントはまだ日本語化されていないので、Backends Python API Overviewを参照します。
まず、開発用サーバでBackendsを有効にするために、開発用サーバを--backendsオプションを付けて起動します。

次に、backends.yamlを作成します。バックエンドは同時に1つのリクエストしか処理できません。instancesを指定しないと、最大で20個までインスタンスが作成されて大変なことになるので、とりあえず1とかに設定しておいた方が無難です。
queue.yamlのTaskQueueの実行ターゲットをバックエンドに設定します。
cron.yamlでも同様に実行ターゲットをバックエンドに設定します。
後は、開発サーバでテストして、デプロイします。フロントとバックエンドは別管理されているようで、AppEngineLauncherからはデプロイできません。
コマンドラインから、以下のように入力してデプロイする必要があります。
デプロイし忘れが起こりそうなので、次のようなdeploy.shを作って、常にコマンドラインからフロントとバックエンドを同時にデプロイするようにした方が良さそうです。Uploading, Downloading, and Managing a Python Appにコマンドラインからのコマンド一覧があります。
バックエンドが動作しているかは、AppEngineのAdminConsoleで確認できます。

まず、開発用サーバでBackendsを有効にするために、開発用サーバを--backendsオプションを付けて起動します。

次に、backends.yamlを作成します。バックエンドは同時に1つのリクエストしか処理できません。instancesを指定しないと、最大で20個までインスタンスが作成されて大変なことになるので、とりあえず1とかに設定しておいた方が無難です。
backends:
- name: backend1
class: B1
instances: 1
options: dynamic
queue.yamlのTaskQueueの実行ターゲットをバックエンドに設定します。
queue:
- name: counter
target: backend1
rate: 1/s
cron.yamlでも同様に実行ターゲットをバックエンドに設定します。
cron:
- description: daily hoge
url: /hoge
schedule: every 6 hours
target: backend1
後は、開発サーバでテストして、デプロイします。フロントとバックエンドは別管理されているようで、AppEngineLauncherからはデプロイできません。
コマンドラインから、以下のように入力してデプロイする必要があります。
appcfg backends . update
デプロイし忘れが起こりそうなので、次のようなdeploy.shを作って、常にコマンドラインからフロントとバックエンドを同時にデプロイするようにした方が良さそうです。Uploading, Downloading, and Managing a Python Appにコマンドラインからのコマンド一覧があります。
appcfg.py update .
appcfg.py backends . update
バックエンドが動作しているかは、AppEngineのAdminConsoleで確認できます。

コメント