सबसे पहले, मैंने मौजूदा उत्तरों के साथ निम्नलिखित सूक्ष्म समस्याओं के कारण एक नया उत्तर पोस्ट करने की आवश्यकता महसूस की, और @ क्वर्टज़्गी के उत्तर पर मेरी टिप्पणी के बारे में एक प्रश्न प्राप्त करने के बाद । यहां वर्तमान उत्तरों के साथ समस्याएं हैं:
- स्वीकार किए जाते हैं जवाब @MatthieuCerda से निश्चित रूप से मज़बूती से काम नहीं करता है, कम से कम किसी भी VPC उदाहरणों मैं विरुद्ध जांच पर नहीं। (मेरे उदाहरणों पर, मुझे इसके लिए एक VPC नाम मिलता है
hostname -d
, जिसका उपयोग आंतरिक DNS के लिए किया जाता है, इसमें "amazonaws.com" के साथ कुछ भी नहीं है।)
- उच्चतम मतदान जवाब @qwertzguy से नई M5 या सी 5 उदाहरणों पर नहीं काम करता है , जो इस फ़ाइल नहीं है। Neglects इस व्यवहार परिवर्तन AFAIK दस्तावेज़ के लिए, हालांकि अमेज़न डॉक पेज को इस विषय पर कहना है "... तो / sys / हाइपरविजर / UUID मौजूद है ..."। मैंने AWS से पूछा कि क्या यह बदलाव जानबूझकर किया गया था, नीचे देखें whether
- @Jer का उत्तर आवश्यक रूप से हर जगह काम नहीं करता है क्योंकि
instance-data.ec2.internal
DNS लुकअप काम नहीं कर सकता है। एक Ubuntu EC2 VPC उदाहरण पर मैंने अभी-अभी परीक्षण किया है, मैं देखता हूं:
$ curl http://instance-data.ec2.internal
curl: (6) Could not resolve host: instance-data.ec2.internal
जो इस पद्धति पर भरोसा करते हुए कोड को गलत तरीके से समाप्त करने का कारण बनेगा वह EC2 पर नहीं है!
- जवाब का उपयोग करने के
dmidecode
@tamale से काम कर सकते हैं, लेकिन आप एक पर निर्भर करता है।) होने dmidecode
पर अपने उदाहरण है, और ख उपलब्ध।) रूट या होने sudo
के लिए अपने कोड के भीतर से पासवर्ड से कम क्षमता।
- इस सवाल का जवाब / sys / उपकरणों की जांच करने / आभासी / डीएमआई / आईडी / bios_version @spkane से खतरनाक तरीके से भ्रामक है! मैं एक Ubuntu 14.04 M5 उदाहरण जाँच की, और एक मिल गया
bios_version
की 1.0
। यह फ़ाइल अमेज़ॅन के डॉक पर बिल्कुल भी प्रलेखित नहीं है , इसलिए मैं वास्तव में इस पर भरोसा नहीं करूंगा।
- @ क्रिस-मोंट्रो से जवाब का पहला हिस्सा एक अविश्वसनीय 3-पार्टी यूआरएल की जांच करने और
whois
परिणाम पर उपयोग करने के लिए कई स्तरों पर समस्याग्रस्त है। ध्यान दें कि उस उत्तर में सुझाया गया URL अभी 404 पेज का है! यहां तक कि अगर आपको एक 3-पार्टी सेवा मिली जो काम करती है, तो यह तुलनात्मक रूप से बहुत धीमी होगी (स्थानीय रूप से किसी फ़ाइल की जांच करने की तुलना में) और संभवतः दर-सीमित मुद्दों या नेटवर्क के मुद्दों में चलती है, या संभवतः आपके EC2 उदाहरण में भी नहीं है बाहर नेटवर्क का उपयोग।
- में दूसरा सुझाव @ क्रिस-Montanaro से जवाब की जांच करने के http://169.254.169.254/ थोड़ा बेहतर है, लेकिन एक और टिप्पणीकार नोटों कि अन्य क्लाउड प्रदाताओं इस उदाहरण मेटाडेटा URL उपलब्ध बनाने है, तो आप गलत से बचने के लिए सावधान रहना होगा सकारात्मक। इसके अलावा यह अभी भी एक स्थानीय फ़ाइल की तुलना में बहुत धीमा होगा, मैंने देखा है कि यह चेक विशेष रूप से धीमी गति से (कई सेकंड लौटने के लिए) भारी लोड वाले उदाहरणों पर है। इसके अलावा, आपको इसे लंबे समय तक लटकाए रखने से बचने के लिए कर्ल
-m
या --max-time
तर्क पारित करने के लिए याद रखना चाहिए , विशेष रूप से गैर-ईसी 2 उदाहरण पर जहां यह पता चल सकता है और लटका हुआ है (जैसा कि @ एगल के जवाब में )।
इसके अलावा, मैं नहीं देखता कि किसी ने भी (संभव) फाइल के लिए अमेजन के डॉक्यूमेंटेड फालबैक ऑफ चेकिंग का उल्लेख किया है /sys/devices/virtual/dmi/id/product_uuid
।
कौन जानता था कि यह निर्धारित करना कि क्या आप EC2 पर चल रहे हैं, इतना जटिल हो सकता है ?! ठीक है, अब हमारे पास (अधिकांश) सूचीबद्ध दृष्टिकोणों के साथ समस्याएं हैं, यहां यह जांचने के लिए सुझाव दिया गया है कि क्या आप EC2 पर चल रहे हैं। मुझे लगता है कि यह आमतौर पर लगभग किसी भी लिनक्स उदाहरण पर काम करना चाहिए, विंडोज उदाहरण पाठक के लिए एक अभ्यास है।
#!/bin/bash
# This first, simple check will work for many older instance types.
if [ -f /sys/hypervisor/uuid ]; then
# File should be readable by non-root users.
if [ `head -c 3 /sys/hypervisor/uuid` == "ec2" ]; then
echo yes
else
echo no
fi
# This check will work on newer m5/c5 instances, but only if you have root!
elif [ -r /sys/devices/virtual/dmi/id/product_uuid ]; then
# If the file exists AND is readable by us, we can rely on it.
if [ `head -c 3 /sys/devices/virtual/dmi/id/product_uuid` == "EC2" ]; then
echo yes
else
echo no
fi
else
# Fallback check of http://169.254.169.254/. If we wanted to be REALLY
# authoritative, we could follow Amazon's suggestions for cryptographically
# verifying their signature, see here:
# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html
# but this is almost certainly overkill for this purpose (and the above
# checks of "EC2" prefixes have a higher false positive potential, anyway).
if $(curl -s -m 5 http://169.254.169.254/latest/dynamic/instance-identity/document | grep -q availabilityZone) ; then
echo yes
else
echo no
fi
fi
जाहिर है, आप इसे और भी अधिक कमियों की जांच के साथ विस्तारित कर सकते हैं, और संचलन के बारे में व्यामोह को शामिल कर सकते हैं जैसे /sys/hypervisor/uuid
संयोग से "ec2" से शुरू होने से एक झूठी सकारात्मक और इतने पर। लेकिन यह दृष्टांत उद्देश्यों के लिए एक अच्छा पर्याप्त समाधान है और शायद लगभग सभी गैर-रोग-संबंधी उपयोग के मामले हैं।
[About] CWS / m5 उदाहरणों के परिवर्तन के बारे में AWS समर्थन से इस स्पष्टीकरण को वापस लें:
C5 और M5 इंस्टेंसेस एक नए हाइपरवाइज़र स्टैक का उपयोग करते हैं और संबंधित कर्नेल ड्राइवर sysfs (जो कि / sys पर आरोहित है) में फाइल नहीं बनाते हैं जैसा कि अन्य / पुराने इंस्टेंस प्रकारों द्वारा उपयोग किए जाने वाले Xen ड्राइवर करते हैं । यह पता लगाने का सबसे अच्छा तरीका है कि ऑपरेटिंग सिस्टम ईसी 2 उदाहरण पर चल रहा है या नहीं, आपके द्वारा जुड़े दस्तावेज़ में सूचीबद्ध विभिन्न संभावनाओं के लिए जिम्मेदार है ।