2012-07-20 120 views
1

如何在amazonEC2中获取PublicDnsName? 我们可以使用ins.getPublicDnsName()从实例中获取它,但它会在一段时间后创建,有没有其他方法可以获得它? 或者一些它是如何得到它一旦生成? 为使得它等待我做Amazon EC2 PublicDnsName

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资源是第一回上机多次在那里,因为我觉得它应该返回不同的DNS地址的DNS。

+0

没有理由认为新创建的实例在请求时拥有* IP权限。实例请求几乎肯定会进入一个队列,并且Amazon仅在分配IP时才会在请求发出时开始处理某些(小)时间。 – phs 2012-07-20 07:29:00

回答

0

转换到“正在运行”状态的实例和公共IP地址(以及公共DNS名称)之间总是有一点点延迟 - 如果您还自动分配弹性IP 。在繁忙的群集中,它可以从一秒或两秒到五秒到五秒不等。

没有什么可以做的,但是在查询API之前检测到'Running'状态之后引入一个很短的延迟 - 尽管在你的代码中你实际上并没有等待足够长的时间让实例进入'Running',只是点击MAX_TIME_FOR_THREAD,它有趣地返回检索到的最后一个DNS名称。这可能实际上是您使用的API中的一个小故障。我有一个多线程的分段循环启动实例,然后等待每一个睡眠等待注册为'正在运行',然后进一步睡眠等待IP地址为填充。

+0

我正在得到正确的IP,但为one.I正在写所有对象的线程运行的一切,一切都初始化内运行,我初始化两个线程调用,但在两个线程运行完成后得到相同的IP。它是在运行状态下返回第一台机器的公共dns。 – BiswajitP 2012-07-20 11:02:38