Golang から「Cloud Datastore エミュレータ」に対して接続ができない
Cloud Datastore を試してみようと思って、Mac で開発環境を作っていたのですが些細なことでハマったので備忘録として記憶しておきます。
サンプル通りにエミュレータを起動して、サンプルコードを書いたけど datastore へ繋がらない状態だったんですが、datasotre のエミュレーター起動時にホスト名を指定(localhost)することで解決することができました。
基本はマニュアル(Cloud Datastore エミュレータの実行)にある通り実行してます。
環境
- macOS Catalina 10.15.1
- Google Cloud SDK 272.0.0
- app-engine-go
- beta 2019.05.17
- cloud-datastore-emulator 2.1.0
- core 2019.11.16
実行結果
ホスト指定前
% sudo gcloud beta emulators datastore start
WARNING: Reusing existing data in [/Users/xxxxxx/.config/gcloud/emulators/datastore].
Executing: /Applications/local/google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator start --host=::1 --port=8173 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown /Users/xxxxxx/.config/gcloud/emulators/datastore
[datastore] 12 04, 2019 3:07:43 午後 com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] 情報: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] 12 04, 2019 3:07:43 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
[datastore] 情報: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: /Users/xxxxxx/.config/gcloud/emulators/datastore/WEB-INF/appengine-generated/local_db.bin
[datastore] 12 04, 2019 3:07:44 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] 情報: Time to load datastore: 55 ms
[datastore] API endpoint: http://::1:8173
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=::1:8173
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/). Thank you!
% gcloud beta emulators datastore env-init
export DATASTORE_DATASET=xxxxx
export DATASTORE_EMULATOR_HOST=::1:8173
export DATASTORE_EMULATOR_HOST_PATH=::1:8173/datastore
export DATASTORE_HOST=http://::1:8173
export DATASTORE_PROJECT_ID= xxxxx
ホスト指定後
% sudo gcloud beta emulators datastore start --host-port localhost:8173
WARNING: Reusing existing data in [/Users/xxxxxx/.config/gcloud/emulators/datastore].
Executing: /Applications/local/google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator start --host=localhost --port=8173 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown /Users/xxxxxx/.config/gcloud/emulators/datastore
[datastore] 12 04, 2019 3:07:43 午後 com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] 情報: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] 12 04, 2019 3:11:34 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
[datastore] 情報: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: /Users/xxxxxx/.config/gcloud/emulators/datastore/WEB-INF/appengine-generated/local_db.bin
[datastore] 12 04, 2019 3:11:35 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] 情報: Time to load datastore: 55 ms
[datastore] API endpoint: http://localhost:8173
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=localhost:8173
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/). Thank you!
% gcloud beta emulators datastore env-init
export DATASTORE_DATASET=xxxxx
export DATASTORE_EMULATOR_HOST=localhost:8173
export DATASTORE_EMULATOR_HOST_PATH=localhost:8173/datastore
export DATASTORE_HOST=http://localhost:8173
export DATASTORE_PROJECT_ID= xxxxx
原因
ホスト指定前
% sudo gcloud beta emulators datastore start
WARNING: Reusing existing data in [/Users/xxxxxx/.config/gcloud/emulators/datastore].
Executing: /Applications/local/google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator start --host=::1 --port=8173 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown /Users/xxxxxx/.config/gcloud/emulators/datastore
[datastore] 12 04, 2019 3:07:43 午後 com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] 情報: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] 12 04, 2019 3:07:43 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
[datastore] 情報: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: /Users/xxxxxx/.config/gcloud/emulators/datastore/WEB-INF/appengine-generated/local_db.bin
[datastore] 12 04, 2019 3:07:44 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] 情報: Time to load datastore: 55 ms
[datastore] API endpoint: http://::1:8173
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=::1:8173
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/). Thank you!
% gcloud beta emulators datastore env-init
export DATASTORE_DATASET=xxxxx
export DATASTORE_EMULATOR_HOST=::1:8173
export DATASTORE_EMULATOR_HOST_PATH=::1:8173/datastore
export DATASTORE_HOST=http://::1:8173
export DATASTORE_PROJECT_ID= xxxxx
ホスト指定後
% sudo gcloud beta emulators datastore start --host-port localhost:8173
WARNING: Reusing existing data in [/Users/xxxxxx/.config/gcloud/emulators/datastore].
Executing: /Applications/local/google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator start --host=localhost --port=8173 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown /Users/xxxxxx/.config/gcloud/emulators/datastore
[datastore] 12 04, 2019 3:07:43 午後 com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] 情報: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] 12 04, 2019 3:11:34 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
[datastore] 情報: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: /Users/xxxxxx/.config/gcloud/emulators/datastore/WEB-INF/appengine-generated/local_db.bin
[datastore] 12 04, 2019 3:11:35 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] 情報: Time to load datastore: 55 ms
[datastore] API endpoint: http://localhost:8173
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=localhost:8173
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/). Thank you!
% gcloud beta emulators datastore env-init
export DATASTORE_DATASET=xxxxx
export DATASTORE_EMULATOR_HOST=localhost:8173
export DATASTORE_EMULATOR_HOST_PATH=localhost:8173/datastore
export DATASTORE_HOST=http://localhost:8173
export DATASTORE_PROJECT_ID= xxxxx
原因
一応、解決はしたのですが他の人も発生していないしもう少し調べてみました。
エミュレーターのマニュアルによると、--host-port
の初期値がlocalhost:8081
になっていました。
ゾンビプロセスが動いてた。。。
% lsof -i4TCP:8081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 33338 xxxx 45u IPv6 0xf139f401fffec995 0t0 TCP localhost:sunproxyadmin (LISTEN)
ゾンビプロセスを削除して、もう1回エミューレーターを起動してみたらちゃんとlocalhost
で起動されました。
% sudo gcloud beta emulators datastore start
WARNING: Reusing existing data in [/Users/xxxxxx/.config/gcloud/emulators/datastore].
Executing: /Applications/local/google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator start --host=localhost --port=8081 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown /Users/xxxxxx/.config/gcloud/emulators/datastore
[datastore] 12 04, 2019 3:19:20 午後 com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
[datastore] 情報: Provided --allow_remote_shutdown to start command which is no longer necessary.
[datastore] 12 04, 2019 3:19:20 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
[datastore] 情報: Local Datastore initialized:
[datastore] Type: High Replication
[datastore] Storage: /Users/xxxxxx/.config/gcloud/emulators/datastore/WEB-INF/appengine-generated/local_db.bin
[datastore] 12 04, 2019 3:19:20 午後 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
[datastore] 情報: Time to load datastore: 55 ms
[datastore] API endpoint: http://localhost:8081
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=localhost:8081
[datastore]
[datastore] Dev App Server is now running.
[datastore]
[datastore] The previous line was printed for backwards compatibility only.
[datastore] If your tests rely on it to confirm emulator startup,
[datastore] please migrate to the emulator health check endpoint (/). Thank you!
別プロセスで8081
ポートを既に開発環境で利用されてる方は--host-port
オプションを指定してお試しください。
Author And Source
この問題について(Golang から「Cloud Datastore エミュレータ」に対して接続ができない), 我々は、より多くの情報をここで見つけました https://qiita.com/ynozue/items/8be64d2ce812be2019a0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .