2014-09-22 50 views
1

当我第一次在AWS上通过java SDK启动实例时。我如何检查实例状态。创建的实例的状态处于挂起状态,并且将会运行。我想尽快检查状态并等待时间,而不是像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

[获取EC2实例Java API的状态]可能的重复(http://stackoverflow.com/questions/8828964/getting-state-of-ec2-instance-java-api) – mmcrae 2014-09-22 00:51:03

回答

1

您需要创建DescribeInstancesRequest,然后将结果存储在​​变量中以读取数据。我创建了前一段时间做了一个方法,这一点是:

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 

所以你干脆把在合理的休眠状态下调用.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) {} 
} 

只要记得把环在自己的线程,如果你需要执行其他任务在等待实例来达到其所需的状态。

+0

Thx,我会稍后再尝试。我仍然有一个问题。预订和实例之间有什么关系?通过比较你的答案,我发现我的错误答案可能是从我没有新的请求每次。 – cow12331 2014-09-22 16:45:25

+0

是的,你需要刷新你的支票,否则你只是读旧数据。 'ec2.describeInstances(describeInstanceRequest)'是实际联系亚马逊的信息部分。此外,还有另一个线索试图回答关于预订的问题,并且似乎做了一个体面的工作。就其描述的内容而言,它的官方文档有点缺乏。 http://stackoverflow.com/questions/15618825/what-is-the-purpose-of-reservations-in-amazon-ec2 – DGolberg 2014-09-22 16:59:03

相关问题