2012-07-20 5 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

답변

0

'실행 중'상태로 전환되는 인스턴스와 공용 IP 주소 (따라서 공개 DNS 이름)가 할당되는 사이에는 항상 약간의 지연이 있습니다. 또한 자동으로 Elastic IP . 사용량이 많은 클러스터에서는 초 또는 2 초에서 5 ~ 10 초까지 다양합니다.

API를 쿼리하기 전에 '실행 중'상태를 감지 한 후 잠시 지연 될 수 있습니다. 코드에서 실제로 '실행 중'으로 진행하고 실제로 만지기를 기다리지는 않지만 MAX_TIME_FOR_THREAD, 흥미롭게도 검색된 마지막 DNS 이름을 반환합니다. 이는 실제로 사용중인 API의 작은 결함 일 수 있습니다.

(.NET API에 대해 작성된) 내 실행 프로그램에 인스턴스를 시작한 멀티 스레드 스테이징 루프가 있고 각 노드가 '실행 중'으로 등록 될 때까지 기다린 다음 IP 주소를 기다리는 수면 시간이 더 있습니다. 채우다.

+0

나는 정확하게 ip를 얻고 있지만 one.I에 대한 모든 객체를 쓰는 중이며 모든 것은 내부에서 초기화되고 두 개의 스레드를 초기화하지만 두 개의 스레드를 실행 한 후에 동일한 IP를 얻는다. 실행중인 첫 번째 시스템의 공용 DNS를 반환합니다. – BiswajitP