প্রথমত, বিদ্যমান উত্তরগুলির সাথে নিম্নলিখিত সূক্ষ্ম সমস্যার কারণে এবং @ কিয়ার্তজগুইয়ের উত্তর সম্পর্কে আমার মন্তব্য সম্পর্কে একটি প্রশ্ন পাওয়ার পরে আমি একটি নতুন উত্তর পোস্ট করার প্রয়োজনীয়তা অনুভব করেছি । বর্তমান উত্তরগুলির সাথে সমস্যাগুলি এখানে:
- গৃহীত উত্তর @MatthieuCerda থেকে স্পষ্টভাবে নির্ভরযোগ্যভাবে কাজ না করে, অন্তত কোনো VPC দৃষ্টান্ত আমার বিরুদ্ধে চেক করা নয়। (আমার উদাহরণস্বরূপ, আমি একটি ভিপিসি নাম পেয়েছি
hostname -d
, যা অভ্যন্তরীণ ডিএনএসের জন্য ব্যবহৃত হয়, এতে "অ্যামাজনওস ডটকম" দিয়ে কিছুই নয়))
- সর্বোচ্চ ভোট উত্তর @qwertzguy থেকে নতুন M5 অথবা C5 দৃষ্টান্ত না কাজ করে , যা এই ফাইল হবে না। অ্যামাজন এএএআইএকি-র আচরণের পরিবর্তনটিকে দলিল করতে অবহেলা করে, যদিও এই বিষয়ে ডক পৃষ্ঠায় "... যদি / সিএস / হাইপারভাইজার / ইউইইডি উপস্থিত থাকে ..." বলে থাকে। আমি এই পরিবর্তন ইচ্ছাকৃত কিনা এডাব্লুএস সমর্থন জিজ্ঞাসা করেছি, নীচে দেখুন †।
- @Jer থেকে উত্তর কারণ অগত্যা সর্বত্র কাজ করে না
instance-data.ec2.internal
DNS খোঁজ কাজ নাও করতে পারে। একটি উবুন্টু ইসি 2 ভিপিসি উদাহরণে আমি সবেমাত্র পরীক্ষা করেছি, আমি দেখছি:
$ curl http://instance-data.ec2.internal
curl: (6) Could not resolve host: instance-data.ec2.internal
যে কারণে কোডটি এই পদ্ধতির উপর নির্ভর করে ভ্রান্তভাবে সিদ্ধান্ত নিতে পারে যে এটি ইসি 2 তে নয়!
- উত্তর ব্যবহার করতে
dmidecode
@tamale থেকে কাজ করতে পারে, কিন্তু আপনি একটি উপর নির্ভর করে।) এটি dmidecode
আপনার উদাহরণস্বরূপ, এবং b পাওয়া যায়।) রুট বা না থাকার sudo
আপনার কোড মধ্যে থেকে পাসওয়ার্ড কম ক্ষমতা।
- উত্তর / sys / ডিভাইস চেক করতে / ভার্চুয়াল / DMI / আইডি / bios_version @spkane থেকে বিপজ্জনকভাবে বিভ্রান্তিকর হয়! আমি এক উবুন্টু 14.04 M5 উদাহরণস্বরূপ চেক করা, এবং একটি পেয়েছিলাম
bios_version
এর 1.0
। এই ফাইলটি অ্যামাজনের ডকের কোনও নথিভুক্ত নয় , তাই আমি সত্যিই এটির উপর নির্ভর করব না।
- অবিশ্বাস্য তৃতীয় পক্ষের ইউআরএল পরীক্ষা করতে এবং ফলাফলটি ব্যবহার করতে @ ক্রিস-মন্টানারো থেকে উত্তরটির প্রথম অংশটি
whois
বেশ কয়েকটি স্তরে সমস্যাযুক্ত। এই উত্তরে প্রস্তাবিত ইউআরএল এখনই একটি 404 পৃষ্ঠা! এমনকি যদি আপনি কোনও তৃতীয় পক্ষের পরিষেবাটি কাজ করেও খুঁজে পান তবে এটি তুলনামূলকভাবে খুব ধীর হবে (স্থানীয়ভাবে কোনও ফাইল চেক করার তুলনায়) এবং সম্ভবত রেট-সীমাবদ্ধ সমস্যা বা নেটওয়ার্কের সমস্যাগুলিতে চালিত হবে বা সম্ভবত আপনার ইসি 2 উদাহরণটিও নেই নেটওয়ার্ক অ্যাক্সেস বাইরে।
- দ্বিতীয় প্রস্তাব @ ক্রিস-Montanaro থেকে উত্তর চেক করতে http://169.254.169.254/ কিছুটা ভালো, কিন্তু অন্য মন্তব্যকারী নোট যে অন্য ক্লাউড প্রদানকারীর এই ক্ষেত্রটিকেই মেটাডেটা URL টি প্রাপ্তিসাধ্য না, তাই আপনি মিথ্যা এড়াতে সতর্ক হতে হবে ইতিবাচক। এছাড়াও এটি স্থানীয় ফাইলের তুলনায় এখনও অনেক ধীর হবে, আমি ভারী ভারী দৃষ্টান্তগুলিতে এই চেকটি বিশেষত ধীর (ফিরে আসতে বেশ কয়েক সেকেন্ড) হতে দেখেছি। এছাড়াও, আপনার মনে রাখতে হবে এটি খুব দীর্ঘ সময়ের জন্য ঝুলন্ত এড়ানোর জন্য কার্ল করার জন্য
-m
বা --max-time
যুক্তিটি পাস করার কথা মনে রাখতে হবে , বিশেষত কোনও ইসি-নয় এমন উদাহরণে যেখানে এই ঠিকানাটি কোথাও না যেতে পারে এবং স্তব্ধ হয়ে যায় ( @ অ্যালগালের উত্তর হিসাবে )।
এছাড়াও, আমি দেখতে পাচ্ছি না যে কেউ (সম্ভাব্য) ফাইলটি পরীক্ষা করার জন্য অ্যামাজনের ডকুমেন্টেড ফ্যালব্যাক উল্লেখ করেছে /sys/devices/virtual/dmi/id/product_uuid
।
কে জানত যে আপনি ইসি 2 তে চালাচ্ছেন কিনা তা নির্ধারণ করা এত জটিল হতে পারে ?! ঠিক আছে, এখন তালিকাভুক্ত পদ্ধতির সাথে আমাদের বেশিরভাগ সমস্যা রয়েছে (তালিকাভুক্ত), আপনি ইসি 2 তে চালাচ্ছেন কিনা তা যাচাই করার জন্য এখানে একটি প্রস্তাবিত বাশ স্নিপেট রয়েছে। আমি মনে করি এটি প্রায় কোনও লিনাক্স উদাহরণগুলিতে কাজ করা উচিত, উইন্ডোজ উদাহরণগুলি পাঠকের জন্য অনুশীলন।
#!/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
"ইক্য 2" দিয়ে সুযোগের ফলে শুরু হওয়া থেকে মিথ্যা পজিটিভ ইত্যাদি on তবে এটি উদাহরণের উদ্দেশ্যে এবং সম্ভবত প্রায় সমস্ত অ-প্যাথলজিকাল ব্যবহারের ক্ষেত্রে যথেষ্ট পরিমাণে সমাধান।
[†] সি 5 / এম 5 উদাহরণগুলির জন্য পরিবর্তন সম্পর্কে AWS সমর্থন থেকে এই ব্যাখ্যাটি ফিরে পেয়েছেন:
C5 এবং M5 দৃষ্টান্তগুলি একটি নতুন হাইপারভাইজার স্ট্যাক ব্যবহার করে এবং সংশ্লিষ্ট কার্নেল ড্রাইভারগুলি সিএসএফগুলিতে ফাইল তৈরি করে না (যা / সিস্টেমে মাউন্ট করা হয়) যেমন অন্যান্য / পুরানো ইনস্ট্যান্স প্রকারের দ্বারা ব্যবহৃত জেন ড্রাইভারগুলি করে । ইসি 2 উদাহরণে অপারেটিং সিস্টেমটি চলছে কিনা তা সনাক্ত করার সর্বোত্তম উপায় হ'ল আপনার লিঙ্কযুক্ত ডকুমেন্টেশনে তালিকাভুক্ত বিভিন্ন সম্ভাবনার জন্য অ্যাকাউন্ট করা ।