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 中找到配置文件,并考虑将其设置为全局环境变量,但我什至无法在该控制台中找到它。
有任何想法吗?
编辑 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)
| 归档时间: |
|
| 查看次数: |
2556 次 |
| 最近记录: |