我正在尝试使用Google API Python客户端库启动Google Compute实例。这样一个廉价的实例(在单核上运行)可以定期启动和停止更昂贵的实例(有很多内核),以降低成本。
我已成功安装了不同的组件并运行了Google的示例脚本create_instance.py(创建实例,运行启动脚本并删除实例)。检查Compute Engine API的PyDoc引用,并交叉引用其他instances()函数在create_instance.py示例中的工作方式,我希望start instance命令为:
python compute.instances().start(project=*, zone=*, instance=*).execute()
上面的命令给出了错误"在'('。第1行:char:34" - 这是第一个括号。
之后出现了一个表达式。一个。我做错了什么?
湾使用带有Python的Google API是以编程方式从其他实例启动实例的好方法吗?
答案 0 :(得分:3)
下面是启动计算引擎实例所需的代码
from googleapiclient import discovery
service = discovery.build('compute', 'v1')
print('VM Instance starting')
# Project ID for this request.
project = 'project_name'
# The name of the zone for this request.
zone = 'zone_value'
# Name of the instance resource to start.
instance = 'instance_name'
request = service.instances().start(project=project, zone=zone, instance=instance)
response = request.execute()
print('VM Instance started')
这是我用于从云功能启动VM实例的代码。
这里要注意的重要一点是,只有在实例处于停止状态时才能启动实例,这完全符合我的要求。
答案 1 :(得分:2)
一般情况下,我希望您需要使用import
语句或运行时标志(-m somemodule
?)导入api库。直接从命令行运行一行python通常不是最好的方法。相反,Google提供了gcloud
command line tool。
通常在发送API实际命令之前调用身份验证/登录功能。在Google VM上,如果VM被特别授权调用API或充当特定帐户,则可以是id /私钥或空白ID /密钥。第一次创建Google VM时,可以从计算引擎Web控制面板设置此授权。在外部VM上,它需要一个id /私钥才能提供给Google API。因此,python中的一个内衬可能不会起作用,因为它缺少这一步。
compute.instances().start()
函数使用必需参数来启动已停止的特定实例。这意味着:
start
来自Google Cloud Python Documentation
start(project = ,zone = ,instance = *)启动一个实例 停止使用instances()。stop方法。更多 信息,请参阅重新启动实例。
Args:project:string,此请求的项目ID。 (所需的)
zone:string,此请求的区域名称。 (所需的)
instance:string,要启动的实例资源的名称。 (所需的)...
答案 2 :(得分:0)
我使用了@ user570778共享的代码,对我来说,它工作正常。
`来自googleapiclient导入发现
service = Discovery.build('compute','v1') 打印(“ VM实例开始”)
project ='project_name'
zone ='zone_value'
instance ='instance_name'
request = service.instances()。start(project = project,zone = zone,instance = instance) 响应= request.execute()
print(“ VM实例已启动”) ` 我想知道,是否可以在同一函数中启动多重实例?