在 VM 实例 Google 云中的 Python / Bigquery 之间创建连接(凭据文件有问题)

Create a connection between Python / Bigquery in a VM Instance Google Cloud (Problem with Credentials File)

我正在创建一个应该 运行 在 VM 实例 (Google Cloud Plataform) 中的脚本,为此我从这个 VM 使用 SSH (Linux)。此代码将 python 与 Bigquery 连接。

我在使用“凭据”时遇到问题,当我在我的本地计算机上 运行 时,我的凭据在我本地目录的这个文件中,代码访问这个文件和 运行 服务。但是当我在 SSH(VM 实例)中 运行 时,VM 找不到该文件,因为它不在 VM 目录中。

我应该怎么做才能解决这个问题?我想我需要把这个文件放在 VM 实例中并采用新路径,但我不知道如何。


    from google.cloud import bigquery
    from google.oauth2 import service_account
    credentials = service_account.Credentials.from_service_account_file(
    r'C:\Users\Path\File.json')

    project_id = 'Project_ID523'
    client = bigquery.Client(credentials= credentials, project=project_id)

解决问题的最佳方法是不要在源代码中保留服务帐户文件的路径。

  • 要在本地访问 Bigquery,您需要设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量,其值等于您的服务帐户文件的路径。
  • 它的重要之处在于您无需在 GCP VM 中执行任何操作,因为 bigquery 客户端库可以自动从 Compute Engine 实例的元数据中获取凭据。您只需向 Compute Engine 服务帐户提供适当的 IAM 权限。

设置好GOOGLE_APPLICATION_CREDENTIALS环境变量后,你的代码会变成下面这样:

from google.cloud import bigquery
from google.oauth2 import service_account

project_id = 'Project_ID523'
client = bigquery.Client(project=project_id)

注意:无需在代码中提供服务帐户文件的路径,因为客户端库将从环境变量中获取服务帐户凭据。

查看 this link 了解更多信息。