2012-01-23 228 views
6

我試圖啓動一個亞馬遜EC2雲機使用AWS-SDK [startInstance][2]方法在Java中。我的代碼如下。AWS錯誤消息:InvalidInstanceID.NotFound

public String startInstance(String instanceId) throws Exception { 
    List<String> instanceIds = new ArrayList<String>(); 
    instanceIds.add(instanceId); 

    StartInstancesRequest startRequest = new StartInstancesRequest(
      instanceIds); 
    startRequest.setRequestCredentials(getCredentials()); 

    StartInstancesResult startResult = ec2.startInstances(startRequest); 
    List<InstanceStateChange> stateChangeList = startResult 
      .getStartingInstances(); 
    log.trace("Starting instance '{}':", instanceId); 

    // Wait for the instance to be started 
    return waitForTransitionCompletion(stateChangeList, "running", 
      instanceId); 
} 

當我運行上面的代碼,我發現了以下錯誤AWS:

Status Code: 400, AWS Request ID: e1bd4795-a609-44d1-9e80-43611e80006b, AWS Erro 
r Code: InvalidInstanceID.NotFound, AWS Error Message: The instance ID 'i-2b97ac 
2f' does not exist 
     at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpCli 
ent.java:538) 
     at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.ja 
va:283) 
     at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:168 
) 
     at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.jav 
a:5208) 
     at com.amazonaws.services.ec2.AmazonEC2Client.startInstances(AmazonEC2Cl 
ient.java:2426) 

回答

13

AWS Error Message: The instance ID 'i-2b97ac2f' does not exist

你將不得不採取此處授予的AWS響應,即,該實例確實不存在;)

但嚴重的是:想必你已經驗證了你實際上是用這個ID在您的帳戶運行的實例?那麼這很可能是由於針對錯誤的API端點而引起的,因爲實例ID只在特定區域內有效(如果未指定,該區域默認爲'us-east-1',見下文)。

在這種情況下,你需要在調用startInstances()之前通過指定顯然全球ec2變量中AmazonEC2Client對象的setEndpoint()方法的實際實例區域。

有「美東1」關於Using Regions with the AWS SDKs一些例子,目前所有的AWS區域終點網址是在Regions and Endpoints上市,特別是Amazon Elastic Compute Cloud (EC2)默認爲:

If you just specify the general endpoint (ec2.amazonaws.com), Amazon EC2 directs your request to the us-east-1 endpoint.

+0

絕對正確。感謝您的快速響應。 – diya

10

我們經營的服務(Qubole)經常產生,然後立即標記(並在某些情況下終止)AWS實例。

我們發現,亞馬遜將每一次的同時,要求一個實例id爲無效 - 即使它只是創造了它。重新投入幾次睡眠時間通常可以解決問題。在極少數情況下,即使總共15秒的重試間隔也不足。

這個經驗來自於useast區域。我們不會向不同地區進行api呼叫 - 所以這不是一個解釋。更有可能 - 這是臭名昭着的最終一致性工作 - AWS無法爲這些api調用提供讀寫後一致性。

+0

我在歐盟西部一次遇到過兩次相同的問題。 – Martijn

0

我使用AWS API的紅寶石和創建AMI圖像,當我看在AWS控制檯,但一段時間後,圖像可以利用其地位正在等待時,我注意到了同樣的問題。

這裏是我的腳本

image = ec2.images.create(:name => image_name, :instance_id => ami_id, :description => desc) 

sleep 5 while image.state != :available 

我睡的圖像約5秒爲處於可用,但我得到的錯誤說,「AWS錯誤消息:InvalidInstanceID.NotFound」。在我的測試過程中,這很好,但大多數情況下這似乎在持續集成構建過程中失敗。