我有一個簡單的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會自動協商身份驗證。
啊,我沒有建立集羣。看起來這是解決方案。謝啦! –