如何在首次启动时检查实例状态?

时间:2014-09-22 00:35:43

标签: java amazon-web-services amazon-ec2 sdk

当我第一次通过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。但是,这不起作用。

1 个答案:

答案 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) {}
}

如果您需要在等待实例达到其所需状态时执行其他任务,请记住将循环放在自己的线程中。