2016-07-28 186 views
0

我需要从我的java代码在ec2中启动新实例。 我可以做到这一点:使用公共ip启动ec2实例

RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); 

runInstancesRequest 
    .withImageId(myImageId) 
    .withInstanceType(myInstanceType) 
    .withMinCount(INSTANCES_COUNT) 
    .withMaxCount(INSTANCES_COUNT) 
    .withKeyName(myKeyName) 
    .withSubnetId(mySubnetId) 
    .withSecurityGroupIds(mySecurityGroupId) 
    .withPlacement(myPlace) 
; 

RunInstancesResult runInstancesResult = amazonEC2Client.runInstances(runInstancesRequest); 

并创建一个新的实例。但是这个实例有空的字段“Public DNS”和“Public IP”。

我不需要弹性IP。如果所有的新实例都有新的地址,这没关系。

那么,如何改变我的要求呢?

回答

1

谢谢!我找到了解决方案:

RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); 

InstanceNetworkInterfaceSpecification interfaceSpecification = new InstanceNetworkInterfaceSpecification() 
    .withSubnetId(mySubnetId) 
    .withAssociatePublicIpAddress(true) 
    .withGroups(mySecurityGroupId) 
    .withDeviceIndex(0); 

runInstancesRequest 
    .withImageId(myImageId) 
    .withInstanceType(myInstanceType) 
    .withMinCount(INSTANCES_COUNT) 
    .withMaxCount(INSTANCES_COUNT) 
    .withKeyName(myKeyName) 
    //.withSubnetId(mySubnetId) 
    //.withSecurityGroupIds(mySecurityGroupId) 
    .withPlacement(myPlace) 
    .withNetworkInterfaces(interfaceSpecification) 
; 

RunInstancesResult runInstancesResult = amazonEC2Client.runInstances(runInstancesRequest); 

我不知道什么是“DeviceIndex”,为什么它是“0”,但它的工作原理。