How to change a environmental variable (functions.config()) of a firebase function, without redeploying the function from the cli

Viewed 2785

I'm trying to use a functions.config() variable of the firebase functions environment, to be able to switch logs on/off depending on, whether this variable is set to true/false. I have already created it, but it seems based on info from the following link (https://firebase.google.com/docs/functions/config-env#additional_environment_commands), that you can change it only if you redeploy the function, after you have used the firebase functions:config:set command to change the environmental variable first.

It appears that it could be achieved though, by using gcloud functions commands for deploying the function (gcloud deploy and not firebase deploy), with the --set-env-vars command (and different syntax to access the env. variable). Then this environmental variable can be changed easily by just changing value of the variable by navigating to the specific function at GCP console, and then by going to EDIT -> MORE and changing Environment variables at the bottom. source:
https://cloud.google.com/functions/docs/env-var

So my question is the following: Is there a similar way to change a firebase functions.config() variable without redeploying the function from the cli?

3 Answers

Update: (credit to Doug Stevenson) Apparantly the only way to change the environment variable is to do a deploy.

Original answer: You can do it the same way. Basically every Firebase Cloud Function is a Google Cloud Function and can be accessed the same way from the GCP console. Every Firebase Cloud Function is also present in the GCP console, and there you can easily just edit the environment variables just as you described in your question)

Andrii is totally right - you have to deploy your functions in order to update the environmental variables.

However, I just wanted to post a quick hack in case you have some CI/CD jobs and you don't really deploy your functions manually.

In this case, what I do, although a bit tedious, is the following:

  1. Add a mock function of some sort, e.g.
exports.helloWorld = functions
  .https.onRequest((req, res) => res.status(200).json({ message: 'Great success!' }))
  1. I run firebase deploy --only functions:helloWorld to make sure I only deploy this function to prevent breaking the functions that are currently used in production.
  2. Go to Firebase Console, open up your project's Functions section and delete helloWorld.

Just to add to Andrii's answer you need to redeploy any function that requires the new config. Each deployed function is isolated from all other functions so won't get config updates without a redeploy.

Related