是否可以使用 Google 云函数和区域托管实例在 GCP 上实例化新虚拟机?

Is it possible to instantiate a new VM on GCP using Google Cloud Function and Regional Managed Instance?

基本上,我想做的是在 Pub/Sub 上创建一条消息,该消息会触发一个 GCF,该 GCF 从区域托管实例组在它当时拥有的任何可用区域中创建一个实例。

我在这里试图解决的问题是区域 MIG 处理的一个相当反复出现的问题 ZONE_RESOURCE_POOL_EXHAUSTED。

这个解决方案可行吗?我试过使用 createInstances method 但日志记录只显示 PRECONDITION_FAILED.

我使用的代码片段如下:

from googleapiclient import discovery
def launch_vm(project, region, igm, body)
    service = discovery.build('compute', 'v1')
    response = service.regionInstanceGroupManagers()\
               .createInstances(
                   project=project,
                   region=region,
                   instanceGroupManager=igm,
                   body=body)
    return response.execute()

request_body = {"instances":[{"name": "testinstance"}]}

launch_vm('project-name', 'us-central1', 'instace-group-name', request_body)

####### 编辑: 我刚刚发现发生了什么,当我尝试使用最近创建的实例组的另一个项目时,我发现实例重新分配已启用,这与 CLI 的响应不同:

ERROR: (gcloud.compute.instance-groups.managed.create-instance) CreateInstances can be used only when instance redistribution is disabled (set to NONE).

我检查了实例再分配检查,现在效果很好:)感谢大家的帮助!

我可以 createInstance:

import os

from googleapiclient import discovery


PROJECT = os.environ["PROJECT"]
REGION = os.environ["REGION"]
NAME = os.environ["NAME"]

service = discovery.build('compute', 'v1')

def launch_vm(project,region, name, body):
    rqst = service.regionInstanceGroupManagers().createInstances(
                   project=project,
                   region=region,
                   instanceGroupManager=name,
                   body=body)
    return rqst.execute()


body = {
    "instances": [
        {
            "name": "testinstance"
        }
    ]
}

launch_vm(PROJECT, REGION, NAME, body)