1

如何在 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 资源时,它会多次返回第一台机器的 dns,因为我觉得它应该返回不同的 dns 地址。

4

1 回答 1

0

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

除了在查询 API 之前检测到“正在运行”状态后引入短暂的延迟之外,您无能为力 - 尽管在您的代码中,您实际上并没有等待足够长的时间让实例进入“正在运行”并且只需点击 MAX_TIME_FOR_THREAD,即有趣的是返回最后检索到的 DNS 名称。这实际上可能是您正在使用的 API 中的一个小故障。

在我的启动器(针对 .NET API 编写)中,我有一个多线程暂存循环,它启动实例,然后休眠等待每个实例注册为“正在运行”,然后进一步休眠等待 IP 地址填充。

于 2012-07-20T07:36:17.083 回答