AWS错误消息:InvalidInstanceID.NotFound

diy*_*iya 8 java amazon-ec2 amazon-web-services

我正在尝试使用Java中的aws-sdk 启动Amazon EC2云计算机[startInstance][2].我的代码如下.

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);
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我收到以下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)
Run Code Online (Sandbox Code Playgroud)

Ste*_*pel 15

AWS错误消息:实例ID"i-2b97ac2f"不存在

您必须在此处将AWS响应视为理所当然,即实例不存在;)

但严重的是:据推测,您已经确认您实际上在您的帐户中运行了具有此ID的实例?然后,这很可能是由于定位错误的API端点造成的,只要实例ID仅在特定区域内有效(如果未指定,则该区域默认为'us-east-1',见下文).

在这种情况下,您需要在调用startInstances()之前通过显式全局变量中的AmazonEC2Client对象的setEndpoint()方法指定实际实例区域.ec2

还有关于一些例子使用区域与AWS的SDK和目前所有的AWS区域端点的URL中列出的地区和端点,特别是亚马逊弹性计算云(EC2),默认为"美东1":

如果您只指定一般端点(ec2.amazonaws.com),Amazon EC2会将您的请求定向到us-east-1端点.


小智 11

我们运行一个服务(Qubole),它经常产生,然后立即标记(在某些情况下终止)AWS实例.

我们发现亚马逊会偶尔声称一个instanceid是无效的 - 尽管它刚刚创建了它.在一些睡眠时间内重试几次通常可以解决问题.在极少数情况下,甚至15秒的总重试间隔也证明是不够的.

这种体验来自于useast地区.我们不会对不同地区进行api调用 - 所以这不是解释.更有可能的是 - 这是工作中臭名昭着的最终一致性 - AWS无法为这些api调用提供读写后一致性.