无法从 Compute Engine 访问 BigQuery

Cannot access BigQuery from Compute Engine

我已经通过 GCP 上的 Compute Engine 设置了一个标准的 Debian Linux VM。 VM 没有外部 IP 地址。我可以使用浏览器通过 ssh 连接到它。我允许传入 ssh(端口 22)流量和所有传出流量。我已经通过浏览器界面执行查询来测试 BigQuery,它可以正常工作。我已通过设置 -> 云 API 访问范围为虚拟机启用 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 命令行工具的连接应该可以自行工作。

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

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

  • 您可以在您的 Compute Engine 上设置一个 Cloud NAT,从而授予它一个可共享的 public IP,仅用于启动传出流量
  • 您可以使用一个鲜为人知的技巧:在您的子网中激活 Google 私有 API 访问。为此,请记下您的计算引擎的子网。然后去VPC和select这个子网。编辑它并设置为 ON 私有 Google 访问。