在 Google Cloud Function 中设置环境变量

Nik*_*tah 0 node.js google-bigquery google-cloud-functions

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

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

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

GOOGLE_APPLICATION_CREDENTIALS=path/to/credentials.json DEBUG=* bin/www
Run Code Online (Sandbox Code Playgroud)

在服务器启动时进行查询,如下所示会产生超时:

DEBUG=* bin/www
Run Code Online (Sandbox Code Playgroud)

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

"envs": "0.1.6",
"dotenv": "5.0.1"
Run Code Online (Sandbox Code Playgroud)

并将它们设置为:

var envs = require('envs');
app.set('environment', envs('GOOGLE_APPLICATION_CREDENTIALS', 'path/to/credentials.json')); 
Run Code Online (Sandbox Code Playgroud)

require('dotenv').config()
Run Code Online (Sandbox Code Playgroud)

可惜...

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

有任何想法吗?

Sas*_*any 5

编辑 08/14/2018

没有设置环境变量的选项,但现在可以在 beta 模式下使用。只需在部署时使用下一个命令:

cloud beta functions deploy YOUR_FUNCTION_NAME --set-env-vars VAR1=foo,VAR2=bar FLAGS
Run Code Online (Sandbox Code Playgroud)

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

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

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

不幸的是,与 AWS Lambda SCF 不同,SCF 不支持设置环境变量,至少以某种明显的方式是这样。

但在你的情况下,你实际上不需要那个。您需要在本地环境中使用 GOOGLE_APPLICATION_CREDENTIALS 进行测试,但在谷歌云功能上,如果您使用的是 BigQuery npm,只需设置项目 ID 就足够了

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);
      });
};
Run Code Online (Sandbox Code Playgroud)