今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

App Engine のデプロイができなくなったときの解決方法

数日前の話。Google App Engine にGAEアプリをデプロイしたんだけど、90%くらいのところでリトライばかりしてて全然進まなくなった。
しばらく放置したけど状況が変わらないので、スクリプトを中止して、最初からデプロイをやり直してみた。

すると、「409 Conflict」ってエラーが出てスクリプトが中断されてデプロイできなくなってしまった。何度か試したり、時間を置いて試したりしたけど、状況はまったく変わらないまま。

「409 Conflict」でぐぐってみたら、やはり同じトラブルにあってる人が多いみたい。デプロイできなくなった状態を解消するには、rollback を使えばいいらしい。

appcfg.sh [options] rollback

指定したアプリケーションで部分的に完了した更新を元に戻します。更新が中断され、ロックされているためにアプリケーションを更新できないことがコマンドで報告されている場合に使用できます。

 いつもデプロイに使ってる appcfg.sh スクリプトの引数を変えれば、いろんなことができることがわかった。

App Engine Java SDK には、App Engine とやり取りするためのコマンドが用意されています。このコマンドを使用して、アプリケーションの新しいバージョンのコード、設定ファイル、静的ファイルを App Engine にアップロードできます。また、データストア インデックスの管理やログのダウンロードにもこのコマンドを使用できます。
Java アプリケーションのアップロードと管理 - Google App Engine — Google Developers

 いままでは、cron.xml/queue.xml/datastore-indexes.xml を変更しただけの時も、アプリ全体のデプロイをやり直してたけど、冗長な処理だった。それぞれの設定ファイルだけを個別にアップロードできるようになってた。

$ appcfg.sh update_indexes war
$ appcfg.sh update_queues war
$ appcfg.sh update_cron war

 作業は短時間で済むし、Google先生の負荷も減らせるし、一石二鳥!