gcloud firestore emulatorに接続できない問題について
GAE/go + Cloud Firestoreで開発をしようと思いローカルでエミュレータを使ってみた。
エミュレータを使う流れは以下の通り。
- gcloud コマンドでエミュレータを起動
- FIRESTORE_EMULATOR_HOSTの値を設定
gcloud コマンドでエミュレータを起動
|
|
FIRESTORE_EMULATOR_HOSTの値を設定
エミュレータ起動じに表示されるFIRESTORE_EMULATOR_HOST の値を設定
|
|
ちゃんと接続できるか試してみた
そして試しにデータが登録・取得できるかを試してみた。
|
|
しかし、レスポンスが返ってこなかった。
どうやら iter.Next() の処理で止まっているみたいだった。
IPv4で接続してみる
--host-port オプションでIPv4を使った起動ができる
|
|
この場合はFIRESTORE_EMULATOR_HOST は以下のように設定する
|
|
これだと無事つながる
なぜIPv6だとつながらないのか?
調べたところローカルホストの指定の仕方が悪いみたい。
例えばブラウザでアクセスするときはhttp://[::1]:8000 のように[] を指定しなけければならない。
しかしFirestoreのエミュレータ起動した場合に表示されるのはexport FIRESTORE_EMULATOR_HOST=::1:8088 と出ている。
[]をつけて環境変数を設定してみた。
|
|
これで解決できた。
まとめ
- gcloudコマンドでFirestoreのエミュレータ使うときは環境変数
FIRESTORE_EMULATOR_HOST設定時に[]をつけてホストをしている - もしくは
--host-portでIPv4で起動して、環境変数FIRESTORE_EMULATOR_HOSTを設定する