1

我正在寻找一些代码,无论实例当前是否正在运行,它们都会返回当前实例状态。我发现了一些代码可以在运行的实例上返回所需的结果,但是当试图找到一个可以在停止的实例上工作的代码时,我被许多看起来执行类似操作的相似类所淹没,但最终,不起作用或记录不充分。

无论如何,代码的运行实例版本如下:

public Integer getInstanceStatus(String instanceId) {
    DescribeInstanceStatusRequest describeInstanceRequest = new DescribeInstanceStatusRequest().withInstanceIds(instanceId);
    DescribeInstanceStatusResult describeInstanceResult = ec2.describeInstanceStatus(describeInstanceRequest);
    List<InstanceStatus> state = describeInstanceResult.getInstanceStatuses();
    return state.get(0).getInstanceState().getCode();
}

所以我基本上是在寻找没有DescribeInstanceStatus' 限制要求实例运行的等价物。我认为这是可能的,因为getCode()文档显示它能够返回表示停止实例的值 80。

4

2 回答 2

2

再一次,我回答我自己的问题……尽管我对其他建议持开放态度。

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();
}
于 2014-03-18T21:50:50.113 回答
2

如果您设置withIncludeAllInstances(true)了您的请求,那么您可以获得未运行实例的状态。

DescribeInstanceStatusResult result = ec2.describeInstanceStatus(new DescribeInstanceStatusRequest()
                .withInstanceIds(instanceIds).withIncludeAllInstances(true));
于 2016-04-24T19:46:39.210 回答