我有一个简单的node.js应用程序,它试图将一些数据插入到BigQuery中。它使用提供的gcloud node.js库。尝试从容器引擎窗格中插入数据到BigQuery失败
的BigQuery的客户端这样的创建,根据documentation:
google.auth.getApplicationDefault(function(err, authClient) {
if (err) {
return cb(err);
}
let bq = BigQuery({
auth: authClient,
projectId: "my-project"
});
let dataset = bq.dataset("my-dataset");
let table = dataset.table("my-table");
});
有了,我尝试将数据插入到BiqQuery。
table.insert(someRows).then(...)
这会失败,因为BigQuery客户端返回403告诉我身份验证缺少所需的作用域。该文档告诉我使用以下代码片段:
if (authClient.createScopedRequired &&
authClient.createScopedRequired()) {
authClient = authClient.createScoped([
"https://www.googleapis.com/auth/bigquery",
"https://www.googleapis.com/auth/bigquery.insertdata",
"https://www.googleapis.com/auth/cloud-platform"
]);
}
这也不起作用,因为if语句从不执行。我跳过了if并且每次都设置了示波器,但错误依然存在。
我在这里错过了什么?无论authClient配置如何,范围总是错误的?有没有人找到一种方法来获得这个或类似的gcloud客户端库(如Datastore)在Container Engine pod上使用所描述的身份验证方案?
我目前发现的唯一工作解决方案是创建一个json密钥文件并将其提供给BigQuery客户端,但我宁愿随时创建凭据,然后将它们放在代码旁边。
备注:当在Compute Engine虚拟机上运行时,节点服务完美无缺地为BigQuery提供验证选项,因为Google会自动协商身份验证。
啊,我没有建立集群。看起来这是解决方案。谢啦! –