簡體   English   中英

使用 Python 啟動 Google Compute 實例

[英]Starting a Google Compute instance with Python

我正在嘗試使用 Google API Python Client Library 啟動 Google Compute 實例。 這樣一來,廉價實例(在單個內核上運行)可以定期啟動和停止更昂貴的實例(具有多個內核),以降低成本。

我已經成功安裝了不同的組件並運行了 Google 的示例腳本create_instance.py (創建實例、運行啟動腳本並刪除實例)。 檢查計算引擎 API 的 PyDoc 參考,並交叉參考其他 instances() 函數在 create_instance.py 示例中的工作方式,我希望啟動實例命令是:

python compute.instances().start(project=*, zone=*, instance=*).execute()

上面的命令給我錯誤“在'('之后需要一個表達式。在行:1 char:34” - 這是第一個括號。

一種。 我做錯了什么?

b. 將 Google API 與 Python 一起使用是否是一種以編程方式從其他實例啟動實例的好方法?

下面是啟動計算引擎實例所需的代碼

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. 通常,我希望您需要使用import語句或運行時標志( -m somemodule ?)導入 api 庫。 直接從命令行運行一行 python 通常不是最好的方法。 相反,Google 提供了gcloud命令行工具

  2. 通常在發送 API 實際命令之前調用身份驗證/登錄函數。 在 Google VM 上,如果 VM 被特別授權調用 API 或充當特定帳戶,則這可以是 ID/私鑰或空白 ID/密鑰。 首次創建 Google VM 時,可以從計算引擎 Web 控制面板設置此授權。 在外部 VM 上,它需要一個 ID/私鑰來提供給 Google API。 因此,python 中的單行代碼可能無法工作,因為它缺少這一步。

  3. compute.instances().start()函數采用必需的參數來啟動已停止的特定實例。 這意味着:

    • 之前已經創建了 VM 實例
    • 虛擬機實例處於停止狀態
    • 要重新啟動的實例由特定的項目 ID、(地理)區域和在start調用中提供的實例名稱標識

來自Google Cloud Python 文檔

start(project= , zone= , instance=*) 啟動一個使用instances().stop 方法停止的實例。 更多信息請參見重啟實例。

參數:項目:字符串,此請求的項目 ID。 (必填)
zone: string,此請求的區域名稱。 (必填)
實例:字符串,要啟動的實例資源的名稱。 (必填)

...

from google.cloud import compute_v1

project = ""
zone = ""
instance_client = compute_v1.InstancesClient.from_service_account_file("ServiceAccount.json")
instance_list = instance_client.list(project=project, zone=zone)
for instance in instance_list:
    print(instance.name)
    instance_client.start(project=project, zone=zone, instance=instance.name)

需要 iam 角色 Compute Admin 源可在此處獲得: https://github.com/googleapis/python-compute

我使用了@user570778 共享的代碼,對我來說效果很好。

`從 googleapiclient 導入發現

service = discovery.build('compute', 'v1') print('VM 實例開始')

此請求的項目 ID。

項目 = '項目名稱'

此請求的區域名稱。

zone = 'zone_value'

要啟動的實例資源的名稱。

實例 = '實例名稱'

request = service.instances().start(project=project, zone=zone, instance=instance) response = request.execute()

print('VM Instance started') ` 我想知道,是否可以在同一個函數中啟動多個實例?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM