デプロイ時のアプリケーションIDの指定について

アプリケーションIDを、仮に、APP_ID とする。

app.yaml
application: APP_ID

で、これをローカル開発サーバで実行させると、アプリケーションIDは、

dev~APP_ID

となる。これはどこでわかるかというと、ローカル開発サーバの管理コンソール(http://localhost:管理用ポート番号/instances)を開くと表示されているもので、例えば、bulkloaderなんかで、ローカル開発サーバのアプリケーションIDを指定するときなどにも使用するものだ(参考:http://road2win.plala.jp/wordpress/?p=6427)。

で、このアプリケーションIDであるが、チュートリアルなどを見ていると、たいていの場合、サーバ側のプロジェクトIDと、app.yamlで指定する "application:"の値と、appcfg.pyなどで指定する -A オプションの値がすべて同じ、という例が多いため、区別がつきにくいのだが、-Aオプションの値はサーバ側のプロジェクトIDと同値を指定しなくてはいけないが、app.yamlには、それとは異なる値を設定することができる。

例えば自分の場合、1つのアプリケーションに対して、ステージング用サーバと本番サーバの2つを用意することが多いので、1つのソースコードを、2つのサーバ(プロジェクト)に向けてデプロイしている。
アプリケーションIDが "hogeapp" 、ステージング用のプロジェクトIDが "hogeapp_s"、本番用プロジェクトIDが "hogeapp_r" だとすると、

app.yaml
application: hogeapp
ステージングへのデプロイコマンド
appcfg.py -A hogeapp_s update ディレクトリ名 …
本番へのデプロイコマンド
appcfg.py -A hogeapp_r update ディレクトリ名…

とする。app.yaml をいちいち書き換える必要はない。

Googleアカウントとの関係

上記のデプロイコマンドの例では、Googleアカウントを指定していない(--emailオプションを指定してない)。その場合、gcloud auth list コマンドで"active"と表示されるアカウントでデプロイを実行しようとする。
このとき、hogeapp_s や、hogeapp_r に、そのアカウントに対する権限が設定されていないと、

Error 404: --- begin server output ---
This application does not exist (app_id=u'hogeapp_r').
--- end server output ---

というエラーが発生してデプロイに失敗する。
自分の場合、認証や権限等の機能のテストのため、2つ以上のGoogleアカウントを使い回して開発することが多い。gcloud auth コマンドで、アクティブアカウントを切り替えることができるが、この切り替えを失念したまま、--emailオプションもつけずにデプロイしてエラーが出て「スペルミスか?」と悩む、ということを何度か繰り返してしまった。
appcfg.py update の際は、常に --emailオプションを付けるクセをつけるべきだろう。