firebase-tools: Emulator errors with external HTTP calls when GOOGLE_APPLICATION_CREDENTIALS is not set.
Not sure how best to post this using your neat template, since it might not be a bug. Maybe I’m just misunderstanding something.
I’m doing a few HTTP POST/PUT on a test site (hosted on AWS) we have set up, and. We’re on Blaze so external network calls should be allowed. I’m getting the errors that can be seen in the log below when GOOGLE_APPLICATION_CREDENTIALS is not set.
Maybe related: https://github.com/firebase/firebase-functions/issues/561
[REQUIRED] Environment info
firebase-tools: 7.4.0
Platform: macOS
[REQUIRED] Test case
[REQUIRED] Steps to reproduce
[REQUIRED] Expected behavior
[REQUIRED] Actual behavior
Without the GOOGLE_APPLICATION_CREDENTIALS environment variable:
firebase emulators:start --only functions,firestore,database
i Starting emulators: ["functions","firestore","database"]
✔ functions: Using node@8 from host.
✔ functions: Emulator started at http://localhost:5001
i firestore: Serving WebChannel traffic on at http://localhost:8081
i firestore: Emulator logging to firestore-debug.log
✔ firestore: Emulator started at http://localhost:8080
i firestore: For testing set FIRESTORE_EMULATOR_HOST=localhost:8080
i database: Emulator logging to database-debug.log
✔ database: Emulator started at http://localhost:9000
i database: For testing set FIREBASE_DATABASE_EMULATOR_HOST=localhost:9000
i functions: Watching "/cloud-functions-v2" for Cloud Functions...
✔ functions[onCategoryCreate]: firestore function initialized.
✔ functions[onCategoryUpdate]: firestore function initialized.
✔ functions[onProductCreate]: firestore function initialized.
✔ functions[onProductUpdate]: firestore function initialized.
✔ functions[onUserWritten]: firestore function initialized.
✔ functions[v1]: http function initialized (http://localhost:5001/app/europe-west1/v1).
i functions[hourly]: function ignored because the pubsub.googleapis.com emulator does not exist or is not running.
i functions[onFirebaseUserDeleted]: function ignored because the firebaseauth.googleapis.com emulator does not exist or is not running.
✔ All emulators started, it is now safe to connect.
i functions: Beginning execution of "onCategoryCreate"
⚠ Unknown network resource requested!
- URL: "http://169.254.169.254/computeMetadata/v1/instance"
i functions: Beginning execution of "onProductCreate"
⚠ Unknown network resource requested!
- URL: "http://169.254.169.254/computeMetadata/v1/instance"
⚠ functions: FetchError: Unexpected error determining execution environment: request to http://169.254.169.254/computeMetadata/v1/instance failed, reason: connect EHOSTDOWN 169.254.169.254:80 - Local (192.168.0.100:51124)
at ClientRequest.<anonymous> (/cloud-functions-v2/node_modules/node-fetch/lib/index.js:1455:11)
at emitOne (events.js:116:13)
at ClientRequest.emit (events.js:211:7)
at Socket.socketErrorListener (_http_client.js:401:9)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at emitErrorNT (internal/streams/destroy.js:66:8)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
at Function.Module.runMain (module.js:696:11)
⚠ Your function was killed because it raised an unhandled error.
(node:72549) UnhandledPromiseRejectionWarning: Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.header (/usr/local/lib/node_modules/firebase-tools/node_modules/express/lib/response.js:771:10)
at ServerResponse.send (/usr/local/lib/node_modules/firebase-tools/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/usr/local/lib/node_modules/firebase-tools/node_modules/express/lib/response.js:267:15)
at Function.<anonymous> (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulator.js:88:24)
at Generator.next (<anonymous>)
at fulfilled (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulator.js:4:58)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
(node:72549) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:72549) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
i functions: Beginning execution of "onProductUpdate"
⚠ Unknown network resource requested!
- URL: "http://169.254.169.254/computeMetadata/v1/instance"
⚠ functions: Your function timed out after ~60s. To configure this timeout, see
https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
⚠ functions: Your function timed out after ~60s. To configure this timeout, see
https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
WITH GOOGLE_APPLICATION_CREDENTIALS set:
firebase emulators:start --only functions,firestore,database
i Starting emulators: ["functions","firestore","database"]
✔ functions: Using node@8 from host.
✔ functions: Emulator started at http://localhost:5001
i firestore: Serving WebChannel traffic on at http://localhost:8081
i firestore: Emulator logging to firestore-debug.log
✔ firestore: Emulator started at http://localhost:8080
i firestore: For testing set FIRESTORE_EMULATOR_HOST=localhost:8080
i database: Emulator logging to database-debug.log
✔ database: Emulator started at http://localhost:9000
i database: For testing set FIREBASE_DATABASE_EMULATOR_HOST=localhost:9000
i functions: Watching "/cloud-functions-v2" for Cloud Functions...
⚠ functions: Your GOOGLE_APPLICATION_CREDENTIALS environment variable points to /Users/my_user/.firebase-adminsdk-1kbpo-1febf42538.json. Non-emulated services will access production using these credentials. Be careful!
✔ functions[onCategoryCreate]: firestore function initialized.
✔ functions[onCategoryUpdate]: firestore function initialized.
✔ functions[onProductCreate]: firestore function initialized.
✔ functions[onProductUpdate]: firestore function initialized.
✔ functions[onUserWritten]: firestore function initialized.
✔ functions[v1]: http function initialized (http://localhost:5001/app/europe-west1/v1).
i functions[hourly]: function ignored because the pubsub.googleapis.com emulator does not exist or is not running.
i functions[onFirebaseUserDeleted]: function ignored because the firebaseauth.googleapis.com emulator does not exist or is not running.
✔ All emulators started, it is now safe to connect.
⚠ functions: Your GOOGLE_APPLICATION_CREDENTIALS environment variable points to /Users/my_user/.firebase-adminsdk-1kbpo-1febf42538.json. Non-emulated services will access production using these credentials. Be careful!
i functions: Beginning execution of "onCategoryCreate"
⚠ functions: Your GOOGLE_APPLICATION_CREDENTIALS environment variable points to /Users/my_user/.firebase-adminsdk-1kbpo-1febf42538.json. Non-emulated services will access production using these credentials. Be careful!
⚠ Google API requested!
- URL: "https://www.googleapis.com/oauth2/v4/token"
- Be careful, this may be a production service.
i functions: Beginning execution of "onProductCreate"
⚠ functions: Your GOOGLE_APPLICATION_CREDENTIALS environment variable points to /Users/my_user/.firebase-adminsdk-1kbpo-1febf42538.json. Non-emulated services will access production using these credentials. Be careful!
⚠ Google API requested!
- URL: "https://www.googleapis.com/oauth2/v4/token"
- Be careful, this may be a production service.
i functions: Beginning execution of "onProductUpdate"
⚠ functions: Your GOOGLE_APPLICATION_CREDENTIALS environment variable points to /Users/my_user/.firebase-adminsdk-1kbpo-1febf42538.json. Non-emulated services will access production using these credentials. Be careful!
⚠ Google API requested!
- URL: "https://www.googleapis.com/oauth2/v4/token"
- Be careful, this may be a production service.
⚠ functions: Your function timed out after ~60s. To configure this timeout, see
https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
⚠ functions: Your function timed out after ~60s. To configure this timeout, see
https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
⚠ functions: Your function timed out after ~60s. To configure this timeout, see
https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Reactions: 6
- Comments: 18 (9 by maintainers)
@larssn I am going to keep this open until I figure out why your local functions are trying to access their compute metadata. That’s scary to me because it’s step 1 of trying to affect production resources, which is bad.
@larssn ah ok thanks! The fact that
snapshot.refdoesn’t work well is a know issue and I have a fix coming. For now the workaround isadmin.firestore().doc(snapshot.ref.path).update({ hello: 'world' })@technoplato we actually have started to figure this out! A few things:
gcloud auth application default loginto get a good auth state on your machine.