2014-09-22 53 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

相關問題