pbathala
pbathala

Reputation: 1410

Getting state of EC2 instance Java API

I am trying to automate some stuff on AWS and I am using Java API to do this. I am able to launch number of instances I want, but I am unable to find the right class or method that can fetch me the current state of the instance (like running, stopped etc).

I tried this

DescribeInstanceStatusRequest describeInstance = new DescribeInstanceStatusRequest().withInstanceIds(instances.get(i).getInstanceId()); DescribeInstanceStatusResult attr = ec2.describeInstanceStatus(describeInstance); List<InstanceStatus> state = attr.getInstanceStatuses();

not sure why the instance status is a list

Can someone please point me to right API call.

Thanks in advance

Upvotes: 6

Views: 11435

Answers (2)

Ed Norris
Ed Norris

Reputation: 4483

I was just looking at this issue

From the documentation (http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstanceStatus.html),

DescribeInstanceStatus returns information only for instances in the running state.

So you may be waiting forever if the machine is stopped rather than restarting.

DescribeInstances (http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html) returns the status of all machines.

Upvotes: 4

pbathala
pbathala

Reputation: 1410

I figured the issue. working code

DescribeInstanceStatusRequest describeInstanceRequest = new DescribeInstanceStatusRequest().withInstanceIds(i-xxxxxxxx);
DescribeInstanceStatusResult describeInstanceResult = ec2.describeInstanceStatus(describeInstanceRequest);
List<InstanceStatus> state = describeInstanceResult.getInstanceStatuses();
while (state.size() < 1) { 
    // Do nothing, just wait, have thread sleep if needed
    describeInstanceResult = ec2.describeInstanceStatus(describeInstanceRequest);
    state = describeInstanceResult.getInstanceStatuses();
}
String status = state.get(0).getInstanceState().getName();

Upvotes: 6

Related Questions