【问题标题】:Cannot access BigQuery from Compute Engine无法从 Compute Engine 访问 BigQuery
【发布时间】:2021-01-06 15:34:08
【问题描述】:

我已经通过 GCP 上的 Compute Engine 设置了一个标准的 Debian Linux VM。 VM 没有外部 IP 地址。我可以使用浏览器通过 ssh 连接到它。我允许传入 ssh(端口 22)流量和所有传出流量。我已经通过浏览器界面执行查询来测试 BigQuery 并且它可以工作。我已通过设置 -> 云 API 访问范围配置为 VM 启用 BigQuery。现在我想做一个简单的事情如下:

bq show bigquery-public-data:samples.shakespeare

但是什么也没发生。我尝试执行以下操作以获取更多信息:

bq --apilog=stdout show bigquery-public-data:samples.shakespeare

输出如下:

I0106 15:29:47.271125 140258687915840 bigquery_client.py:1205] Requesting discovery document from https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest
I0106 15:29:47.271456 140258687915840 transport.py:158] Attempting refresh to obtain initial access_token

什么都没有发生。任何想法可能是什么问题?

阅读文档后,在我看来,通过 BigQuery 命令行工具的连接应该可以自行工作。

【问题讨论】:

    标签: google-cloud-platform google-bigquery google-compute-engine


    【解决方案1】:

    首先,为什么它不起作用。事实上,当您使用 bq CLI 时,它只是一个调用 BigQuery api 的包装器:https://bigquery.googleapis.com。域名是公开的。 Compute Engine 尝试在公共互联网上解决它。但是计算引擎没有公网IP,无法上网(互联网服务器不知道如何路由回答案,因为VM无法访问!)

    那么,如何解决。 2个解决方案:

    • 您可以在 Compute Engine 上设置 Cloud NAT,从而授予它一个可共享的公共 IP,仅用于启动传出流量
    • 您可以使用一个不为人知的技巧:在您的子网中激活 Google 私有 API 访问。为此,请注意计算引擎的子网。然后转到 VPC 并选择此子网。对其进行编辑并设置为开启私人 Google 访问权限。

    【讨论】:

    • 谢谢!第二种解决方案非常完美,因为我们不打算访问互联网,因为 vm 只能与 BigQuery 工作/交互。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2019-01-25
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多