【发布时间】:2017-04-21 07:25:06
【问题描述】:
我有一个简单的 node.js 应用程序,它尝试将一些数据插入 BigQuery。它使用提供的 gcloud node.js 库。
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 告诉我身份验证缺少所需的范围。文档告诉我使用以下 sn-p:
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 VM 上运行时,节点服务在不向 BigQuery 提供身份验证选项的情况下完美运行,因为身份验证是由 Google 自动协商的。
【问题讨论】:
标签: node.js google-bigquery gcloud google-kubernetes-engine google-authentication