如何验证我在Google Cloud中使用了正确的项目ID

时间:2019-12-23 13:36:14

标签: gcloud

我刚刚使用Google Cloud创建了一个虚拟实例,但是我有三个项目,并且它将实例分配给了错误的项目。看来这确实是个错误,但我如何确定问题出在Google而不是我。另外,不可避免地会有人建议我使用云控制台来创建实例,所以让我优先考虑该建议。我试图将我所有的云计算都简化为一个按钮。我计划定期创建和销毁实例,并且我必须能够快速有效地做到这一点。因此,我所有的云计算都必须使用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()

该代码导致在“ atomic”项目而非“ move”项目上创建了一个实例,但是我的Google应用程序凭据另有明确说明。我唯一能想到的是,我以某种方式不正确地命名了json文件。但是我要如何验证呢?

此外,让我提供证明错误的项目ID包含实例的证据。我想我不能将名字保密,但我想除非有人输入我的密码,否则它们就不会被盗。原子项目真的叫9920:

the move files project (no instances)

the 9920 project

1 个答案:

答案 0 :(得分:1)

与使用Python进行gcloud调用相比,我建议使用其他(更好)的方法。尽管您当前的方法行得通,但它比必要的方法更为复杂,使错误处理更具挑战性,并且-如您所见-可能导致意外行为。在这种情况下,因为您要调用gcloud,所以您还将继承其配置。

替代方法是使用Google's Python SDK。可通过Google提供的SDK访问所有Google的服务(例如Compute Engine)。有2种主要的SDK。较旧的API客户端库和较新的(仅用于[某些]云服务[不幸的是,不适用于Compute Engine])云客户端库。这是Google的explainer

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

Google的API文档非常出色。每个服务(不仅是Cloud)和每个方法都已完全(正确地|自动地)记录在案。这是Compute Engine的执行个体插入方法: https://cloud.google.com/compute/docs/reference/rest/v1/instances/insert

注意事项:该页面还显示了Google的API Explorer,可让您直接进行API调用以观察行为。

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

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

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

NB 我个人的建议是不要使用gcloud config set ...,因为这可能会导致类似的问题。我认为最好总是明确引用例如使用gcloud命令(例如gcloud ... --project=${PROJECT} ...