大查询 - 来自部署在 GKE 中的 nodejs 应用程序的 Util.parseHttpRespBody 凭据无效
Posted
技术标签:
【中文标题】大查询 - 来自部署在 GKE 中的 nodejs 应用程序的 Util.parseHttpRespBody 凭据无效【英文标题】:Big Query - Invalid credential at Util.parseHttpRespBody from nodejs application deployed in GKE 【发布时间】:2019-04-29 15:21:12 【问题描述】:我有一个 node js 应用程序,它公开了可通过云端点访问的其余端点。在触发端点 url 时,节点 js 执行大查询并返回结果。一切正常,我将它部署在计算引擎中。由于我使用的是可以使用大查询数据集的同一个服务帐户,所以我没有添加“service-account-key.json”文件。仅明确提及将执行查询的数据集的位置,即“EU”。
但是在 GKE 中部署之后,我遇到了以下错误,仅针对那些访问 Big Query 的端点。错误是:
我在尝试之前启用了大查询 API,因为我已经提到它在容器化之前从计算引擎作为示例开发平台工作。
ERROR: ApiError: Invalid credential at Util.parseHttpRespBody (/app/node_modules/@google-cloud/common/build/src/util.js:190:38) at Util.handleResp (/app/node_modules/@google-cloud/common/build/src/util.js:134:117) at /app/node_modules/@google-cloud/common/build/src/util.js:422:22 at onResponse (/app/node_modules/retry-request/index.js:200:7) at /app/node_modules/teeny-request/build/src/index.js:222:13 at processTicksAndRejections (internal/process/task_queues.js:88:5)
栈驱动的下一行:
severity: "ERROR"
textPayload: " domain: 'global',
和
locationType: 'other',
感谢您的宝贵反馈。
问候, 阿林丹
【问题讨论】:
【参考方案1】:由于我使用的是相同的服务帐户,其中有大查询数据集可用,所以我没有添加“service-account-key.json”文件。
您的问题是您必须提供服务帐户文件密钥 下面找到一个工作的 node.js Mocha 测试示例,它访问 BigQuery 并执行选择。
if (!global._babelPolyfill)
var a = require("babel-polyfill")
import BigQuery from '@google-cloud/bigquery'
describe('Check google-cloud', async () =>
it('Test query', async () =>
let result = await test('panada')
)
async function test(p1)
try
const bigquery = new BigQuery(
projectId: `mydata`,
keyFilename: 'mydata-1470162410749-9473b308ab0e.json'
)
let query = [
'SELECT url',
'FROM `publicdata.samples.github_nested`',
'WHERE repository.owner = @owner'
].join(' ')
console.log(`query is: $query`)
let [result] = await bigquery.query(
query,
params:
owner: p1
)
result.forEach((row, index) =>
console.log(`row number $index, url is: $row.url`)
)
catch (err)
console.log("err", err)
)
这段代码的输出是:
row number 0, url is: https://github.com/panada/samples/compare/46934664ea...a7cae9f088
row number 1, url is: https://github.com/panada/Panada/compare/47a1801f13...9dedbc8ce6
row number 2, url is: https://github.com/panada/samples/compare/a7cae9f088...256c9b4ed3
row number 3, url is: https://github.com/panada/Panada/pull/36
row number 4, url is: https://github.com/de3/Panada
row number 5, url is: https://github.com/schbern/samples
row number 6, url is: https://github.com/panada/Panada/compare/175c88e2cb...47a1801f13
row number 7, url is: https://github.com/panada/samples/compare/256c9b4ed3...1f293ca245
row number 8, url is: https://github.com/panada/documentation/compare/49c38b23e2...d948d2eb97
row number 9, url is: https://github.com/panada/Panada/pull/38
row number 10, url is: https://github.com/panada/samples/compare/1a35a44548...46934664ea
row number 11, url is: https://github.com/de3/documentation
row number 12, url is: https://github.com/cakyus/Panada
row number 13, url is: https://github.com/panada/documentation/compare/46b7bcde5f...52e9ef5c67
row number 14, url is: https://github.com/panada/documentation/issues/1#issuecomment-4533276
row number 15, url is: https://github.com/panada/documentation/compare/d948d2eb97...46b7bcde5f
row number 16, url is: https://github.com/panada/Panada/compare/9dedbc8ce6...4db3e50d80
row number 17, url is: https://github.com/panada/Panada/pull/38
row number 18, url is: https://github.com/panada/documentation/pull/1
row number 19, url is: https://github.com/panada/documentation/pull/1
【讨论】:
嗨,塔米尔,非常感谢。在这种情况下,我的 docker 映像会从 DEV 到 QA 到 PROD 不同,不是吗?在 Kubernetes Deployment YML 文件中通过参数传递命令,但是如何动态处理完整的文件?因为需要避免人工干预。 该图像与您的服务帐户文件无关,您可以将其部署在所有机器上的预定义路径中。注意:在 BigQuery 中没有 dev/prod 等,通常所做的是为每个环境或项目使用数据集,具体取决于您的用例。如果您需要不同的服务帐户,只需在匹配的 docker 上定义它们。希望这对您有意义。以上是关于大查询 - 来自部署在 GKE 中的 nodejs 应用程序的 Util.parseHttpRespBody 凭据无效的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 部署时 GKE Autopilot 无法调度
使用 GCP Cloud *** 在站点到站点 *** 用例中将 GKE 集群 pod IP 地址隐藏在单个 IP 地址后面