【发布时间】: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