2016-07-28 265 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」,但它的工作原理。