GCE通过Node.js API批量创建VM仅成功2台问题咨询
报错原因
IN_USE_ADDRESSES是GCP项目在单区域的公网IP(包含临时公网IP、静态公网IP)总配额限制,你触发的报错说明us-central1区域当前已使用的公网IP数量已经达到8个的上限,无法再分配新的公网IP给新建的VM。- 你看到的API返回正常、日志打印创建成功是假成功:
zone.createVM返回的是异步创建操作的初始响应,你没有等待异步操作执行完成就打印了成功日志,配额校验、资源分配等步骤是在后续异步执行的,超限后创建任务会直接失败,不会在控制台生成实例。最终成功创建2台是因为这2台刚好占用了剩余的可用公网IP配额,其余任务均因IP不足创建失败。
解决办法
- 先核查现有IP使用情况:进入GCP控制台「IAM与管理」-「配额」页面,筛选区域为
us-central1、配额指标为IN_USE_ADDRESSES,确认当前已使用量和上限值。 - 若VM不需要公网访问能力,在创建VM的配置中关闭公网IP分配,不会占用公网IP配额,修改config配置如下:
const config = { // 原有其他配置保留 networkInterfaces: [{ network: 'global/networks/default', // 替换为你实际使用的VPC subnetwork: 'regions/us-central1/subnetworks/default', // 替换为你实际使用的子网 accessConfigs: [] // 空数组代表不分配公网IP }] }
- 若VM需要公网IP,可先清理区域内闲置的静态/临时公网IP,释放配额后再创建实例;如果业务确实需要更多公网IP,可在配额页面提交
IN_USE_ADDRESSES配额提升申请,审核通过后即可使用更多IP。 - 修正你的创建代码逻辑,等待异步操作完成后再判断创建结果,避免假成功日志:
// this is called multiple times with different vmNames: const Compute = require('@google-cloud/compute'); const compute = new Compute(); const zone = compute.zone('us-central1-a'); try { const [vm, operation, apiResponse] = await zone.createVM(vmName, config); // 等待异步创建操作完成 await operation.promise(); const vmid = apiResponse.id; console.log('created vm ' + vmid); } catch (err) { console.error('create vm failed:', err.message); }
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

