Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google compute engine GCE如何在启动时将外部IP添加到现有实例_Google Compute Engine_Google Cloud Platform_Gcloud Java - Fatal编程技术网

Google compute engine GCE如何在启动时将外部IP添加到现有实例

Google compute engine GCE如何在启动时将外部IP添加到现有实例,google-compute-engine,google-cloud-platform,gcloud-java,Google Compute Engine,Google Cloud Platform,Gcloud Java,我正在使用来管理一些VM实例。创建新实例的代码很清楚,如下所示: Address externalIp = compute.getAddress(addressId); InstanceId instanceId = InstanceId.of("us-central1-a", "test-instance"); NetworkId networkId = NetworkId.of("default"); PersistentDiskConfiguration attachConfigur

我正在使用来管理一些VM实例。创建新实例的代码很清楚,如下所示:

Address externalIp = compute.getAddress(addressId);

InstanceId instanceId = InstanceId.of("us-central1-a", "test-instance");

NetworkId networkId = NetworkId.of("default");

PersistentDiskConfiguration attachConfiguration =
        PersistentDiskConfiguration.builder(diskId).boot(true).build();

AttachedDisk attachedDisk = AttachedDisk.of("dev0", attachConfiguration);

NetworkInterface networkInterface = NetworkInterface.builder(networkId)
    .accessConfigurations(AccessConfig.of(externalIp.address()))
    .build();

MachineTypeId machineTypeId = MachineTypeId.of("us-central1-a", "n1-standard-1");

InstanceInfo instance =
    InstanceInfo.of(instanceId, machineTypeId, attachedDisk, networkInterface);

Operation operation = compute.create(instance);
// Wait for operation to complete
operation = operation.waitFor();

if (operation.errors() == null) {
   System.out.println("Instance " + instanceId + " was successfully created");
} else {
     // inspect operation.errors()
     throw new RuntimeException("Instance creation failed");
}
但是,如果我有一个想要启动的现有实例,并且我想要连接一个外部IP,我应该怎么做呢

我试过这样做:首先,我创建一个RegionAddressId,并获得一个地址,用它创建networkInterface

RegionAddressId addressId = RegionAddressId.of("europe-west1", "test-address");
    Operation operationAdd = compute.create(AddressInfo.of(addressId));
    operationAdd = operationAdd.waitFor();

Address externalIp = compute.getAddress(addressId);
NetworkId networkId = NetworkId.of("default");
NetworkInterface networkInterface = NetworkInterface.builder(networkId)
            .accessConfigurations(NetworkInterface.AccessConfig.of(externalIp.address()))
            .build();
我获取我的实例并添加accessConfig

InstanceId instanceId = InstanceId.of("my-server", "europe-west1-b","my-instance");
    Instance instance = compute.getInstance(instanceId);
    instance.addAccessConfig("default", NetworkInterface.AccessConfig.of(externalIp.address()));
    Operation operation = instance.start();
结果是,我的实例使用另一个我不知道如何获取的外部IP启动。 正确的程序是什么?
谢谢

我自己找到了解决办法

Compute compute = ComputeOptions.defaultInstance().service();

InstanceId instanceId = InstanceId.of("my-server", "europe-west1-b","my-instance");

Operation operation = compute.start(instanceId);

Operation completedOperation = operation.waitFor();
if (completedOperation == null) {
    // operation no longer exists
} else if (completedOperation.errors() != null) {
    // operation failed, handle error
}

Instance instance = compute.getInstance(instanceId);
String publicIp = 
    instance.networkInterfaces().get(0).accessConfigurations().get(0).natIp();

我使用Compute的start方法启动实例,然后(在操作完成后)得到实例

很高兴听到您解决了问题!请你把这个问题标记为已结束,好吗?谢谢