如何使用Python管理Google Cloud Compute引擎
#教程 #python #googlecloud

计算引擎是Google Cloud提供的IaaS。它是一个强大的平台,可用于创建和管理虚拟机。但是,管理计算引擎可能是一项复杂的任务。在此博客文章中,我们将向您展示如何使用Python自动化计算引擎实例的管理。

设置您的环境

确保已安装Python和PIP。

安装

mac/linux

pip install virtualenv
virtualenv <your-env>
source <your-env>/bin/activate
<your-env>/bin/pip install google-cloud-compute

Windows

pip install virtualenv
virtualenv <your-env>
<your-env>\Scripts\activate
<your-env>\Scripts\pip.exe install google-cloud-compute

验证

用于身份验证,让我们创建一个服务帐户。

  1. iam&admin->服务帐户

  2. 单击创建服务帐户。

Create Service Account

  1. 添加服务帐户名称和服务帐户ID。

    Service account

  2. 单击创建然后继续。

    Create

  3. 添加Compute Admin的角色

  4. 单击完成。

现在,让我们生成一个可以在本地环境中使用的JSON密钥。

  1. 单击您刚创建的服务帐户名称。

  2. 单击键选项。

    Keys

  3. 添加键 - >创建新键

  4. 选择JSON,然后单击创建。

  5. 下载并保存密钥。

现在我们已经对身份验证进行了排序,让我们看一些代码!

创建一个新的VM实例

from google.cloud import compute_v1
import os

# Using os we are storing the service account json key in the variable
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= "key.json"

INSTANCE_NAME = 'instance-name'
MACHINE_TYPE = 'projects/project-id/zones/us-west4-b/machineTypes/e2-medium' 
SUBNETWORK = 'projects/project-id/regions/us-west4/subnetworks/default'
SOURCE_IMAGE = 'projects/project-id/global/images/ubuntu-2004-focal-v20230831'
NETWORK_INTERFACE = {
    'subnetwork':SUBNETWORK,
    'access_configs': [
        {
            'name':'External NAT'
        }
    ]
}

compute_client = compute_v1.InstancesClient()

config = {
    'name' : INSTANCE_NAME,
    'machine_type' : MACHINE_TYPE,
    'disks': [
        {
            'boot': True,
            'auto_delete': True,
            'initialize_params': {
                'source_image': SOURCE_IMAGE,
            }
        }
    ],

    'network_interfaces' : [NETWORK_INTERFACE]
}

print("Creating instace.....")
operation = compute_client.insert(
    project='project-id',
    zone='us-west4-b',
    instance_resource=config
)

operation.result()

print(f'Created VM Instance:{INSTANCE_NAME}')

导入的模块:

  • koude0.compute_v1:此模块为Google Cloud Compute Engine API提供客户库。

  • os:此模块提供了对操作系统功能的访问。

这是代码的工作方式:

  1. 将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为包含Google Cloud Service帐户凭据的JSON文件的路径。

  2. 定义以下变量:

* `INSTANCE_NAME`: The name of the instance to create.

* `MACHINE_TYPE`: The machine type of the instance to create.

* `SUBNETWORK`: The subnetwork of the instance to create.

* `SOURCE_IMAGE`: The image to use for the instance.

* `NETWORK_INTERFACE`: The network interface of the instance to create.
  1. 创建一个InstancesClient类的实例。此类提供用于管理Google计算引擎实例的方法。

  2. 创建一个名为config的字典。该字典包含用于创建实例的配置。

  3. 调用InstancesClient类的insert()方法。此方法创建实例。

  4. 等待操作完成。

  5. 打印创建的实例的名称。

如果您不确定像MACHINE_TYPESOURCE_IMAGE这样的参数,则可以参考Google Cloud Console。

  1. 计算引擎 - > VM实例

  2. 单击创建实例。

  3. 根据您选择参数。

完成后,单击右上角的等效代码选项,然后选择REST

Code

在这里您可以看到所有可用的参数,并且可以根据自己的要求选择。

列出所有VM实例

from google.cloud import compute_v1
from collections import defaultdict
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= "key.json"

instace_client = compute_v1.InstancesClient()
request = compute_v1.AggregatedListInstancesRequest()
request.project = 'project-id'

agg_list = instace_client.aggregated_list(request=request)

all_instances = defaultdict(list)
print("Instances found:")
for zone, response in agg_list:
        if response.instances:
            all_instances[zone].extend(response.instances)
            print(f" {zone}:")
            for instance in response.instances:
                print(f" - {instance.name} ({instance.machine_type}) {instance.status}")

导入的模块:

  • collections.defaultdict:该模块提供了一个默认数据结构,这是一个词典,其中默认值设置为指定值。

这是代码的工作方式:

  1. 将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为包含Google Cloud Service帐户凭据的JSON文件的路径。

  2. 创建一个InstancesClient类的实例。此类提供用于管理Google计算引擎实例的方法。

  3. 创建一个AggregatedListInstancesRequest类的实例。此类代表列出Google Compute Engine实例的请求。

  4. 设置项目ID的项目ID,其中包含列表的实例。

  5. 调用InstancesClient类的aggregated_list()方法。此方法列出了指定项目中的实例。

  6. 创建一个名为all_instances的字典。该词典将用于存储找到的实例。

  7. 迭代aggregated_list()方法的响应。

  8. 对于响应中的每个区域,将该区域中的实例添加到all_instances字典中。

  9. all_instances字典中打印每个实例的名称,机器类型和状态。

output

这是输出的样子。我已经打印了实例名称,机器类型和状态,但是您可以从all_instances字典中打印实例的每个属性。

启动和停止VM实例

from google.cloud import compute_v1
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= "key.json"

compute_client = compute_v1.InstancesClient()

operation = compute_client.stop(
    project='project-id',
    zone='us-west4-b',
    instance='python-instance'
)

operation.result()
print("Instace Stopped!")

这很简单。您只需要提供的是项目ID,区域和实例名称。

  1. 创建一个InstancesClient类的实例。此类提供用于管理Google计算引擎实例的方法。

  2. 调用InstancesClient类的stop()方法。此方法停止实例。

同样适用于启动实例。而不是停止,您必须使用开始方法休息是相同的。

from google.cloud import compute_v1
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= "key.json"

compute_client = compute_v1.InstancesClient()

operation = compute_client.start(
    project='project-id',
    zone='us-west4-b',
    instance='python-instance'
)

operation.result()
print("Instace Started!")

删除VM实例

from google.cloud import compute_v1
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= "key.json"

compute_client = compute_v1.InstancesClient()

operation = compute_client.delete(
    project='project-id',
    zone='us-west4-b',
    instance='instance-name'
)

operation.result()
print("Instace deleted successfully!")

删除也具有与启动或停止相同的逻辑。

  1. 创建一个InstancesClient类的实例。此类提供用于管理Google计算引擎实例的方法。

  2. 调用InstancesClient类的delete()方法。此方法删除实例。

此博客中提到的所有代码均可在GitHub上获得

GitHub logo pratikkalein / GCP-Python

Google Cloud Compute Engine上的Python操作代码

这就是关于如何使用Python管理VM实例的全部。让我知道您的想法,或者如果我错过了评论中的某些内容。

谢谢您的阅读!

与我联系: