কোনও যন্ত্র যদি ইসি 2 উদাহরণ হয় তা কীভাবে জানবেন


43

আমি হোস্টগুলিতে কিছু স্ক্রিপ্টগুলি চালিত করতে চাই যা ইসি 2 উদাহরণস্বরূপ তবে হোস্টটি সত্যই ইসি 2 উদাহরণ কিনা তা কীভাবে নিশ্চিত হওয়া যায় তা আমি জানি না ।

আমি কিছু পরীক্ষা করেছি, তবে এটি পর্যাপ্ত নয়:

  • পরীক্ষা করুন যে বাইনারি ec2_userdata উপলব্ধ (তবে এটি সর্বদা সত্য হবে না)
  • " Http://169.254.169.254/latest/meta-data " এর পরীক্ষা উপলব্ধতা (তবে এটি কি সর্বদা সত্য হবে? এবং এই "ম্যাজিকাল আইপি" কী?)


এটি আসলে একটি এপিআইপিএ ঠিকানা, যা মেটা ডেটা পুনরুদ্ধারের মতো সমালোচনামূলক পরিষেবার জন্য একটি রেফারেন্স হিসাবে ব্যবহার করা বেশ অদ্ভুত।
ম্যাথিউ সেরডা

2
ইসি 2 এর আইপি ব্যাপ্তিগুলি সর্বজনীন (যদিও সময়ে সময়ে পরিবর্তিত হয়)। আপনি যদি কোনও বর্তমান তালিকা ধরে রাখেন তবে আপনি সেই ব্যাপ্তির বিরুদ্ধে আইপি চেক করতে পারেন।
কর্মমা ফিউজবক্স

2
যদি আপনি ইসি 2 এবং কেবল ইসি 2 চান - ইউক্যালিপটাসের মতো ইসি 2-সমতুল্য সিস্টেমগুলিও এটি সমর্থন করে তবে 169.254.169.254 এর উপর নির্ভর করবেন না । eng.eucalyptus.com/customer/portal/articles/…
ceejayoz

1
হোস্টের মূল রয়েছে এমন আক্রমণকারীটির বিরুদ্ধে কাজ করার জন্য কি আপনার কী পদ্ধতিটি দরকার এবং আপনি এটির নিজের দূষিত উদ্দেশ্যে এটি ইসি 2 উদাহরণ হিসাবে ভেবে আপনাকে বোকা বানানোর চেষ্টা করছেন? আপনি যদি করেন, তবে এটি আরও শক্ত হবে।
মাইক স্কট

উত্তর:


3

আচ্ছা, হোস্টটি যদি ইসি 2 উদাহরণ হয় তা সনাক্ত করার একটি খুব সহজ উপায় রয়েছে: আপনার সার্বজনীন আইপির বিপরীত চেহারা দেখুন। ইসি 2 বিপরীতগুলি মিস করা বেশ শক্ত।

এছাড়াও, আপনি যদি এটি সংশোধন না করে থাকেন তবে হোস্ট-নেমটি আপনার বিপরীত হওয়া উচিত, এটি স্পট করা আরও সহজ করে তোলে।

আপনি যে "ম্যাজিকাল আইপি" সম্পর্কে কথা বলেছেন তাও ব্যবহার করতে পারেন, কারণ এটি ইসি 2 ইনস্ট্যান্স ট্যাগগুলি পাওয়ার আদর্শ উপায়, তবে আপনি যদি ইসি 2 নেটওয়ার্কে না থাকেন তবে আপনাকে সময়সীমা অপেক্ষা করতে হবে, যা সাধারণত হয় না কাঙ্ক্ষিত ...

যদি এই পদ্ধতিগুলি পর্যাপ্ত না হয় তবে কেবলমাত্র আপনার আইপি হুইস করুন এবং আপনি যদি অ্যামাজন ইসি 2 আইপি ব্লকের মধ্যে আছেন কিনা তা পরীক্ষা করে দেখুন।

সম্পাদনা: আপনি এই ছোট শেল বিটটি ব্যবহার করতে পারেন:

#!/bin/bash
LOCAL_HOSTNAME=$(hostname -d)
if [[ ${LOCAL_HOSTNAME} =~ .*\.amazonaws\.com ]]
then
        echo "This is an EC2 instance"
else
        echo "This is not an EC2 instance, or a reverse-customized one"
fi

সাবধান যদিও, [[বাশবাদ। আপনি পাইথন বা পার্ল ইউনিলাইন, ওয়াইএমএমভি ব্যবহার করতে পারেন।


13
এটি কোনও ভিপিসি বা এমন একটি পরিবেশে কাজ করে না যেখানে আপনি হোস্টের নাম পরিবর্তন করেছেন; যেমন। যদি আপনার মেশিনগুলি ডোমেইনে থাকে oc লোকাল
প্রিফ্লাইটশায়ারেন

2
হোস্টনাম বিটটি কেবলমাত্র ব্যর্থ হতে বাধ্য।
ড্যান প্রিটস

3
hostname -dরিটার্নeu-west-1.compute.internal
বুলেটম্যাগনেট

42

ত্রুটি বার্তাগুলি এড়াতে এবং স্ক্রিপ্টে উদাহরণস্বরূপ ব্যবহার অন্তর্ভুক্ত করার জন্য হ্যানসের উত্তর পরিবর্তিত হয়েছে:

if [ -f /sys/hypervisor/uuid ] && [ `head -c 3 /sys/hypervisor/uuid` == ec2 ]; then
    echo yes
else
    echo no
fi

এটি উইন্ডোজ দৃষ্টান্তগুলিতে কাজ করে না। কার্লের উপরে সুবিধা হ'ল এটি ইসি 2 এবং নন-ইসি 2 উভয়ের জন্য তাত্ক্ষণিকের কাছাকাছি।



3
আমি এই পদ্ধতিটি পছন্দ করি। কেবল সচেতন থাকুন যে হাইপারভাইজারের অধীনে চলমান একটি নন-ইসি 2 সিস্টেমটি একটি ইউইউডি তৈরি করতে পারে যা দিয়ে শুরু হয় ec2- একটি মিথ্যা ধনাত্মক। এটি অসম্ভব (1-ইন-256 চান্স) এবং কেবলমাত্র আপনি যদি হাইপারভাইজার ব্যবহার করছেন যা সেই ফাইলটিকে জনপ্রিয় করে তোলে। এজন্য উপরের লিঙ্কযুক্ত ডকুমেন্টেশনটি বলেছে যে "আপনি সম্ভবত কোনও ইসি উদাহরণ দেখছেন"।
নট

1
@ নাট, ভাল পয়েন্ট, তবে 4096 এর মধ্যে 1 হওয়া উচিত নয়? (16 x 16 x 16)
ওয়াইল্ডকার্ড

2
@ উইল্ডকার্ড: আমি আমার মন্তব্য সম্পাদনা করতে পারি না, তবে এটি ঠিক।
নাট

7
বিপদ! এই পদ্ধতিটি বছরের পর বছর ধরে আমাদের জন্য নির্ভরযোগ্যভাবে কাজ করেছিল ... সদ্য সাম্প্রতিক অবধি, সর্বশেষতম সি 5 এবং এম 5 ধরণের সাথে এই ফাইলটি উপস্থিত নেই । সুতরাং those দৃষ্টান্তগুলি পরিচালনা করতে আমাকে 169.254.169.254 এর ফ্যালব্যাক চেক যুক্ত করতে হবে।
জোশ কুপারশ্মিদিত

20

প্রথমত, বিদ্যমান উত্তরগুলির সাথে নিম্নলিখিত সূক্ষ্ম সমস্যার কারণে এবং @ কিয়ার্তজগুইয়ের উত্তর সম্পর্কে আমার মন্তব্য সম্পর্কে একটি প্রশ্ন পাওয়ার পরে আমি একটি নতুন উত্তর পোস্ট করার প্রয়োজনীয়তা অনুভব করেছি । বর্তমান উত্তরগুলির সাথে সমস্যাগুলি এখানে:

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


4
হ্যাঁ সহযাত্রী 2018 এ ... আপনি যে উত্তরটি খুঁজছিলেন তা এই।
রাসেলপিয়ার্স

পড়া / sys / ডিভাইস / ভার্চুয়াল / DMI / আইডি / এছাড়াও রুট পারমিশন প্রয়োজন product_uuid
Thayne

@ ঠিক আছে - elifব্লকের উপরের মন্তব্যটি এটাই বলেছে, এবং সে কারণেই elifপরীক্ষাটি -rপরীক্ষা অপারেটর ব্যবহার করে , যা ফাইলটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করে এবং আপনার কাছে ফাইলটির অনুমতি পড়ার অনুমতি রয়েছে।
জোশ কুপারশ্মিদট

169.254.169.254 মেটাডেটাতে একটি অতিরিক্ত নোট - এটি সর্বদা বুটের সময় প্রস্তুত হয় না। বুটসক্রিপ্টের জন্য যদি আপনার সেই মেটাডেটা দরকার হয় তবে আপনার পোলিং প্রস্তুত না হওয়া পর্যন্ত চালিয়ে যাওয়া দরকার। উদাহরণটি এর ক্লাউড-ডিআইএন বুটস্ক্রিপ্টগুলি চালানো শুরু করার পরে আমি এটি 30 সেকেন্ড পর্যন্ত সময় নিতে দেখেছি।
ভ্যাকারি

15

আইপির পরিবর্তে ইসি 2 অভ্যন্তরীণ ডোমেন নাম দ্বারা মেটাডেটা সন্ধান করুন, আপনি যদি ইসি 2 তে না হন তবে দ্রুত ডিএনএস ব্যর্থতা ফিরে আসবে এবং আইপি দ্বন্দ্ব বা রাউটিংয়ের বিষয়গুলি এড়িয়ে চলে:

curl -s http://instance-data.ec2.internal && echo "EC2 instance!" || echo "Non EC2 instance!"

কিছু ডিস্ট্রোজে, খুব বেসিক সিস্টেমগুলিতে বা খুব প্রথম দিকে ইনস্টলমেন্ট পর্যায়ে কার্ল পাওয়া যায় না। ব্যবহার wget হয় পরিবর্তে:

wget -q http://instance-data.ec2.internal && echo "EC2 instance!" || echo "Non EC2 instance!"

4
দুর্ভাগ্যক্রমে, ভিপিসিতে ব্যর্থ বলে মনে হচ্ছে!
আশে

2
এছাড়াও উদ্ধৃতি চিহ্ন ভিতরে বিস্ময়বোধক চিহ্ন চরিত্র ব্যবহার করবেন না - আপনার প্রতিধ্বনি উড়িয়ে পারে সঙ্গে -bash: !": event not foundechoপরিবর্তে সেইগুলির জন্য একক উদ্ধৃতি ব্যবহার করুন ।
জোশ কুপারশ্মিদ্দ্ট

1
এটি সম্ভবত ধরে নিয়েছে যে সার্ভারটি এখনও ইসি 2 এস ডিএনএস সার্ভারগুলি ব্যবহার করছে যা ইসি 2.ইনটার্নাল জোন সম্পর্কে জানে এবং যে কেউ /etc/resolv.conf কে 8.8.8.8 এ পরিবর্তন করেছে বা তাদের নিজস্ব ডিএনএস ইনফ্রাস্ট্রাকচার ঘুরিয়েছে না।
ল্যামন্ট

1
এডাব্লুএস এটি ভেঙেছে বলে মনে হয়। আমি আর উদাহরণস্বরূপ-data.ec2.in অন্তর্নিহিত করতে পারি না। উদাহরণস্বরূপ- data.us-পশ্চিম-2.compute.in অন্তর্নিহিত, যদিও কমপক্ষে আপাতত কাজ করে।
ব্রায়ান লারসেন

14

যদি লক্ষ্যটি যদি এটি কোনও ইসি 2 উদাহরণ বা অন্য কোনও ক্লাউড উদাহরণ, যেমন dmidecodeগুগলের মতো হয় তবে তা যদি বলা হয় তবে খুব সুন্দরভাবে কাজ করে এবং কোনও নেটওয়ার্কিংয়ের প্রয়োজন হয় না। আমি এটির তুলনায় অন্য কয়েকটি পদ্ধতির তুলনায় পছন্দ করি কারণ ইসি 2 এবং জিসিইর জন্য মেটাডেটা ইউআরএল পাথ আলাদা।

# From a google compute VM
$ sudo dmidecode -s bios-version
Google

# From an amazon ec2 VM
$ sudo dmidecode -s bios-version
4.2.amazon

আমি এটি অন্যান্য ভিএম পরিবেশে এবং এমনকি সত্যিকারের হার্ডওয়্যারগুলিতেও ভাল কাজ করতে আশা করবো - আমি কোনও হার্ডওয়্যার বিক্রেতাদের শিপ সিস্টেমগুলিতে আশা করি না যেখানে বায়োস সংস্করণটি "অ্যামাজন" বলে ...
গাস

আমার উবুন্টু ইসি 2 উদাহরণগুলিতে এই রিটার্ন আসে 1.0- এর কোনও উল্লেখ নেই amazon
নট

5

হোস্ট-নেমগুলি পরিবর্তন হতে পারে, আপনার সার্বজনীন আইপির বিরুদ্ধে একটি হুইস চালাবেন:

if [[ ! -z $(whois $(curl -s shtuff.it/myip/short) | grep -i amazon) ]]; then 
  echo "I'm Amazon"
else 
  echo "I'm not Amazon"
fi

বা AWS মেটা-ডেটা url টিপুন

if [[ ! -z $(curl -s http://169.254.169.254/1.0/) ]]; then 
  echo "I'm Amazon"
else 
  echo "I'm not Amazon"
fi

2
আপনি ইসি 2 তে চালাচ্ছেন না তাড়াতাড়ি ব্যর্থ হওয়ার জন্য দ্বিতীয় কার্ল স্টেটমেন্টে একটি - সংযোগ-টাইমআউট 1 যুক্ত করুন।
জোনাথন অলিভার

1
FWIW, মেটাডেটা URL ব্যবহার করতে নির্দেশ এটি একটি মেঘ উদাহরণস্বরূপ যেমন চালাচ্ছে কিন্তু তর্কাতীতভাবে নির্ধারণ করতে পারি না যদি এটা বিশেষভাবে EC2 হয়। ওপেনস্ট্যাক এবং ইউক্যালিপটাসও একই মেটাডেটা ইউআরআই ব্যবহার করে। আমি জানি এটি নিট বাছাই করছে তবে আমার কাজের জন্য, কোন মেঘ সরবরাহকারী গুরুত্বপূর্ণ।
এমএমএফ

5

এটি এক্স 2 তে লিনাক্স হোস্টগুলির পক্ষেও ভাল কাজ করে এবং নেটওয়ার্ক এবং সম্পর্কিত কোনও টাইমআউটের প্রয়োজন হয় না:

grep -q amazon /sys/devices/virtual/dmi/id/bios_version

এটি কাজ করে, কারণ অ্যামাজন এই প্রবেশের মতো করে:

$ cat /sys/devices/virtual/dmi/id/bios_version 4.2.amazon


2018-05-01; উবুন্টু চলমান এম 5 দৃষ্টান্তে এটি অবৈধ বলে মনে হয়।
রাসেলপিয়ার্স

আমার উবুন্টু ইসি 2 উদাহরণগুলিতে এটি ফিরে আসে 1.0। কোন উল্লেখ নেই amazon
নট

3
test -f /sys/hypervisor/uuid -a `head -c 3 /sys/hypervisor/uuid` == ec2 && echo yes

তবে আমি জানি না যে বিতরণে এটি কতটা পোর্টেবল।


2
ওয়েল, এটি অবশ্যই উইন্ডোজ ইসি 2 উদাহরণগুলিতে কাজ করবে না।
ceejayoz

1
আমি এই পদ্ধতিটি পছন্দ করি কারণ এতে কোনও নেটওয়ার্ক ইন্টারঅ্যাকশন জড়িত না যা সমস্ত ধরণের কারণে স্থির থাকতে পারে। এইচটিটিপি এক্সচেঞ্জের জন্য টাইমআউটগুলি ব্যবহার করা হ্যাং প্রতিরোধের গ্যারান্টিযুক্ত নয়। আমি উইন্ডোজ দৃষ্টান্তগুলি সম্পর্কে চিন্তা করি না।
হ্যানস

আমার প্রয়োজনটা ঠিক তাই! কিছু কার্ল করার চেয়ে ভাল উপায়, ধন্যবাদ!
কিওয়ার্টজগুই

1
সম্পূর্ণ ইউইউডি ব্যবহারের বিষয়টি বিবেচনা করুন, ঠিক যদি অন্য কোনও বিক্রেতার হাইপারভাইজার ইউআইডিও "ই সি 2" দিয়ে শুরু হয়। ঘটনার সম্ভাবনা 4096 এ 1 যা তুচ্ছ নয়।
হানেস

1
আসলে, পুরো ইউআইডিটির তুলনা করা কার্যকর হয় না, যেহেতু আমি বন্যে একাধিক বিভিন্ন হাইপারভাইজার ইউআইডি দেখেছি। তারা সকলেই "ec2" দিয়ে শুরু করে, সুতরাং এই উত্তরটি যেমন কাজ করে তেমনি।
হ্যানস

3

দ্রুত উত্তর:

if [[ -f /sys/devices/virtual/dmi/id/product_uuid ]] && \
    grep -q "^EC2" /sys/devices/virtual/dmi/id/product_uuid
then
    echo "IS EC2"
else
    echo "NOT EC2"
fi

আমি এখানে এক বছরের জন্য পোস্ট করা উত্তরগুলির একটি ব্যবহার করছিলাম - তবে এটি নতুন 'সি 5' উদাহরণ টাইপগুলিতে কাজ করে না (আমি এখন 'সি 4' থেকে আপগ্রেড করার জন্য কাজ করছি)।

আমি এই সমাধানটি পছন্দ করি কারণ এটি ভবিষ্যতে ভাঙ্গার সম্ভাবনা কম বলে মনে হয়।

পুরানো উদাহরণের ধরণগুলি এবং নতুনগুলির ক্ষেত্রে, এই ফাইলটি উপস্থিত রয়েছে এবং 'ইসি 2' দিয়ে শুরু হয়। আমি ভার্চুয়ালবক্সে চলমান উবুন্টুতে পরীক্ষা করেছি (এটির আমারও সমর্থন করা দরকার) এবং এতে 'ভার্চুয়ালবক্স' স্ট্রিং রয়েছে।

পূর্ববর্তী পোস্টার হিসাবে উল্লেখ করা হয়েছে (তবে এটি মিস করা সহজ ছিল) - এটি করার উপায় সম্পর্কে অ্যামাজন ডকুমেন্টেশন রয়েছে - এতে আমার উত্তর অন্তর্ভুক্ত রয়েছে।

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html


2

সম্ভবত আপনি "ফ্যাক্টর" ব্যবহার করতে পারেন:

"ফ্যাক্টর অপারেটিং সিস্টেম, লিনাক্স বিতরণ, বা MAC ঠিকানার মতো সাধারণ অপারেটিং সিস্টেমের তথ্যগুলি পুনরুদ্ধারের জন্য একটি ক্রস প্ল্যাটফর্ম লাইব্রেরি।"

http://www.puppetlabs.com/puppet/related-projects/facter/

উদাহরণস্বরূপ, আমরা যদি ইসি 2 ফ্যাক্টটি দেখি (ফ্যাক্টর -১.6.১২ / লিবি / ফ্যাক্টর / ইসি ২.আরবি):

require 'facter/util/ec2'
require 'open-uri'

def metadata(id = "")
  open("http://169.254.169.254/2008-02-01/meta-data/#{id||=''}").read.
    split("\n").each do |o|
    key = "#{id}#{o.gsub(/\=.*$/, '/')}"
    if key[-1..-1] != '/'
      value = open("http://169.254.169.254/2008-02-01/meta-data/#{key}").read.
        split("\n")
      symbol = "ec2_#{key.gsub(/\-|\//, '_')}".to_sym
      Facter.add(symbol) { setcode { value.join(',') } }
    else
      metadata(key)
    end
  end
end

def userdata()
  begin
    value = open("http://169.254.169.254/2008-02-01/user-data/").read.split
    Facter.add(:ec2_userdata) { setcode { value } }
  rescue OpenURI::HTTPError
  end
end

if (Facter::Util::EC2.has_euca_mac? || Facter::Util::EC2.has_openstack_mac? ||
    Facter::Util::EC2.has_ec2_arp?) && Facter::Util::EC2.can_connect?

  metadata
  userdata
else
  Facter.debug "Not an EC2 host"
end

1

আপনি যদি কার্ল ইনস্টল করে থাকেন, আপনি ইসি 2 এর মধ্যে চলমান থাকলে এই কমান্ডটি 0 ফিরে আসবে এবং আপনি যদি নন তবে শূন্য:

curl --max-time 3 http://169.254.169.254/latest/meta-data/ami-id 2>/dev/null 1>/dev/null`

এটি এএমআই-আইডি ঘোষণা করে ইসি 2 মেটাডেটা টানতে চেষ্টা করে। এটি যদি 3 সেকেন্ডের পরে সফল না হয় তবে ধরে নেওয়া হয় এটি ইসি 2 তে চলছে না।


0

এই পার্টিতে কিছুটা দেরি হয়ে গেছে, তবে আমি এই পোস্টটি পেরিয়ে এসে এই ডাব্লুএস ডকুমেন্টেশনটি পেয়েছি:

ইসি 2 উদাহরণ সনাক্ত করার জন্য একটি নির্দিষ্ট এবং ক্রিপ্টোগ্রাফিকভাবে যাচাই করা পদ্ধতির জন্য, উদাহরণ স্বাক্ষর সহ নথিটি স্বাক্ষর সহ পরীক্ষা করুন। এই নথিগুলি প্রতিটি ইসি 2 তে স্থানীয়, অ-রাউটেবল ঠিকানায় পাওয়া যায় http://169.254.169.254/latest/dynamic/instance-identity/

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html

এটি অবশ্যই নেটওয়ার্কের ওভারহেডের প্রয়োজন যদিও আপনি কার্ল টাইমআউটটি এভাবে সেট করতে পারেন:

curl -s --connect-timeout 5 http://169.254.169.254/latest/dynamic/instance-identity/

এটি সময়সীমা 5s এ সেট করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.