使用公共ip启动ec2实例
问题描述:
我需要从我的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。如果所有的新实例都有新的地址,这没关系。
那么,如何改变我的要求呢?
答
谢谢!我找到了解决方案:
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”,但它的工作原理。