当我第一次通过java SDK在AWS中启动实例时。如何检查实例状态。创建的实例的状态处于暂挂状态,并将继续运行。我想检查状态并尽快等待时间,而不是等待sleep(100000)
之类的修复时间。我尝试了很多方法来处理,但状态不能在SDK中改变。
我的最后一步是:
String pendingId = null;
while(!createdInstanceId.equals(pendingId)) {
describeInstancesRequest = ec2.describeInstances();
reservations = describeInstancesRequest.getReservations();
Reservation reservation = describeInstancesRequest.getReservations().get(0);
pendingId = reservation.getInstances().get(0).getInstanceId();
System.out.println("id: " + pendingId);
Thread.currentThread().sleep(20000);
}
当我启动实例时,可以立即接收已创建实例的ID。所以,我想在实例列表中查询第一个实例的id,直到id等于创建的实例的id。但是,这不起作用。
答案 0 :(得分:1)
您需要创建一个DescribeInstancesRequest
,然后将其结果存储在DescribeInstancesResult
变量中以便读取数据。我之前创建的一种方法就是:
public Integer getInstanceStatus(String instanceId) {
DescribeInstancesRequest describeInstanceRequest = new DescribeInstancesRequest().withInstanceIds(instanceId);
DescribeInstancesResult describeInstanceResult = ec2.describeInstances(describeInstanceRequest);
InstanceState state = describeInstanceResult.getReservations().get(0).getInstances().get(0).getState();
return state.getCode();
}
返回的代码将是Integer
,其匹配以下内容之一:
0 : pending
16 : running
32 : shutting-down
48 : terminated
64 : stopping
80 : stopped
因此,您只需在具有合理睡眠状态的while循环内调用.getInstaceStatus(instanceID)
命令即可刷新状态检查,直到实例处于所需状态。
Integer instanceState = -1;
while(instanceState != 16) { //Loop until the instance is in the "running" state.
instanceState = getInstanceStatus(myInstanceID);
try {
Thread.sleep(5000);
} catch(InterruptedException e) {}
}
如果您需要在等待实例达到其所需状态时执行其他任务,请记住将循环放在自己的线程中。