0
我写这应该阻止,直到列表中的所有情况下都没有在一个特定的状态,所以这里的功能是什么,我有:阻塞,直到所有EC2实例处于特定状态?
private void waitForInstanceState(List<String> instancesId, InstanceStateName state) {
int numAchievedState = 0;
while (numAchievedState != instancesId.size()) {
numAchievedState = 0;
DescribeInstanceStatusRequest describeRequest = new DescribeInstanceStatusRequest().withInstanceIds(instancesId);
DescribeInstanceStatusResult instanceStatus = ec2.describeInstanceStatus(describeRequest);
for (InstanceStatus status : instanceStatus.getInstanceStatuses()) {
if (status.getInstanceState().getName().equals(state.toString())) {
numAchievedState++;
}
}
try {
Thread.sleep(15000);
} catch (InterruptedException ex) {
Logger.getLogger(AmazonLibrary.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
调用上面的函数的代码是这样的:
public void startInstace(List<String> instancesId) {
StartInstancesRequest startRequest = new StartInstancesRequest(instancesId);
ec2.startInstances(startRequest);
waitForInstanceState(instancesId, InstanceStateName.Running);
System.out.println("The instance has been started");
}
事情有时被描述的实例请求返回null InstanceStatus,我认为应该永远不会发生,因为亚马逊的一个实例总是有一个状态?另外,当在instanceRun函数中使用时,它在InstanceStateName设置为Stopped的情况下运行时不起作用。没有例外或错误被抛出。