LoginSignup
20
14

More than 5 years have passed since last update.

GAE/Goで本番のDatastoreをローカル環境に持ってくる 2016

Last updated at Posted at 2016-08-28

ちょろっと書いたGAE/Goアプリで、チェック等のために本番環境のDatastoreをローカルにコピって来たい時がある。探すとbulkloaderなどの情報がちらほらと手に入るのだが、どうも古いし断片的。ということで、2016年版をまとめてみた。

前提

  • GAE/Go環境でアプリが動かせていること

準備

準備はここに書いてある:https://cloud.google.com/appengine/docs/go/tools/remoteapi/

app.yamlでremote_apiを有効にする

- url: /_ah/remote_api
  script: _go_app

アプリケーション側でremote_apiをハンドリングする

と言ってもパッケージをインポートするだけ

import _ "google.golang.org/appengine/remote_api"

デプロイする

goapp deploy

データのダウンロード

appcfg.pyでdownload_dataを使う。

appcfg.py download_data --application="app-id" --url="https://app-id.appspot.com/_ah/remote_api" --filename=dump.datastore

ローカル環境へのアップロード

ローカル環境を起動しておく

goapp serve

ちなみに今のローカルdatastoreの中を消すには-clear_datastoreオプションをつけよう。

INFO     2016-08-28 08:56:42,616 devappserver2.py:769] Skipping SDK update check.
INFO     2016-08-28 08:56:42,661 api_server.py:205] Starting API server at: http://localhost:64056
INFO     2016-08-28 08:56:42,665 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO     2016-08-28 08:56:42,669 admin_server.py:116] Starting admin server at: http://localhost:8000

別ターミナルでupload_dataする

ローカルサーバ起動時のログで、APIサーバが何かしらのポート番号で起動しているはず(Starting API server at: http://localhost:64056)。これを使うと良いらしい。また、指定するアプリケーション名が "dev~*" になっていることにも注意する。

appcfg.py upload_data --application="dev~app-id" --url="http://localhost:64056" --filename=dump.datastore

無事アップロードできました!

access_token is expired. と言われはじめたら

これはローカル環境に持ってくる時だけの話ではないのだけれど、アクセストークンの期限切れを指摘される時がある。再取得したいのだが、いまいち正式なやり方がわからない。トークンはホームディレクトリ下に隠しファイルで存在しているので、 rm ~/.appcfg_oauth2_tokens してから実行するとトークンが新しくなる。

20
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14