Google App EngineのDataStoreに格納しているデータをローカル環境で利用する
=== 追記 2019/3/9 ===
2019年のやりかたで書き直しました。
本番のCloud Datastoreのデータを、ローカル環境にインポートする - Qiita
=== 追記終わり ===
試験データを作成するのが面倒だったので、ダンプしてローカルで利用しようと思い、
ググったら出てきたので、メモ。
(下記、appname=my-android-server です。)
基本的には、
http://kopipeprogrammer.blogspot.jp/2011/02/google-app-engine-bulk-loader.html
を参考に、
https://developers.google.com/appengine/docs/python/tools/uploadingdata?hl=ja
を参照しました。
実際に欲しかったのは、全てのデータだったので、
- builtins ディレクティブを使用した remote_api のインストール
- 全データのダウンロードとアップロード
を行ったのですが、
google.appengine.api.datastore_errors.BadRequestError: app s~my-android-server cannot access app my-android-server's data
と、エラーになってしまいました。
記号がある場合に変になるのかと思い、applicationパラメータの指定バッククォートで囲み、
appcfg.py download_data --application=`my-android-server` --url=http://my-android-server.appspot.com/_ah/remote_api --filename=./dump.datastore
に変更したところ、正常に動作しました。
ハイフンなどの記号がある場合、バッククォートで囲めばなんとかなるっぽいです。
取得したデータ量と、かかった秒数的には下記の通り。
16962 entities (4560394 bytes) transferred in 871.2 seconds
ちなみに、Datastore Read Operations は40%まで上がりました(通常は数%)
次に、起動時の"--datastore_path"パラメータに、dump.datastoreを指定したのですが、
ERROR 2013-02-12 14:08:51,099 dev_appserver_main.py:691] <class 'google.appengine.runtime.apiproxy_errors.ApplicationError'>: ApplicationError: 3 Could not read data from /Users/ishikuranoboru/workspace/python/kyouen-python/src/kyouen.datastore. Try running with the --clear_datastore flag. Cause: ValueError('insecure string pickle',)
というエラーとなってしまいました。
エラーメッセージなどでググると、
https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/H7hYxKHvmC0
が見つかり、
appcfg.py upload_data --url=http://localhost:8080/_ah/remote_api --application=`dev~my-android-server` --filename=dump.datastore --num_threads=5
を実行したところ、インポートが始まりました。("--application"に、"dev~"+
投入にも同じぐらいの秒数がかかりました。
16962 entities (4211170 bytes) transferred in 848.2 seconds
実際の画面やSDK Consoleを確認すると、本番のデータが表示されました。
高負荷かつ長時間かかるため、頻繁には使えないと思いますが、本番である程度データが溜まった場合は、これを利用してローカルにテストデータを投入出来そうです。