2011-10-04 18 views
8

मैंने अभी जावा में अमेज़ॅन ईसी 2 एपीआई का उपयोग करना शुरू कर दिया है।ईसी 2 जावा एपी ई 2 इंस्टेंस बनने तक प्रतीक्षा करें।

मैंने ec2.runInstances (runInstancesRequest) का उपयोग करके उदाहरण बनाए हैं;

लेकिन उदाहरण के लिए लॉन्च होने में कुछ समय लगेगा (आमतौर पर 1-2 मिनट)। मुझे जावा ईसी 2 एपीआई के माध्यम से मशीन का सार्वजनिक DNS प्राप्त करने की आवश्यकता है।

मुझे कैसे पता चलेगा कि "लंबित" स्थिति से "संसाधित" स्थिति में परिवर्तन कब बदलते हैं, और मैं ईसी 2 एपीआई के माध्यम से ईसी 2 आवृत्ति के सार्वजनिक DNS कैसे प्राप्त कर सकता हूं।

अग्रिम धन्यवाद। कन्ना

+0

ध्यान दें करो खोल उपयोगकर्ताओं के लिए एक समान प्रश्न http://stackoverflow.com/questions/2644742/getting-id-of-an-instance-newly-launched-with-ec2-api-tools है और जवाब वही है, आपको मतदान करना होगा (बार-बार परीक्षण करना)। – bortzmeyer

उत्तर

9

एसडीके द्वारा उठाए गए कोई इवेंट मॉडल या अन्य सिग्नल नहीं है जो आपको बताएगा कि ईसी 2 ऑब्जेक्ट राज्य कब बदलता है - एकमात्र तरीका यह पता लगाने का एकमात्र तरीका है कि DescribeXXXXXXXX ऑब्जेक्ट पर बार-बार आधार पर कॉल करें, एक बार कहें प्रत्येक 30 सेकंड, जब तक राज्य क्षेत्र में परिवर्तन नहीं होता है।

कॉल निष्पादित करने और जवाब देने के लिए एक सीमित न्यूनतम समय है, इसलिए आपको एक अंतराल ढूंढना होगा जो पहले से पूरा होने से पहले अनुरोधों को आग नहीं देता है। या बस प्रतिक्रिया के लिए प्रतीक्षा करें, और फिर कॉल जारी करने से पहले एक और 'एन' सेकंड प्रतीक्षा करें। आप त्वरित अनुरोधों के साथ एडब्ल्यूएस एपीआई को स्पैम नहीं करना चाहते हैं, भले ही वे प्रतिक्रियाओं के बीच समयबद्ध हों। मेरे नियंत्रक अनुप्रयोग में, मैंने अंतराल को 30 सेकंड पर सेट किया है, अनुरोध जारी किया है, प्रतिक्रिया की प्रतीक्षा करें, और फिर अंतराल से विलुप्त समय घटाएं और लंबे समय तक सोएं। एक बहुप्रचारित मॉडल में, मैं अपने स्थानीय सीपीयू या एपीआई को मुद्रित किए बिना कई वस्तुओं पर राज्य परिवर्तनों को ट्रैक कर सकता हूं।

एक बार राज्य के परिवर्तन का पता चला है (और यह मानते हुए कि नया राज्य वह पहिया है जिसे आप उम्मीद करते हैं - विफलता मोड को संभालना न भूलें) आप विभिन्न प्रकार की वर्णनात्मक जानकारी प्राप्त कर सकते हैं, जिसमें सार्वजनिक DNS पता शामिल है (मामले में उदाहरण ऑब्जेक्ट्स) एपीआई प्रतिक्रिया ऑब्जेक्ट में लौटा संरचना से।

+0

धन्यवाद @ जोनर्स। मैं इसे काम करने में सक्षम था। आपकी सहायता के लिए धन्यवाद. – kanap008

-1

वास्तव में, आप एक उदाहरण की स्थिति जानने के लिए पोल कर सकते हैं। ऐसा करने के लिए यहां कुछ बैश कोड दिए गए हैं, बस इसे जावा में अनुकूलित करें। आपके पास जावा एसडीके में एक समान कमांड हो सकता है ताकि आपको जावा से बैश निष्पादित करने की आवश्यकता न हो। 'Ec2-description-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 
} 
संबंधित मुद्दे