ইসি 2 উদাহরণের মধ্যে থেকে অঞ্চলটি সন্ধান করুন


131

উদাহরণের মধ্যে থেকে উদাহরণের অঞ্চলটি দেখার কোনও উপায় আছে কি?

আমি উদাহরণ আইডি সন্ধানের পদ্ধতির অনুরূপ কিছু সন্ধান করছি ।



8
যে সমস্ত শেল স্ক্রিপ্টগুলির জন্য যত্নশীল নয় তার সংক্ষিপ্ত উত্তর: প্রাপ্যতা অঞ্চলটি পান http://169.254.169.254/latest/meta-data/placement/availability-zoneএবং শেষ অক্ষরটি সরিয়ে ফেলুন।
সার্সাপরিলা

উত্তর:


147

সেই ইউআরএল ( http://169.254.169.254/latest/dynamic/instance-identity/docament ) আর কাজ করে না বলে মনে হচ্ছে। আমি এটি ব্যবহার করার চেষ্টা করার সময় একটি 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 মন্তব্যের ভিত্তিতে উন্নত


4
এটি ইসি 2 ইভেন্টের অভ্যন্তরে চালিত করতে হবে এবং এডাব্লুএস এর ব্যাকেন্ডগুলি দ্বারা চালিত। এটি অন্য কোথাও কাজ করবে না (মূলত কারণ এটি আইপি একটি এপিআইপিএ)। এছাড়াও কোনও মেটাডেটা উত্সের সাথে সংযোগ না রেখে এই তথ্যটি সরাসরি অভ্যন্তর থেকে পাওয়ার কোনও উপায় নেই। এটি ধরে নিয়েছে যে 169.254.169.254 এপিআই উপলব্ধ এবং আপনার স্ক্রিপ্টের সেই অনুযায়ী নেটওয়ার্ক ব্যর্থতা পরিচালনা করতে হবে। ec2-metadataএই API এর কেবল একটি মোড়ক, তবে মূলত একই জিনিসটি করে।
ডান্নোস’আর 7'15

1
এটি কি কিছু দলিলযুক্ত? আপনি এটি কীভাবে খুঁজে পেয়েছেন তা ব্যাখ্যা করতে পারেন?
meawoppl

2
সমস্ত সততার সাথে আমি যখন 2-লাইনার নিয়ে এসেছি তখন আমি ঠিক এপিআই সম্পর্কে উদ্বুদ্ধ করছিলাম যা আমি সঠিক অঞ্চলটি সনাক্ত করতে ব্যবহার করতে পারি এমন কোনও কিছু খুঁজছিলাম। এডাব্লুএস
এডাব্লুএসইসি 2

12
ইসি 2 জিজিওএন-র জন্য সরবরাহ করা কমান্ডের চেয়ে অনেক সরল সেড কমান্ডকে প্রতিস্থাপন করুন:sed 's/[a-z]$//
থ্রিজেজ

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

81

এটি অর্জনের আরও একটি উপায় রয়েছে:

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
অ্যাডাম মনসেন

@ অ্যাডমনসন সম্ভবত এটি একটি ক্ষণস্থায়ী ত্রুটি ছিল। আমি আমাদের-পূর্ব -১ এ এবং এটি দুর্দান্ত কাজ করে।
ফ্লোরিন আন্দ্রেই

ধন্যবাদ @ ফ্লোরিনআন্দ্রেই আমার জন্য এখন কাজ করে।
আদম মনসেন

3
জেকিউ সহ:curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
ইয়ারন

4
অজস্র সহ:curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
ইয়ারন

38

আপনি যদি ব্যবহারে ঠিক থাকেন তবে আপনি jqনিম্নলিখিতগুলি চালাতে পারেন:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq .region -r

আমার ধারণা এটি সবচেয়ে পরিষ্কার উপায় way


31
ec2-metadata --availability-zone | sed 's/.$//'

ডিবিয়ান ভিত্তিক সিস্টেমগুলির জন্য কমান্ডটি ড্যাশ ছাড়াই is

ec2metadata --availability-zone | sed 's/.$//'

6
কেবলমাত্র অঞ্চলের নাম দিয়ে খাঁটি স্ট্রিং পান:ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
নাহশ

ec2-metadataডিফল্টরূপে উপলভ্য এমন কোনও জিনিস বলে মনে হচ্ছে না - আপনি কি ইনস্টলেশন নির্দেশাবলী অন্তর্ভুক্ত করতে পারেন?
টিম ম্যালোন

23

আপনি যদি নিয়মিত অভিব্যক্তি এড়াতে চান, এখানে পাইথনের সাথে করতে পারেন এমন একটি ওয়ান-লাইনার:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']"

এই উত্তরটি বেশি হওয়া উচিত!
কোস্তাস ডেমিরিস

@ কোস্টাসডেমিরিস আমি সম্মত, অনেকটা নিয়মিত অভিব্যক্তির চেয়ে জেএসওএন কাঠামো থেকে মূল্য পড়ি।
lasec0203

1
আমি সম্মত হ'ল যদি আপনি জিকিউ ইনস্টল না করেন তবে এটি করার সর্বোত্তম উপায় বলে মনে হচ্ছে। আপনি আশা করতে পারেন যে
এডাব্লুএস এটি

17

আপনি ec2- মেটাডেটা ব্যবহার করতে পারেন:

ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"

2
এটির সাথে, যদি আপনি থাকেন তবে আপনি খারাপ হয়ে eu-central-1গেছেন।
ড্যানোসৌর

2
centralআমি যখন আমার উত্তর লিখতে শুরু করি তখন উপস্থিত ছিল না। এটি এখন যুক্ত হয়েছে।
ড্যানিয়েল কপ্পিটজ

22
একটি স্ক্রিপ্ট যা প্রতিবার ডাব্লুএসএস একটি নতুন অঞ্চল যুক্ত করে ভাঙা আমার কাছে বিশেষ দৃ strong় সমাধান বলে মনে হয় না।
রায়ান বি লিঞ্চ

1
গ্রেপের পরিবর্তে, awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'এজেড নামের প্রথম দুটি উপাদান রাখবে।
dskrvk

@dskrvk আপনি শুধু প্রথম দুই উপাদান রাখা, আপনি কিভাবে মধ্যে distringuish থাকে 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 যে, এটি একটি বর্ধিত পুনরায়- সঙ্গে খাটো করা যেতে পারে)। (বর্তমান রেজেক্স caঅঞ্চল, afঅঞ্চল এবং অঞ্চল ভেঙে যাবে me)
গার্ট ভ্যান ডান বার্গ

15

আমি এখন পর্যন্ত সবচেয়ে সহজ খুঁজে পেয়েছি

 curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'

1
এটির অ-ডিফল্ট নির্ভরতাগুলির সুবিধা রয়েছে এবং এটি কেবল একটি একক লাইন।
মার্ক স্টোসবার্গ

14

খুব সাধারণ একটি লাইনার

export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}

4
এটি দুটি লাইন
খ্রিস্টান

1
তবে এটি আমাদের পশ্চিম -১ অঞ্চলে কাজ করছে না। curl: (6) Could not resolve host: instance-data; Name or service not knownত্রুটি ফেরায় ।
এস কে ভেঙ্কট

1
@ এসকেভেনক্যাট সম্ভবত এটি আপনার ভিপিসির ডিএনএস সেটিংসের সাথে সম্পর্কিত ... মেটাডেটা-এপিআইয়ের জন্য আইপি ব্যবহার করা নিরাপদ বলে মনে হচ্ছে (অন্যান্য উত্তরগুলির অর্ধেকটি তা করে)
গার্ট ভ্যান ডান বার্গ

@ জার্মটভেনডেনবার্গ, আমি এটি দ্বিতীয় করে দিয়েছি ..
এসকে ভেঙ্কট

9

আপনি যদি জেকিউ ইনস্টল করে থাকেন তবে আপনি এটির (সম্ভবত সবচেয়ে "করুণ" পদ্ধতি) এভাবেও যেতে পারেন:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .region

এটি কেবল কোনও সুন্দর-প্রিন্টিং বা অন্য বিন্যাস ছাড়াই "অঞ্চল" এর কাঁচা মান প্রদান করে। তথ্যসূত্র: এডাব্লুএস ফোরাম


7

প্রাপ্যতা অঞ্চল থেকে অঞ্চলটি পান, এর শেষ চিঠিটি সরিয়ে দিন।

ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//'

6

জিকিউ ব্যবহার করুন:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region

4

আপনি যদি এডাব্লুএস জাভা এসডিকে ব্যবহার করতে সক্ষম হন তবে এখন এমন একটি পদ্ধতি রয়েছে যা বর্তমান অঞ্চলের নামটি ফিরিয়ে দেবে (যেমন "ইউএস-ইস্ট -1", "ইইউ-ওয়েস্ট -1"):

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()


4

এটি আমি খুঁজে পাওয়া সবচেয়ে পরিষ্কার সমাধান:

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')

  • কোনও এপিআই কল দেয় না, ইসি 2 ইনস্টেন্স মেটা-ডেটা ব্যবহার করে
  • কেবল কার্ল, এবং বেসিক সেড ব্যবহার করে, তাই এসডিকে বা সরঞ্জামগুলিতে কোনও নির্ভরতা ইনস্টল হওয়ার সম্ভাবনা নেই।
  • উপলভ্যতা জোনের নামটি বিশ্লেষণ করার চেষ্টা করে না, সুতরাং AWS এজেড / অঞ্চল নাম ফর্ম্যাটটি পরিবর্তন করে যদি কোন উদ্বেগ হয় না

হ্যাঁ নিখুঁত, ধন্যবাদ। এই ফলাফলটি সহজেই একটি জসন বস্তুতে ডিসেরায়ালাইজ করা যেতে পারে।
ডায়নামিক্লিংক

আমি শেষে কমা পাচ্ছি।
ক্রেগ

4

ধন্যবাদ https://unix.stackexchange.com/a/144330/135640 , ব্যাশ 4.2+ সহ আমরা সহজলভ্যতা অঞ্চল থেকে শেষ চরটি কেটে ফেলতে পারি:

$ region=`curl -s 169.254.169.254/latest/meta-data/placement/availability-zone`
$ region=${region::-1}
$ echo $region
us-east-1

এটি ধরে নেয় AWS অঞ্চলটিতে সংযুক্তিযোগ্যতা অঞ্চলগুলির জন্য একটি একক অক্ষর ব্যবহার করে চলেছে।


5
আমরা সর্বদা শেলের সর্বশেষ চরিত্রটি region=${region%?}
ডেভিড জোনস

4

2 টি লাইনার আপনি যতক্ষণ না আপনার অনুসন্ধান ডোমেন হিসাবে ec2.intern ব্যবহার করছেন ততক্ষণ কাজ করে:

az=$(curl -s http://instance-data/latest/meta-data/placement/availability-zone)
region=${az:0:${#az} - 1}

4

যে কেউ চাইলে ভাল ওল পাওয়ারশেল দিয়ে এটি করতে চান

$var = (curl http://169.254.169.254/latest/dynamic/instance-identity/document | Select-String-Pattern "Zone" | ConvertFrom-Json | Select-Object -ExpandProperty "region")
echo $var

3

বা উবুন্টু বা এই সরঞ্জামটিকে প্রয়োজনীয়তা তৈরি করবেন না এবং কেবল করুন:

: "${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:]])}"}

2
মনে রাখবেন এটি কেবলমাত্র কাজ করে কারণ বর্তমানে প্রাপ্যতা অঞ্চলটি সর্বদা অঞ্চলের নাম যেখানে এর সাথে সংক্ষিপ্ত আকারের অক্ষর যুক্ত থাকে (যেমন অঞ্চলটি "আমাদের-পশ্চিম -১", অঞ্চলটি "ইউএস-ওয়েস্ট -1 এ" হয়)। অ্যামাজন যদি কখনও এই প্যাটার্নটি ভঙ্গ করে, তবে উপরের যুক্তি আর কাজ করবে না।
ম্যাট সলনিট

3

আপনি যদি জসন দিয়ে কাজ করেন - সঠিক সরঞ্জামগুলি ব্যবহার করুন। jq এই ক্ষেত্রে অনেক শক্তিশালী।

# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region'
eu-west-1

3

এটি ইউরোপীয় ইউনিয়ন-কেন্দ্রীয় -১ পাশাপাশি বিভিন্ন লেটার জোনের জন্য কাজ করে। (উপরে সিড উত্তরের জবাব দেওয়ার মতো পর্যাপ্ত প্রতিবেদন আমার কাছে নেই)

ec2-metadata --availability-zone | sed 's/[a-z]$//'

এটি হওয়া উচিত ec2metadata --availability-zone | sed 's/.$//'(কোনও ড্যাশ ছাড়াই)
ভ্লাদিমির কোন্ড্রাটয়েভ

3

আপনি যদি উইন্ডোয় চলমান থাকেন তবে আপনি এই পাওয়ারশেল ওয়ান-লাইনার ব্যবহার করতে পারেন:

$region=(Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").region

1

উদাহরণ থেকে অঞ্চলটি সন্ধান করার জন্য একটি সমাধানও সন্ধান করছিল এবং এটি আমার খাঁটি বাশ সমাধান:

az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
region=${az:0:${#az}-1}

যদি এমন অঞ্চল না থাকে যেখানে এজেডে দু'টির বেশি অক্ষর রয়েছে, যা আমি অবগত নই।


0

আপনি লগ ইন করা ইসি 2 সম্পর্কে তথ্য সন্ধানের জন্য, আপনি ইসি 2-মেটাডেটা সরঞ্জামটি ব্যবহার করতে পারেন।

আপনি এই লিঙ্কটি অনুসরণ করে সরঞ্জামটি ইনস্টল করতে পারেন সরঞ্জামটি ইনস্টল করার পরে, আপনি চালাতে পারেন

# ec2-metadata -z

অঞ্চলটি সন্ধান করতে।

এই সরঞ্জামগুলি সর্বশেষ (10.10) উবুন্টু এএমআই সহ ইনস্টল হয়,


4
এটি ভুল। ec2-metadata -zঅঞ্চলটি নয়, কেবল প্রাপ্যতা অঞ্চল দেখায়।
ম্যাট সলনিট

0

আপনি যদি জেএস ব্যবহার করে অঞ্চল পেতে চাইছেন তবে এটির কাজ করা উচিত:

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();
            }
     });

মেটাডেটা এপিআই কলের প্রতিক্রিয়ায় এডাব্লুএস ডোকস থেকে পাওয়া ম্যাপিংটি ছিল, শেষ চরিত্রটি ঠিক কাজ করে tri

  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

0

ec2metadata(কোনও ড্যাশ নেই) হ'ল বর্তমান ইস্রায়েল কমান্ডটি আপনাকে আপনার ইসি 2 বাক্স সম্পর্কে সমস্ত অ্যাওস হোস্টিংয়ের তথ্য সরবরাহ করে। এটি সর্বাধিক মার্জিত এবং সুরক্ষিত পদ্ধতির। ( ec2-metadataএটি পুরানো, আর বৈধ আদেশ নয়))


এটি আপনার নির্বাচিত ভার্চুয়াল বক্সের উপর নির্ভর করতে পারে। আমি লিনাক্সের সাথে লেগে আছি
GViz

0

শুধুমাত্র egrep ব্যবহার করে এমন একটি পদ্ধতি যা অতিরিক্ত কোনও সরঞ্জামাদি ইনস্টল না করে বেশিরভাগ লিনাক্স ইনস্ট্যান্সে কাজ করা উচিত। আমি এটি সমস্ত বর্তমান AWS অঞ্চলের তালিকার বিপরীতে পরীক্ষা করেছি এবং সেগুলি সব মিলছে।

curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'

রিগেক্সের ব্যাখ্যা:

  • "(\ ডাব্লু) +" এটি কোনও সংখ্যক বর্ণের সাথে মেলে
  • "-" শুধুমাত্র একটি ড্যাশ মেলে
  • "[0-9]" কোনও 1 সংখ্যার সাথে মেলে

আপনি যদি এটিকে পরিবর্তনশীল করতে চান তবে:

region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')


0

সেড এবং কার্ল সমাধানের জন্য দেখে মনে হচ্ছে ফর্ম্যাটটি কিছুটা পরিবর্তিত হয়েছে। আমার জন্য কাজ করে

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | sed -n 's/ "region" : "\(.*\)"[,]/\1/p'

0

কিছু পয়েন্ট যেহেতু এই উত্তরের এটা হল সবচেয়ে পোস্ট করা হয়েছে এ ডেস্কটপ AWS যুক্তিসংগত জিনিস করেনি এবং একটি নতুন পথ বাস্তবায়িত: latest/meta-data/placement/region

এর অর্থ এই অঞ্চলটি পাওয়া যতটা সহজ হওয়া উচিত

REGION="$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/region)"

0

আপনি এই কার্ল অনুরোধটি ব্যবহার করে উদাহরণ অঞ্চল পেতে পারেন

$ curl http://169.254.169.254/latest/meta-data/placement/region
us-east-1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.