我正在尝试使用API通过PHP在Google Cloud上动态创建Compute实例。
使用csmartinez Cloud API sample,我成功创建了实例,并且可以看到它在Google控制台上运行。
我需要为这个新创建的实例分配一个外部IP地址。然后基于API和Google PHP库,添加:
$ipName = "foo";
$addr = new Google_Service_Compute_Address();
$addr->setName($ipName);
$response = $service->addresses->insert($project, $ipZone, $addr);
由于此调用最初处于“待处理”状态,因此我添加了sleep(5)以便可以获取新创建的静态IP:
$response = $service->addresses->get($project, $ipZone, $ipName);
$ip = $response->address;
运行良好,并为我提供了正确的IP地址。然后,我继续尝试分配新IP时创建实例:
$networkConfig = new Google_Service_Compute_AccessConfig();
$networkConfig->setNatIP($ip);
$networkConfig->setType("ONE_TO_ONE_NAT");
$networkConfig->setName("External NAT");
$googleNetworkInterfaceObj->setAccessConfigs($networkConfig);
已创建静态IP,已创建实例,但未为该实例分配IP。 为了消除对挂起状态的怀疑,我还尝试为实例分配一个已经创建的静态IP,从而使用:
$networkConfig->setNatIP("xxx.xxx.xxx.xxx");
没有更多的成功...我在这里想念什么?
答案 0 :(得分:2)
我认为这行:
$googleNetworkInterfaceObj->setAccessConfigs($networkConfig);
应为:
$googleNetworkInterfaceObj->setAccessConfigs(array($networkConfig));
如果这不起作用,则其他地方可能还会出现另一个错误。
答案 1 :(得分:0)
这将是分配网络的整个过程:
$instance = new Google_Instance();
$instance->setKind("compute#instance");
$accessConfig = new Google_AccessConfig();
$accessConfig->setName("External NAT");
$accessConfig->setType("ONE_TO_ONE_NAT");
$network = new Google_NetworkInterface();
$network->setNetwork($this->getObjectUrl($networkName, 'networks', $environment->getPlatformConfigValue(self::PROJECT_ID)));
$network->setAccessConfigs(array($accessConfig));
$instance->setNetworkInterfaces(array($network));
$addr->setName()
几乎不是化妆品。尝试$addr->setAddress($ipAddress)
。
猜测Google_NetworkInterface
将需要分配$addr
。
对不起,目前没有备用IP,并且不想仅支付提供代码的费用。