2012-01-23 19 views
6

Javaのaws-sdkを使用してクラウドマシンを[startInstance][2]メソッドで開始しようとしています。私のコードは以下の通りです。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を持つインスタンスをアカウントで実行していることを確認しているでしょうか?これは、インスタンスIDが特定の地域内でのみ有効な場合(指定されていない場合、地域はデフォルトで 'us-east-1'となります。以下を参照)、間違ったAPIエンドポイントをターゲットにすることが原因です。あなたがstartInstances()を呼び出す前に、明らかにグローバル変数ec2AmazonEC2ClientオブジェクトのsetEndpoint()メソッドを介して実際のインスタンス地域を指定する必要があります。この場合

「私たち-東-1」に、具体的Amazon Elastic Compute Cloud (EC2)デフォルトは、そこUsing Regions with the AWS SDKsに関するいくつかの例があり、現在使用可能なすべてのAWS地域のエンドポイントURLがRegions and Endpointsに記載されています:

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秒であっても不十分であることが判明しました。

このエクスペリエンスは、使用領域からのものです。我々は、異なる地域へのAPI呼び出しを行わない - それは説明ではない。これは、AWSがこれらのAPI呼び出しのための読み込み後の一貫性を提供できない場合に、悪意のある最終的な一貫性のある仕事です。

+0

同じ問題がeu-west-1で2回発生しました。 – Martijn

0

私はAWSルビーapiを使用していますが、AWSコンソールを見るとAMIイメージを作成するときに同じ問題が発生していることがわかりましたが、イメージを使用できるようになりました。ここで

は私のスクリプト

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

sleep 5 while image.state != :available 

である私が利用可能になるように画像のために、約5秒間眠るが、私は、「AWSエラーメッセージ:InvalidInstanceID.NotFound」というエラーを取得します。私のテストの間、これはうまくいきますが、これは、継続的な統合ビルド中には失敗するようです。