2011-10-04 5 views
8

Java에서 Amazon EC2 API를 사용하기 시작했습니다.EC2 Java Api Ec2 인스턴스가 생성 될 때까지 기다립니다.

나는 ec2.runInstances (runInstancesRequest)를 사용하여 인스턴스를 만들었습니다.

하지만 인스턴스를 시작하는 데 약간의 시간이 걸립니다 (일반적으로 1-2 분). Java EC2 API를 통해 컴퓨터의 공개 DNS를 가져와야합니다.

인스턴스가 "보류 중"상태에서 "처리됨"상태로 변경되는시기를 어떻게 알 수 있습니까? 또한 EC2 API를 통해 EC2 인스턴스의 공개 DNS를 얻는 방법은 무엇입니까?

미리 감사드립니다. 칸나

+0

쉘 사용자에 대한 비슷한 질문 http://stackoverflow.com/questions/2644742/getting-id-of-an-instance-newly-launched-with-ec2-api-tools가 유의 함 대답은 똑같습니다. 설문 조사를 반복해야합니다. 감사합니다. @Jonners. – bortzmeyer

답변

9

EC2 개체가 상태를 변경할 때 알려주는 SDK에 의해 생성 된 이벤트 모델이나 다른 신호가 없습니다. 반복적으로 개체에 DescribeXXXXXXXX 호출을 발행하는 방법 밖에 없습니다 상태 필드가 변경 될 때까지 30 초마다

통화가 실행되고 응답하기위한 최소 시간이 한정되어 있으므로 이전 요청이 완료되기 전에 요청을 시작하지 않는 간격을 찾아야합니다. 아니면 단순히 응답을 기다린 다음 다시 'n'초 후에 통화를 다시 발행하십시오. 또한 응답 사이의 시간이 맞더라도 빠른 요청으로 AWS API를 스팸하지 않으려합니다. 내 컨트롤러 응용 프로그램에서 30 초 간격을 설정하고 요청을 발급 한 다음 응답을 기다린 다음 해당 간격에서 경과 된 시간을 빼고 그 시간 동안 기다립니다. 다중 쓰레드 모델에서는 로컬 CPU 또는 API를 사용하지 않고 여러 객체의 상태 변화를 동시에 추적 할 수 있습니다.

일단 상태 변경이 감지되면 (새로운 상태가 예상되면 - 고장 모드를 처리하는 것을 잊지 말것) 공용 DNS 주소를 포함한 다양한 설명 정보를 얻을 수 있습니다 (이 경우 인스턴스 객체)를 API 응답 객체에 반환 된 구조에서 가져옵니다.

+0

나는 그것을 가능하게 만들 수 있었다. 당신의 도움을 주셔서 감사합니다. – kanap008

-1

실제로 POLL을 사용하여 인스턴스의 상태를 확인할 수 있습니다. 여기에 Bash 코드가 있습니다. JAVA에 적용하십시오. Java SDK에서 비슷한 명령을 사용하여 Java에서 Bash를 실행하지 않아도됩니다. 'ec2-describe-instances'명령은 Amazon AWS CLI에서 가져옵니다. 인스턴스가 '보류 중'인지 테스트하기 위해 실행중인 상태를 기다리는 함수 또는 메소드를 시작합니다. 시작하지 않거나 '보류 중'인 경우 실패합니다. 그런 다음 시간을 기록하고 최대 값을 3 분으로하고 루프에서 '실행 중'상태를 폴링하여 3 분 제한을 확인합니다. '시작되지 않음', '시작 시간 초과'또는 '실행 중'중 먼저 오는 쪽을 호출 지점으로 돌아갑니다.

setInstanceStatus() { 
    instanceStatus=`ec2-describe-instances $INSTANCE_ID -C $CERTIFICATE_FILE -K $PRIVATE_KEY --region $REGION -U $AWS_URL` 

    is_pending="`echo $instanceStatus|grep -c " pending "`" 
    is_running="`echo $instanceStatus|grep -c " running "`" 
    is_shutting_down="`echo $instanceStatus|grep -c " shutting-down "`" 
    is_terminated="`echo $instanceStatus|grep -c " terminated "`" 
    is_stopping="`echo $instanceStatus|grep -c " stopping "`" 
    is_stopped="`echo $instanceStatus|grep -c " stopped "`" 

    if [ "$is_pending" -eq "1" ]; then 
    status="pending" 
    elif [ "$is_running" -eq "1" ]; then 
    status="running" 
    elif [ "$is_shutting_down" -eq "1" ]; then 
    status="shutting-down" 
    elif [ "$is_terminated" -eq "1" ]; then 
    status="terminated" 
    elif [ "$is_stopping" -eq "1" ]; then 
    status="stopping" 
    elif [ "$is_stopped" -eq "1" ]; then 
    status="stopped" 
    else 
    status="bad-instance-state" 
    fi 
} 
관련 문제