在Google Cloud Function中设置环境变量

时间:2018-05-28 10:27:00

标签: node.js google-bigquery google-cloud-functions

我正在构建一个接受POST请求的小node.js应用程序,并将数据上传到Google BigQuery。

BigQuery需要设置GOOGLE_APPLICATION_CREDENTIALS,否则BigQuery会超时。如下所述:https://cloud.google.com/docs/authentication/production

例如,在服务器启动时进行查询,如下所示:

GOOGLE_APPLICATION_CREDENTIALS=path/to/credentials.json DEBUG=* bin/www

在服务器启动时进行查询,因为以下操作会产生超时:

DEBUG=* bin/www

我尝试了以下npm包在脚本中设置环境变量:

"envs": "0.1.6",
"dotenv": "5.0.1"

并将它们设置为:

var envs = require('envs');
app.set('environment', envs('GOOGLE_APPLICATION_CREDENTIALS', 'path/to/credentials.json')); 

require('dotenv').config()

但是唉...

Google Cloud功能不允许我指定任何环境变量,脚本部署逻辑都在幕后。我已经尝试在Google云端控制台中找到配置文件,并考虑将其设置为全局环境变量,但我甚至无法在该控制台中找到它。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

编辑08/14/2018

没有设置环境变量的选项,但它现在处于测试模式。只需在deploy上使用下一个命令:

cloud beta functions deploy YOUR_FUNCTION_NAME --set-env-vars VAR1=foo,VAR2=bar FLAGS

编辑11/22/2018 (根据Martin Omander的建议)

如果对您有意义,您还可以从node.js代码中设置它们:     process.env.MY_VARIABLE =" it_works"

旧答案(解决与env变量无关的实际问题)

不幸的是,与AWS Lambda不同,SCF不支持设置环境变量,至少在一些显而易见的方面。

但在你的情况下,你实际上并不需要那样做。您需要在本地环境中进行GOOGLE_APPLICATION_CREDENTIALS进行测试,但在Google云端功能上,只需设置项目ID即可,以防您使用BigQuery npm

const BigQuery = require('@google-cloud/bigquery');

const projectId = 'project-id';

exports.testBigQuery = (req, res) => {

   const bigquery = new BigQuery({
       projectId: projectId,
   });


   bigquery
      .createDataset('test_set')
      .then(results => {
          const dataset = results[0];
          res.send(dataset.id);
      })
      .catch(err => {
          console.error('ERROR:', err);
      });
};