【问题标题】:Is it possible to instantiate a new VM on GCP using Google Cloud Function and Regional Managed Instance?是否可以使用 Google Cloud Function 和区域托管实例在 GCP 上实例化新 VM?
【发布时间】:2021-10-24 06:25:33
【问题描述】:

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

我在这里尝试解决的问题是区域 MIG 处理的相当频繁的 ZONE_RESOURCE_POOL_EXHAUSTED。

这个解决方案可行吗?我尝试过使用createInstances method,但 Logging 只显示 PRECONDITION_FAILED。

我使用的代码sn-p如下:

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方法吗?它可以解释您的前提条件失败错误。
  • 我编辑了我的问题以包含我正在使用的代码,你能再看一下吗?提前致谢!
  • 我想知道你是否打了这些limitations?我不明白这个问题。如果 MIG 无法在区域中创建实例,那么重试不是 MIG 的工作吗?
  • 我已经尝试将 gcloud 工具与 gcloud compute instance-groups managed create-instance instance-group --region=us-central1 --instance=instance-name 一起使用,它可以工作!这表明我对 API 的使用有问题,缺少一些东西 :( 你知道它可能是什么吗?
  • 好论据!尝试将--log-http 附加到该gcloud 命令,您将获得底层调用的详细信息。或者,您可以使用 APIs Explorer 直接进行 REST API 调用。任何一种机制都可以帮助您识别错误或遗漏。见:cloud.google.com/compute/docs/reference/rest/v1/…

标签: google-cloud-platform google-compute-engine high-availability


【解决方案1】:

我可以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)

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2018-06-13
    • 2023-02-17
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多