2013年5月6日月曜日

appspotからオレオレサービスを撤収して、留守番サーバで強引に動かす

誰にも言ってない、オレオレサービスを幾つかappspot.comで(要するにapp engineで)動かしてます。昔はdyndns.orgを使ってたのですが、有料化と同時に辞めちゃってたんですよね。

久しぶりに検索したら、手頃な無料dyndnsサービスを1件見つけたので(いやフツーに検索すればあります)これでいいんじゃね?と。

まずappspot.comに溜まってるデータを引き上げる。


フツーにオフィシャルツールで出来ます。remote_apiとbulkloaderです。コイツはちょっとコツが必要で、(python SDKであれば) データベースmodel定義を、yamlで書き直す必要があります。と言っても、例によってgoogleのやることなので、途中まではやってくれます。appcfg.py create_bulkloader_config

しかして、bulkloader.yamlを書き換えます。所々未完成の項目が残ってるので、ソコを埋めるわけです。データの出力形式もココで指定します。

appcfg.py download_data でデータを吸い出します。

気の短い人はコレでどうにか進みます。
https://gist.github.com/kamawanu/391431/raw/a9f28ff67af1ff50176c974091de01c1e71525d4/bulk-dump.sh

dev_appserver.pyを留守番サーバで強引に動かす。


python SDKには、テスト用サーバが付属してるので、セキュリティ面に拘らなければ(故にどうでもいいオレオレサービス向け)これをこのまま、外から見られるようにしちゃえばいいわけです。

開発に使ってる分には、手で起動すればいいわけですが、appspotと同じ使い勝手を求めるなら、自動起動してもらわないと困ります。結論からいうと、各種ディレクトリ指定して、カレントディレクトリに絞って動かしたほうがいいらしい。

テストサーバ兼用の起動スクリプト
https://gist.github.com/kamawanu/391431/raw/05685ebbdddbb4c652e0f2dbb3827fe00e843fbd/DEV27

データ群を、留守番サーバに捻じ込む


これちょっとハマりました。appspotと同じく、remote_apiが使えますが、そのままではなんと認証が通りません。これに対する文献もほとんど見当たらないのです。

https://developers.google.com/appengine/docs/python/tools/appengineconfig?hl=ja#Configurable_App_Engine_Modules
下の方に、class ConfigDefaults とか書いてあります。

結局ソースを追いかけざるをえないわけですが
https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/remote_api/handler.py#105
こんな感じの記述を
https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/remote_api/handler.py#114
ここに書けば良いのですが、どういう意味か?
https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/remote_api/handler.py#317

特定の環境変数がマッチしたら、認証が通ったことにしてしまえ。ということらしい。大雑把ですね。見本では、USER_IDという文字列がありますが、これは認証IDのことじゃなくて、dev_appserver.pyの起動権限のことらしい。イケネ、env - で起動しちゃってたよ。

大体手段として、他の環境変数を使うことにしました。面倒だからAPP_IDでイイか。環境変数名は、python SDK の Interactive Console の表示を参考にします。





ようやくアップロードできます。
https://gist.github.com/kamawanu/391431/raw/9118b8f9d26adf5bd108071e89529bd24c1b1c43/local-restore.sh