क्या उदाहरण के भीतर से एक उदाहरण के क्षेत्र को देखने का एक तरीका है?
मैं उदाहरण आईडी खोजने की विधि के समान कुछ खोज रहा हूं ।
http://169.254.169.254/latest/meta-data/placement/availability-zoneअंतिम क्षेत्र से उपलब्धता ज़ोन प्राप्त करें और निकालें।
क्या उदाहरण के भीतर से एक उदाहरण के क्षेत्र को देखने का एक तरीका है?
मैं उदाहरण आईडी खोजने की विधि के समान कुछ खोज रहा हूं ।
http://169.254.169.254/latest/meta-data/placement/availability-zoneअंतिम क्षेत्र से उपलब्धता ज़ोन प्राप्त करें और निकालें।
जवाबों:
वह URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) अब काम नहीं करता है। मुझे एक 404 मिलता है जब मैंने इसका उपयोग करने की कोशिश की। मेरे पास निम्नलिखित कोड हैं जो हालांकि काम करते हैं:
EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
उम्मीद है की यह मदद करेगा।
संपादित करें:sed टिप्पणियों के आधार पर सुधार हुआ
ec2-metadataइस एपीआई के लिए सिर्फ एक आवरण है, लेकिन अनिवार्य रूप से एक ही काम करता है।
sed 's/[a-z]$//
इसे प्राप्त करने का एक और तरीका है:
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
echo $REGION
us-east-1
404 - Not Foundकोशिश कर रहा हूँ । GETus-east-1a
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
ec2-metadata --availability-zone | sed 's/.$//'
डेबियन आधारित प्रणालियों के लिए, कमांड डैश के बिना है।
ec2metadata --availability-zone | sed 's/.$//'
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadataऐसा प्रतीत नहीं होता कि कुछ डिफ़ॉल्ट रूप से उपलब्ध है - क्या आप इंस्टॉलेशन निर्देश शामिल कर सकते हैं?
यदि आप नियमित अभिव्यक्ति से बचना चाहते हैं, तो यहां एक-लाइनर है जिसे आप पायथन के साथ कर सकते हैं:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']"
आप ec2-मेटाडेटा का उपयोग कर सकते हैं:
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
eu-central-1खराब हैं।
centralजब मैंने शुरू में अपना उत्तर लिखा था, तब मौजूद नहीं था। यह अब जोड़ा गया है।
awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'AZ नाम के सिर्फ पहले दो घटक रखेंगे।
eu-west-1, eu-west-2और eu-west-3(भी us-west-1और us-west-2) @OP: बस मिलान '[a-z][a-z]-[a-z]*-[0-9][0-9]*'सुरक्षित प्रतीत होता है (यह एक मूल regex है, इसे विस्तारित RE के साथ छोटा किया जा सकता है)। (वर्तमान रेगेक्स इस caक्षेत्र, afक्षेत्रों और क्षेत्र पर टूट जाएगा me)
सबसे आसान मैं अब तक पाया
curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'
बहुत सरल एक लाइनर
export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}
curl: (6) Could not resolve host: instance-data; Name or service not knownत्रुटि देता है।
यदि आपने jq स्थापित किया है, तो आप इसके बारे में भी जा सकते हैं (शायद सबसे "सुंदर" विधि) इस तरह से:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .region
यह बस "क्षेत्र" के कच्चे मूल्य को बिना किसी सुंदर-छपाई या अन्य स्वरूपण के लौटाता है। संदर्भ: AWS फोरम
यदि आप AWS Java SDK का उपयोग करने में सक्षम हैं, तो अब एक विधि है जो वर्तमान क्षेत्र का नाम (जैसे "us-East-1", "eu-west-1") लौटाएगी:
यह मैंने पाया सबसे साफ समाधान है:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
उदाहरण के लिए,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
Https://unix.stackexchange.com/a/144330/135640 के लिए धन्यवाद , bash 4.2+ के साथ हम उपलब्धता क्षेत्र से अंतिम चार्ट को हटा सकते हैं:
$ region=`curl -s 169.254.169.254/latest/meta-data/placement/availability-zone`
$ region=${region::-1}
$ echo $region
us-east-1
यह मानता है कि एडब्ल्यूएस क्षेत्र के लिए उपलब्ध उपलब्धता क्षेत्रों के लिए एक ही चरित्र का उपयोग करना जारी रखता है।
region=${region%?}
या उबंटू या इस उपकरण को एक आवश्यकता न बनाएं और बस करें:
: "${EBS_VOLUME_AVAILABILITY_ZONE:=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)}"
: ${EBS_VOLUME_REGION:="${EBS_VOLUME_AVAILABILITY_ZONE%%*([![:digit:]])}"}
यह यूरोपीय-केंद्रीय -1 और साथ ही विभिन्न पत्र क्षेत्रों के लिए काम करता है। (मेरे पास ऊपर दिए गए जवाब का जवाब देने के लिए पर्याप्त प्रतिनिधि नहीं है)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
ec2metadata --availability-zone | sed 's/.$//'(बिना डैश के) होना चाहिए
यह भी उदाहरण से क्षेत्र खोजने के लिए एक समाधान के लिए देख रहा था और यहाँ मेरा शुद्ध बैश समाधान है:
az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
region=${az:0:${#az}-1}
जब तक कि ऐसे क्षेत्र नहीं हैं जहाँ AZ के दो से अधिक अक्षर हैं, जिनके बारे में मुझे जानकारी नहीं है।
आपके द्वारा लॉग इन किए गए EC2 के बारे में जानकारी प्राप्त करने के लिए, आप ec2-मेटाडाटा टूल का उपयोग कर सकते हैं।
आप इस लिंक पर जाकर टूल को इंस्टॉल कर सकते हैं । टूल इंस्टॉल करने के बाद, आप चला सकते हैं
# ec2-metadata -z
इस क्षेत्र का पता लगाने के लिए।
यह उपकरण नवीनतम (10.10) उबंटू एएमआई के साथ स्थापित होता है,
ec2-metadata -zकेवल उपलब्धता क्षेत्र दिखाता है, न कि क्षेत्र।
यदि आप JS का उपयोग करके क्षेत्र प्राप्त करना चाहते हैं, तो यह काम करना चाहिए:
meta.request("/latest/meta-data/placement/availability-zone",function(err,data){
if(err)
console.log(err);
else{
console.log(data);
str = data.substring(0, data.length - 1);
AWS.config.update({region:str});
ec2 = new AWS.EC2();
}
});
यह एडब्ल्यूएस डॉक्स से मिली मैपिंग थी, मेटाडेटा एपीआई कॉल के जवाब में, बस अंतिम चरित्र को ट्रिम करना चाहिए।
eu-west-1a :eu-west-1
eu-west-1b :eu-west-1
eu-west-1c :eu-west-1
us-east-1a :us-east-1
us-east-1b :us-east-1
us-east-1c :us-east-1
us-east-1d :us-east-1
ap-northeast-1a :ap-northeast-1
ap-northeast-1b :ap-northeast-1
us-west-1a :us-west-1
us-west-1b :us-west-1
us-west-1c :us-west-1
ap-southeast-1a :ap-southeast-1
ap-southeast-1b :ap-southeast-1
ec2metadata(कोई पानी का छींटा) आप अपने सभी ec2 बॉक्स के बारे में जानकारी होस्ट करने वाले सभी aws प्रदान करने के लिए वर्तमान आदेश है। यह सबसे सुरुचिपूर्ण और सुरक्षित दृष्टिकोण है। ( ec2-metadataपुराना है, अब मान्य आदेश नहीं है।)
केवल egrep का उपयोग करने का एक तरीका, जो कि किसी भी अतिरिक्त टंकण को स्थापित किए बिना, किसी भी लिनक्स उदाहरण पर काम करना चाहिए। मैंने सभी मौजूदा AWS क्षेत्रों की सूची के खिलाफ यह परीक्षण किया और वे सभी मेल खाते हैं।
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
कुछ बिंदुओं पर जब से इनमें से अधिकांश उत्तर पोस्ट किए गए हैं, AWS ने उचित काम किया और एक नया रास्ता लागू किया latest/meta-data/placement/region:।
इसका मतलब है कि यह क्षेत्र उतना ही सरल होना चाहिए जितना कि होना चाहिए
REGION="$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/region)"
आपको इस कर्ल अनुरोध का उपयोग करके उदाहरण क्षेत्र मिल सकता है
$ curl http://169.254.169.254/latest/meta-data/placement/region
us-east-1