使用Python

时间:2017-07-20 06:47:44

标签: python google-compute-engine google-api-python-client

我正在尝试使用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是以编程方式从其他实例启动实例的好方法吗?

3 个答案:

答案 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)

  1. 一般情况下,我希望您需要使用import语句或运行时标志(-m somemodule?)导入api库。直接从命令行运行一行python通常不是最好的方法。相反,Google提供了gcloud command line tool

  2. 通常在发送API实际命令之前调用身份验证/登录功能。在Google VM上,如果VM被特别授权调用API或充当特定帐户,则可以是id /私钥或空白ID /密钥。第一次创建Google VM时,可以从计算引擎Web控制面板设置此授权。在外部VM上,它需要一个id /私钥才能提供给Google API。因此,python中的一个内衬可能不会起作用,因为它缺少这一步。

  3. compute.instances().start()函数使用必需参数来启动已停止的特定实例。这意味着:

    • 先前已创建VM实例
    • VM实例处于已停止状态
    • 要重新启动的实例由特定项目ID,(地理)区域和调用start
    • 中提供的实例名称标识
  4. 来自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实例开始”)

此请求的项目ID。

project ='project_name'

此请求的区域名称。

zone ='zone_value'

要启动的实例资源的名称。

instance ='instance_name'

request = service.instances()。start(project = project,zone = zone,instance = instance) 响应= request.execute()

print(“ VM实例已启动”) ` 我想知道,是否可以在同一函数中启动多重实例?