Google Compute API:具有外部IP的新实例

时间:2018-09-11 15:28:07

标签: google-api google-cloud-platform google-compute-engine

我正在尝试使用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");

没有更多的成功...我在这里想念什么?

2 个答案:

答案 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,并且不想仅支付提供代码的费用。