如何在amazonEC2中获取PublicDnsName?我们可以使用ins.getPublicDnsName()从实例中获取它,但它是在特定时间之后创建的,有没有其他方法可以获取它?或者一些如何在生成后立即获取它?为了让它等待,我做到了
while(flag) {
time = System.currentTimeMillis() - start;
for (Reservation res : ec2.describeInstances().getReservations()) {
for (Instance ins : res.getInstances()) {
if(ins.getState().getName().equalsIgnoreCase("running") || time == MAX_TIME_FOR_THREAD){
System.out.println(ins.getPublicDnsName()+"#########"+ins.getInstanceId());
flag = false;
break;
}
}
}
}但是在线程的运行中,当我创建多个ec2资源时,它会多次返回first up机器的dns,而我觉得它应该返回不同的dns地址。
发布于 2012-07-20 15:36:17
在实例转换到“Running”状态和正在分配的公共IP地址(以及公共DNS名称)之间总是会有轻微的延迟-如果您还在自动分配弹性IP,则会有更长的延迟。在繁忙的集群上,它可以从一两秒到5-10秒不等。
你别无选择,只能在查询应用程序接口之前检测到'Running‘状态后引入一个短暂的延迟--尽管在你的代码中,你实际上并没有等待足够长的时间让实例进入'Running’状态,只是点击了MAX_TIME_FOR_THREAD,有趣的是,它会返回检索到的最后一个DNS名称。这实际上可能是您正在使用的API中的一个小故障。
在我的启动器(针对.NET应用程序接口编写的)中,我有一个多线程的分段循环,它启动实例,然后休眠等待每个实例注册为“运行”,然后再休眠等待IP地址填充。
https://stackoverflow.com/questions/11574670
复制相似问题