【问题标题】:AWS Error Message: InvalidInstanceID.NotFoundAWS 错误消息:InvalidInstanceID.NotFound
【发布时间】:2012-02-16 16:29:21
【问题描述】:

我正在尝试使用 Java 中的 aws-sdk 以 [startInstance][2] 方法启动 Amazon EC2 云机器。我的代码如下。

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)

【问题讨论】:

    标签: java amazon-web-services amazon-ec2


    【解决方案1】:

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

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

    但是说真的:大概您已经验证了您实际上在您的帐户中运行具有此 ID 的实例?那么这很可能是由于针对错误的 API 端点造成的,因为实例 ID 仅在特定区域内有效(如果未指定,则该区域默认为“us-east-1”,见下文)。

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

    有一些关于 Using Regions with the AWS SDKs 的示例,所有当前可用的 AWS 区域端点 URL 都列在 Regions and Endpoints 中,特别是 Amazon Elastic Compute Cloud (EC2) 默认为“us-east-1”:

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

    【讨论】:

      【解决方案2】:

      我们运行一项服务 (Qubole),该服务经常生成并立即标记(在某些情况下终止)AWS 实例。

      我们发现亚马逊会每隔一段时间声明一个 instanceid 无效 - 即使它刚刚创建了它。重试几次并投入一些睡眠时间通常可以解决问题。在极少数情况下,即使是 15 秒的总重试间隔也被证明是不够的。

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

      【讨论】:

      • 我在eu-west-1遇到了两次同样的问题。
      【解决方案3】:

      我正在使用 AWS ruby​​ 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”。在我的测试过程中,这很好,但大多数情况下,这似乎在持续集成构建期间失败了。

      【讨论】:

        【解决方案4】:

        InvalidInstanceID.NotFound 表示指定的实例不存在。

        • 确保您已指明实例所在的区域(如果不在默认区域中)。
        • 此错误可能是因为最近创建的实例的 ID 尚未通过系统传播。如需更多信息,请参阅Eventual Consistency

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-05
          • 2020-09-04
          • 1970-01-01
          • 1970-01-01
          • 2012-11-12
          • 2021-11-27
          • 2017-09-13
          相关资源
          最近更新 更多