我正在构建一个接受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云端控制台中找到配置文件,并考虑将其设置为全局环境变量,但我甚至无法在该控制台中找到它。
有什么想法吗?
答案 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);
});
};