首页 > 解决方案 > 如何验证我在 Google Cloud 中使用的项目 ID 是否正确

问题描述

我刚刚使用 Google Cloud 创建了一个虚拟实例,但我有三个项目,并且它将该实例分配给了错误的项目。看起来这确实是一个错误,但我怎么能确定问题出在谷歌而不是我。此外,不可避免地会有人建议我使用云控制台创建实例,所以让我抢占先机。我试图让我所有的云计算都只需单击一个按钮。我计划定期创建和销毁实例,我必须能够快速有效地做到这一点。因此,我所有的云计算都必须使用 Python 完成。无论如何,我有两个项目:“move_files”和“9920”(我没有编名字)。我使用了以下 python 语法:

import subprocess
str1 = "/users/kylefoley/codes/move.json"
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = str1

def create_instance(name='', machine_type=''):
    name = 'kfoley76'
    machine_type = 'n1-standard-1'

    subprocess.run(['gcloud', 'compute', 'instances', 'create',
                    name, f'--machine-type={machine_type}',
                    '--zone=us-west2-a'])

create_instance()

该代码导致在“原子”项目而不是“移动”项目上创建一个实例,但我的谷歌应用程序凭据清楚地说明了其他情况。我唯一能想到的是,我以某种方式json错误地命名了文件。但是我该如何验证呢?

另外,让我证明错误的项目 ID 包含实例。我想我无法对这些名字保密,但我想除非有人知道我的密码,否则它们不会被盗。原子项目真的叫9920:

移动文件项目(无实例)

9920项目

标签: gcloud

解决方案


我推荐一种与使用 Python 进行gcloud调用不同(更好)的方法。虽然您当前的方法可行,但它比必要的复杂,使错误处理更具挑战性,并且 - 正如您所看到的 - 可能导致意外行为。在这种情况下,因为您正在调用 ,所以您gcloud也继承了它的配置。

另一种方法是使用Google 的 Python SDK。Google 的所有服务(例如 Compute Engine)都可以通过 Google 提供的 SDK 访问。SDK 有两种主要风格。较旧的 API 客户端库和较新的(仅适用于 [某些] 云服务 [不幸的是不是 Compute Engine])云客户端库。这是谷歌的解释器

NB gcloud本身是用 Python 编写的,并使用 API 客户端库。

Google 的 API 文档非常好。每个服务(不仅仅是云)和每个方法都被完整(并且正确地|自动地)记录在案。这是 Compute Engine 的实例插入方法: https ://cloud.google.com/compute/docs/reference/rest/v1/instances/insert

NB该页面还提供了 Google 的 APIs Explorer,它使您能够直接调用 API 来观察行为。

如果您向下滚动此页面,您将找到 Google 支持的每种语言的示例: https ://cloud.google.com/compute/docs/reference/rest/v1/instances/insert#examples

有关示例,请参见此页面: https ://cloud.google.com/compute/docs/tutorials/python-guide

注意当您直接使用(任何)API 时,您必须明确说明要使用的项目。这是因为,gcloud允许默认值,例如gcloud config set project,但 API 本身是无状态的,并且不允许。

注意我个人的建议是永远不要使用gcloud config set ...,因为这会导致这样的问题。我认为最好总是明确引用例如项目,使用gcloud命令例如gcloud ... --project=${PROJECT} ...


推荐阅读