2

我目前正在学习 GCP,需要在 VM 实例中运行 python 笔记本。打开我的 VM 的 shell 时,我运行了以下代码:

sudo install python-pip
pip install --upgrade google-api-python-client
pip install --upgrade google-cloud-datastore
gcloud auth application-default login

然后我加载了我的 python 笔记本。运行此代码以启动笔记本时:

python mynotebook.py

我收到以下错误:

/home/rnby87/.local/lib/python2.7/site-packages/google/auth/_default.py:66: UserWarning: Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)

我正在运行来自 Google Cloud SDK 文档 ( https://cloud.google.com/datastore/docs/datastore-api-tutorial )的 python 代码

from google.cloud import datastore 

def create_client(project_id):
     return datastore.Client(project_id)

任何帮助深表感谢!谢谢!

4

1 回答 1

6

对于 Google Cloud SDK 和 CLI,您应该使用服务帐户凭据。

第 1 步:创建服务帐户并下载

  1. 登录到谷歌云控制台。
  2. 转到 IAM 和管理员 -> 服务帐户
  3. 单击创建服务帐户
  4. 输入服务帐户名称和服务帐户描述
  5. 点击创建
  6. 在下一个屏幕服务帐户权限中,选择一个角色。
  7. 添加所需的角色。
  8. 点击继续
  9. 单击创建密钥
  10. 检查 Key 类型的 JSON 单选按钮
  11. 将 json 文件保存到您的计算机。
  12. 由于您在 VM 中运行,因此请上传到 VM。

第 2 步:配置 gcloud 和 SDK 以使用服务帐号。

您将需要服务帐户的电子邮件地址(也存储在 Json 文件中)和服务帐户文件名。

从 VM 中的 shell 运行此命令:

gcloud auth activate-service-account SERVICE_ACCOUNT_EMAIL_ADDRESS --key-file=service_account_filename.json

第 3 步:验证您的凭据是否有效:

gcloud auth list

您应该会在左列(指定帐户帐户)中看到带有星号的服务帐户。

注意:由于您在 Google 虚拟机 (GCE) 实例中运行,因此高级用户通常会使用 Compute Engine 默认服务帐户作为凭据。我建议先学习如何使用服务帐户 Json 文件。

第 4 步:指定服务帐户

将环境变量设置GOOGLE_APPLICATION_CREDENTIALS为指向您的服务帐户 json 文件。这是一个示例,将路径更改为您的路径。

对于 Linux:

export GOOGLE_APPLICATION_CREDENTIALS="/home/username/[FILE_NAME].json"

对于 Windows:

set GOOGLE_APPLICATION_CREDENTIALS="c:\Users\username\[FILE_NAME].json"

第 5 步:在创建服务客户端时可选择指定服务帐户:

from google.cloud import datastore 

def create_client(project_id):
     return datastore.Client(project_id).from_service_account_json('service_account_filename.json')
于 2019-03-15T03:17:45.367 回答