Vitaly
Vitaly

Reputation: 2662

Start ec2 instance with public ip

I need to start new instance in ec2 from my java code. I can do it by:

    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);

And it creates a new instance. But this instance has empty fields "Public DNS" and "Public IP".

I do not need elastic IP. It is ok if all new instances have new addresses.

So, how to change my request for it?

Upvotes: 0

Views: 293

Answers (1)

Vitaly
Vitaly

Reputation: 2662

Thanks! I have found the solution:

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);

I do not know what is "DeviceIndex", and why it is "0", but it works.

Upvotes: 1

Related Questions