デプロイ時のアプリケーション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オプションを付けるクセをつけるべきだろう。