我刚刚使用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:
答案 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} ...