我正在努力开始一个亚马逊EC2.云机带[startinstance] [2]在Java中使用AWS-SDK的方法。我的代码如下。
民众细绳StartInstance.(String installID)抛出例外{list instanceIds =新的arraylist ();instanceIDs.add(instanceID);startinstancesrequest startrequest =新的startinstancesrequest(instanceids);StartRequest.SetRequestCredentials(getCredentials());startinstansresult startresult = ec2.startinstances(startrequest);list statechangelist = startresult .getstartinginstances();log.trace(“启动实例'{}':”,instanceID);//等待要启动的实例返回待客(立体钟登机师,“跑步”,instanceID);}
当我运行上面的代码时,我得到以下AWS错误:
状态代码:400,AWS请求ID:E1BD4795-A609-44D1-9E80.-43611E80006B,AWS Erro R代码:InvalidInstanceID.NotFound,AWS错误消息:实例ID'I-2B97AC 2F'在com.amazonaws.http.amazonhttpclient.handleerrorresponse(amazonhttpcli ent.java:538.)在com.amazonaws.http.amazonhttpclient.executehelper(Amazonhttpclient.ja va:283.)在com.amazonaws.http.amazonhttpclient.execute(AmazonHttpClient.java:168.)在com.amazonaws.services.ec2.amazonec2client.invoke(amazonec2client.jav a:5208.)在com.amazonaws.services.ec2.amazonec2client.startinstances(amazonec2cl ient.java:2426.的)
我们运行一个经常产生的服务(Qubole),然后标记(在某些情况下终止)AWS实例。
我们发现亚马逊每次偶尔都会介绍一个实例是无效的 - 即使它刚刚创建它。使用一些睡眠时间重试几次,通常可以解决问题。即使在罕见的情况下,即使是15岁的总重试间隔也被证明不足。
这种经验来自美国东部地区。我们不会让API调用不同地区 - 因此不是解释。更有可能 - 这是工作中的臭名昭着的最终一致性 - 如果AWS无法为这些API调用提供写入后的一致性。