Как указать хост: порт эмулятора функций без запуска эмулятора функций

#firebase #google-cloud-firestore

#firebase #google-облако-firestore

Вопрос:

Я пишу облачные функции в Go и запускаю их из эмулятора firestore. Это работает, если я вручную запускаю эмулятор firestore:

  java -jar ~/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.9.jar 
  --functions_emulator localhost:5001
  

Затем я запускаю свой собственный сервер на localhost: 5001 для обработки запускаемых функций, и, похоже, все работает.

Тем не менее, я хотел бы запустить эмулятор firestore обычным способом, чтобы получить приятный веб-интерфейс и т. Д. Мой файл firebase.json выглядит следующим образом:

 {
  "emulators": {
    "firestore": {
      "port": 8080
    },
    "functions": {
      "port": 5001
    },
    "pubsub": {
      "port": 8085
    },
    "ui": {
      "enabled": true
    },
    "hosting": {
      "port": 5000
    },
    "auth": {
      "port": 9099
    }
  },
  "ui": {
    "enabled": true,
    "host": "localhost",
    "port": 4000
  },
  "functions": {
    "port": "5001",
    "predeploy": [
      "npm --prefix "$RESOURCE_DIR" run lint",
      "npm --prefix "$RESOURCE_DIR" run build"
    ],
    "source": "functions"
  },
  "pubsub": {
    "port": "8085"
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "hosting": {
    "public": "build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

  

Я запускаю эмуляторы с помощью

 firebase emulators:start --only firestore
  

Затем я настроил триггер в firestore, используя следующую команду:

 #!/bin/zsh

TRIGGER='http://localhost:8080/emulator/v1/projects/fugalist/triggers/Requests'

curl --location --request PUT ${TRIGGER} 
    --header 'Content-Type: application/json' 
    --data-raw '{
        "eventTrigger": {
          "resource": "projects/fugalist/databases/(default)/documents/Requests/{doc}",
          "eventType": "providers/cloud.firestore/eventTypes/document.create",
          "service": "firestore.googleapis.com"
      }
    }'
  

Наконец, я вручную создаю документ в разделе /Requests . Firestore-отладка.журнал теперь содержит:

 [debug] [2020-11-10T21:09:20.187Z] ----------------------------------------------------------------------
[debug] [2020-11-10T21:09:20.189Z] Command:       /usr/local/Cellar/node/12.4.0/bin/node /Users/michaelcoffin/node_modules_global/bin/firebase emulators:start --only firestore
[debug] [2020-11-10T21:09:20.189Z] CLI Version:   8.15.0
[debug] [2020-11-10T21:09:20.189Z] Platform:      darwin
[debug] [2020-11-10T21:09:20.189Z] Node Version:  v12.4.0
[debug] [2020-11-10T21:09:20.190Z] Time:          Tue Nov 10 2020 13:09:20 GMT-0800 (Pacific Standard Time)
[debug] [2020-11-10T21:09:20.190Z] ----------------------------------------------------------------------
[debug] [2020-11-10T21:09:20.190Z] 
[debug] [2020-11-10T21:09:20.197Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[debug] [2020-11-10T21:09:20.197Z] > authorizing via signed-in user
[info] i  emulators: Starting emulators: firestore {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: firestore"}}
[debug] [2020-11-10T21:09:20.210Z] [hub] writing locator at /var/folders/xy/m2rx3tw14mnfvryxx2jvhyjh0000gn/T/hub-fugalist.json
[debug] [2020-11-10T21:09:20.229Z] Ignoring unsupported arg: projectId {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: projectId"}}
[debug] [2020-11-10T21:09:20.229Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: auto_download"}}
[debug] [2020-11-10T21:09:20.229Z] Starting Firestore Emulator with command {"binary":"java","args":["-Duser.language=en","-jar","/Users/michaelcoffin/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.9.jar","--host","localhost","--port",8080,"--rules","/Users/michaelcoffin/expmap/fe/firestore.rules"],"optionalArgs":["port","webchannel_port","host","rules","functions_emulator","seed_from_export"],"joinArgs":false} {"metadata":{"emulator":{"name":"firestore"},"message":"Starting Firestore Emulator with command {"binary":"java","args":["-Duser.language=en","-jar","/Users/michaelcoffin/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.9.jar","--host","localhost","--port",8080,"--rules","/Users/michaelcoffin/expmap/fe/firestore.rules"],"optionalArgs":["port","webchannel_port","host","rules","functions_emulator","seed_from_export"],"joinArgs":false}"}}
[info] i  firestore: Firestore Emulator logging to firestore-debug.log {"metadata":{"emulator":{"name":"firestore"},"message":"Firestore Emulator logging to u001b[1mfirestore-debug.logu001b[22m"}}
[debug] [2020-11-10T21:09:21.040Z] API endpoint: http:// {"metadata":{"emulator":{"name":"firestore"},"message":"API endpoint: http://"}}
[debug] [2020-11-10T21:09:21.040Z] localhost:8080
If you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:

   export FIRESTORE_EMULATOR_HOST=localhost:8080

Dev App Server is now running.

 {"metadata":{"emulator":{"name":"firestore"},"message":"localhost:8080nIf you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:nn   export FIRESTORE_EMULATOR_HOST=localhost:8080nnDev App Server is now running.nn"}}
[warn] ⚠  ui: Emulator UI unable to start on port 4000, starting on 4003 instead. {"metadata":{"emulator":{"name":"ui"},"message":"Emulator UI unable to start on port 4000, starting on 4003 instead."}}
[debug] [2020-11-10T21:09:21.275Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"ui"},"message":"Ignoring unsupported arg: auto_download"}}
[debug] [2020-11-10T21:09:21.275Z] Ignoring unsupported arg: port {"metadata":{"emulator":{"name":"ui"},"message":"Ignoring unsupported arg: port"}}
[debug] [2020-11-10T21:09:21.275Z] Starting Emulator UI with command {"binary":"node","args":["/Users/michaelcoffin/.cache/firebase/emulators/ui-v1.2.2/server.bundle.js"],"optionalArgs":[],"joinArgs":false} {"metadata":{"emulator":{"name":"ui"},"message":"Starting Emulator UI with command {"binary":"node","args":["/Users/michaelcoffin/.cache/firebase/emulators/ui-v1.2.2/server.bundle.js"],"optionalArgs":[],"joinArgs":false}"}}
[info] i  ui: Emulator UI logging to ui-debug.log {"metadata":{"emulator":{"name":"ui"},"message":"Emulator UI logging to u001b[1mui-debug.logu001b[22m"}}
[debug] [2020-11-10T21:09:21.369Z] Web / API server started at http://localhost:4003
 {"metadata":{"emulator":{"name":"ui"},"message":"Web / API server started at http://localhost:4003n"}}
[info] 
┌───────────────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! View status and logs at http://localhost:4003 │
└───────────────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬─────────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI             │
├───────────┼────────────────┼─────────────────────────────────┤
│ Firestore │ localhost:8080 │ http://localhost:4003/firestore │
└───────────┴────────────────┴─────────────────────────────────┘
  Other reserved ports: 4400, 4500

Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.
 
[debug] [2020-11-10T21:09:24.814Z] Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.nNov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:24.814Z] Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:24.944Z] Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:24 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:25.386Z] Nov 10, 2020 1:09:25 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:25 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:32.373Z] Nov 10, 2020 1:09:32 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:32 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:40.867Z] Nov 10, 2020 1:09:40 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:40 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:41.511Z] Nov 10, 2020 1:09:41 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:41 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:09:41.521Z] Nov 10, 2020 1:09:41 PM com.google.cloud.datastore.emulator.impl.context.EmulatorAuthorization warnAboutSecuredJwt
WARNING: expected an unsecured JWT, the emulator does not validate JWTs and IS NOT SECURE
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:41 PM com.google.cloud.datastore.emulator.impl.context.EmulatorAuthorization warnAboutSecuredJwtnWARNING: expected an unsecured JWT, the emulator does not validate JWTs and IS NOT SECUREn"}}
[debug] [2020-11-10T21:09:41.629Z] Nov 10, 2020 1:09:41 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:09:41 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:10:21.137Z] Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:10:21.165Z] Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:10:21.179Z] Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:10:21.225Z] Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:10:21 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelReadnINFO: Detected non-HTTP/2 connection.n"}}
[debug] [2020-11-10T21:10:21.239Z] Nov 10, 2020 1:10:21 PM com.google.cloud.datastore.emulator.impl.events.EventLogger publishEvent
WARNING: Failed to publish event for trigger projects/fugalist/triggers/Requests because Functions Emulator host/port is not configured.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:10:21 PM com.google.cloud.datastore.emulator.impl.events.EventLogger publishEventnWARNING: Failed to publish event for trigger projects/fugalist/triggers/Requests because Functions Emulator host/port is not configured.n"}}

  

Соответствующая часть этого, которая появляется сразу после того, как я вручную создаю документ, является последней записью:

 WARNING: Failed to publish event for trigger projects/fugalist/triggers/Requests because Functions Emulator host/port is not configured.
 {"metadata":{"emulator":{"name":"firestore"},"message":"Nov 10, 2020 1:10:21 PM com.google.cloud.datastore.emulator.impl.events.EventLogger publishEventnWARNING: Failed to publish event for trigger projects/fugalist/triggers/Requests because Functions Emulator host/port is not configured.n"}}
  

Действительно, ps показывает, что флаг —functions_emulator не используется при вызове эмулятора firestore:

 michaelcoffin    98802   0.0  1.6 16006468 536636   ??  Ss    1:09PM   0:06.19 /usr/bin/java -Duser.language=en -jar /Users/michaelcoffin/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.9.jar --host localhost --port 8080 --rules /Users/michaelcoffin/expmap/fe/firestore.rules
  

И, по сути, он используется, если вы запрашиваете эмулятор функций:

 firebase emulators:start --only firestore,functions

ps output:
99072   0.0  1.2 15892768 391240   ??  Ss    1:41PM   0:04.17 /usr/bin/java -Duser.language=en -jar /Users/michaelcoffin/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.9.jar --host localhost --port 8080 --rules /Users/michaelcoffin/expmap/fe/firestore.rules --functions_emulator localhost:5001
  

Я понимаю, что это не совсем ошибка, поскольку пакет эмуляторов официально не поддерживает облачные функции Google, написанные на Go. Однако набор эмуляторов действительно отлично работает с Go, если я запускаю эмулятор firestore вручную с флагом —functions_emulator . Итак, я пытаюсь найти обходной путь, чтобы флаг —functions_emulator использовался, даже если эмулятор функций не запущен.

Ответ №1:

Интерфейс командной строки Firebase не предлагает флаг для установки хоста и порта с помощью firebase emulators:start команды. Тем не менее, вы можете управлять настройками портов всех эмуляторов внутри firebase.json файла. В нем вы должны увидеть конфигурацию ниже, где вы можете заменить значение порта:

 "emulators": {
    "firestore": {
      "port": 8500
    },
    "ui": {
      "enabled": true,
      "port": 4040
    }
}
  

Что касается хоста, по умолчанию для него установлено значение localhost, поэтому это не должно быть проблемой.

Комментарии:

1. Я установил порт в firebase.json, но emulators:start, похоже, не передает его в эмулятор firestore, я думаю, потому что я не просил его запускать эмулятор функций. В firestore-debug.log я вижу «ПРЕДУПРЕЖДЕНИЕ: не удалось опубликовать событие для триггерных проектов / fugalist / триггеров / запросов, поскольку хост / порт эмулятора функций не настроен».

2. @MichaelCoffin Не могли бы вы отредактировать вопрос, чтобы отразить наблюдаемое поведение? Я хотел бы знать, какие команды вы выполняли, файл конфигурации и выходные данные эмулятора для дальнейшего изучения (удалите идентифицируемую информацию, например, идентификаторы проекта и тому подобное, если таковые имеются). Кроме того, вы работаете в Linux / Unix?

3. Хорошо, я подробно описал это. Однако теперь я почти уверен, что в настоящее время это не поддерживается, поэтому я отправил запрос функции. Я работаю на macOS.

4. @MichaelCoffin Есть новости о вашем запросе функций? Я сталкиваюсь с той же проблемой

5. Я ничего не слышал, но я был занят другими делами, поэтому, возможно, я что-то пропустил.