【问题标题】:How can I check Instance State when I first launch it?首次启动时如何检查实例状态?
【发布时间】:2014-09-23 00:34:50
【问题描述】:

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

【问题讨论】:

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


【解决方案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) {}
}

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

【讨论】:

  • 谢谢,我稍后再试试。我还有一个问题。预留和实例之间有什么关系?通过比较你的答案,我发现我的错误答案可能是因为我每次都没有新的请求。
  • 是的,您需要刷新您的支票,否则您只是在读取旧数据。 ec2.describeInstances(describeInstanceRequest) 是实际联系亚马逊获取信息的部分。此外,还有另一个线程试图回答有关预订的问题,并且似乎做得不错。就它的确切描述而言,它的官方文档有点缺乏。 stackoverflow.com/questions/15618825/…
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多