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


99

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

অন্যান্য ব্যবহারকারী-সেট ডেটার মতো এই ট্যাগগুলিকে জিজ্ঞাসা করার কোনও উপায় আছে কি? উদাহরণ স্বরূপ:

$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-east-1d

ট্যাগগুলি জিজ্ঞাসা করার মতো কিছু উপায় আছে?

উত্তর:


36

আপনি বর্তমান দৃষ্টান্তের জন্য ট্যাগগুলি পুনরুদ্ধার করতে AWS মেটাডেটা সরঞ্জাম (আপনার উদাহরণ আইডিটি পুনরুদ্ধার করতে) এবং নতুন ট্যাগ API এর সংমিশ্রণটি ব্যবহার করতে পারেন ।


ঠিক আছে, আমি সেই লিঙ্কটি অনুসরণ করেছি এবং দেখে মনে হচ্ছে এটি এপিআই ডকুমেন্টেশন। আমি কি ব্যবহার করতে পারি এমন কোন সরঞ্জাম নেই, বা এপিআই ডকুমেন্টেশন পড়ার এবং আমার নিজের সরঞ্জামটি লেখার দরকার আছে?
এডওয়ার্ড ফালক

4
Ec2-বর্ণনা-ট্যাগ কমান্ড সহজে উপলব্ধ? মনে হয় এটি ইসি 2-এপি-টুলস প্যাকেজে রয়েছে, তবে আমি এটি ইনস্টল করার চেষ্টা করার পরে 404 এর কিছুই পাই নি।
এডওয়ার্ড ফালক

4
একটি উদাহরণ দিন, ট্যাগ ভূমিকার মান পান: aws ec2 বর্ণনা-ট্যাগগুলি - ফিল্টার নাম = সংস্থান-আইডি, মানগুলি = - ec2metadata --instance-idআউট = জসন | জ্যাকিউ 'T ট্যাগস [] | নির্বাচন করুন (.কি == "ভূমিকা") | মূল্য '
jolestar

12
এটি একটি উত্তরের একটি পয়েন্টার তবে নিজেই কোনও উত্তর নয়
রায় ট্রুইলোভ

4
ec2metadataটুল অসমর্থিত হয়েছে। এখন আপনি 169.254.169.254/latest/meta-data- তে 'ম্যাজিক' ইউআরএলটি জিজ্ঞাসা করেছেন - এটি সিআরএল দিয়ে আঘাত করুন এবং এটি আপনাকে বিভিন্ন ম্যাটেরিয়াল ডেটা পেতে যাদু প্রান্তগুলিকে দেয় gives এই ক্ষেত্রে curl http://169.254.169.254/latest/meta-data/instance-idআপনি আপনার উদাহরণস্বরূপ আইডি পায়
Asfand কাজী

57

নিম্নলিখিত বাশ স্ক্রিপ্টটি আপনার বর্তমান ec2 উদাহরণের নাম দেয় ("নাম" ট্যাগের মান)। আপনার নির্দিষ্ট ক্ষেত্রে TAG_NAME পরিবর্তন করুন।

TAG_NAME="Name"
INSTANCE_ID="`wget -qO- http://instance-data/latest/meta-data/instance-id`"
REGION="`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
TAG_VALUE="`aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" "Name=key,Values=$TAG_NAME" --region $REGION --output=text | cut -f5`"

অ্যাউজ ক্লিপ ইনস্টল করতে

sudo apt-get install python-pip -y
sudo pip install awscli

আপনি যদি স্পষ্ট শংসাপত্রের পরিবর্তে আইএএম ব্যবহার করেন তবে এই আইএএম অনুমতিগুলি ব্যবহার করুন:

{
  "Version": "2012-10-17",
  "Statement": [
    {    
      "Effect": "Allow",
      "Action": [ "ec2:DescribeTags"],
      "Resource": ["*"]
    }
  ]
}

আমি পেয়ে যাচ্ছিলাম "আপনি এই ক্রিয়াকলাপটি চালানোর জন্য অনুমোদিত নন" aws ec2 describe-tags। আমার আইএএম ভূমিকার ইনলাইন নীতিগুলিতে এই আইএএম যুক্ত করা দরকার। ধন্যবাদ!
ভিক্টর ডি

4
একটি খুব সামান্য অপ্টিমাইজেশন এর | cut -f5সাথে প্রতিস্থাপন করা উচিত --query="Tags[0].Value"
রিচার্ড এ চতুর্থ

47

একবার আপনি ইনস্টল হয়ে ec2-metadataec2-describe-tagsইনস্টল হয়ে গেলে ( উপরে রনিরির উত্তরে উল্লিখিত ), বর্তমান উদাহরণটির "নাম" পেতে এখানে একটি শেল কমান্ড দেওয়া হয়েছে, ধরে নিই যে এতে আপনার "নাম = ফু" ট্যাগ রয়েছে।

ধরে নিন EC2_PRIVATE_KEY এবং EC2_CERT এনভায়রনমেন্ট ভেরিয়েবল সেট করা আছে।

ec2-describe-tags \
  --filter "resource-type=instance" \
  --filter "resource-id=$(ec2-metadata -i | cut -d ' ' -f2)" \
  --filter "key=Name" | cut -f5

এই ফিরে আসে Foo


17
যদি আমার প্রসেসগুলি উদাহরণ হিসাবে EC2_PRIVATE_KEY না করে বর্তমান উদাহরণের জন্য ট্যাগগুলি পেত তবে এটি দুর্দান্ত হত। :-(
উইলিয়াম পায়েেন

4
@ উইলিয়াম-পেইন হ্যাঁ, এটি সত্যিই খোঁড়া। সম্ভবত অ্যামাজনের আইএএম ব্যবহার করে আপনি কোনও কিছুর মধ্যে খুব সীমিত অ্যাক্সেস সহ কোনও ব্যবহারকারীকে ব্যবহার করতে পারেন। এফডাব্লুআইডাব্লু, আমি আর এই পদ্ধতির ব্যবহার করব না এবং বাক্সটি সেটআপ করার জন্য কেবল বাহ্যিক স্ক্রিপ্টগুলি ব্যবহার করব।
চিন্তা কোরো

12
@ উইলিয়ামাম পেইন আপনি "অ্যামাজন ইসি 2 রিড অনলি অ্যাক্সেস" নীতি দিয়ে একটি আইএএম রোল সেট আপ করতে পারেন এবং সেই ভূমিকাটি থাকার উদাহরণটি তৈরি করতে পারেন। আপনি আরও দানাদার হতে চাইলে কেবলমাত্র "বিবরণী ট্যাগগুলি" সুবিধাযুক্ত একটি কাস্টম নীতি তৈরি করাও সম্ভব।
রোভারওয়াল্ফ

@ উইলিয়াম পেয়েন আমি রোভারওল্ফের পরামর্শ পছন্দ করেছেন। এটা দুর্দান্ত কাজ করেছে। আপনি যদি এটি দেখতে চান তবে আমি আসলেই অন্য একটি প্রশ্নের উত্তর দিয়েছিলাম: stackoverflow.com/questions/9950586/…
টনি

4
লক্ষ করুন যে ec2-describe-tagsডিফল্ট us-east-2--regionআলাদা অঞ্চল ব্যবহার করতে দয়া করে পতাকাটি পাস করুন ।
এডভোকেট

15

স্থানীয় ফাইলে ইসি 2 ট্যাগগুলি ডাউনলোড করতে আপনি এই ক্লিপটি আপনার ক্লাউড-থার ব্যবহারকারী ডেটাতে যুক্ত করতে পারেন:

#!/bin/sh
INSTANCE_ID=`wget -qO- http://instance-data/latest/meta-data/instance-id`
REGION=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone | sed 's/.$//'`
aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/\1="\2"/' > /etc/ec2-tags

আপনার সিস্টেমে অ্যাডাব্লুএস সিএলআই সরঞ্জামগুলি ইনস্টল করা দরকার: আপনি packagesস্ক্রিপ্টের আগে মেঘ-কনফিগ ফাইলে কোনও বিভাগের সাহায্যে এগুলি ইনস্টল করতে পারেন , ইতিমধ্যে সেগুলিতে অন্তর্ভুক্ত একটি এএমআই ব্যবহার করতে পারেন, বা স্ক্রিপ্টের শুরুতে একটি aptবা yumকমান্ড যুক্ত করতে পারেন।

ইসি 2 ট্যাগ অ্যাক্সেস করার জন্য আপনার আইএনএএম ভূমিকায় আপনার মতো নীতি দরকার:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1409309287000",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeTags"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

উদাহরণটির ইসি 2 ট্যাগগুলি /etc/ec2-tagsএই ফর্ম্যাটে পাওয়া যাবে:

FOO="Bar"
Name="EC2 tags with cloud-init"

আপনি শেল স্ক্রিপ্টে যেমনটি ব্যবহার করছেন তেমন ফাইলটি অন্তর্ভুক্ত করতে পারেন . /etc/ec2-tagsউদাহরণস্বরূপ:

#!/bin/sh
. /etc/ec2-tags
echo $Name

ট্যাগগুলি ইনস্ট্যান্স ইনিশিয়ালেশনের সময় ডাউনলোড করা হয়, সুতরাং তারা পরবর্তী পরিবর্তনগুলি প্রতিফলিত করবে না।


স্ক্রিপ্ট এবং আইএএম নীতিটি আইটিএফ্রেঙ্কেলের উত্তরের উপর ভিত্তি করে।


a + এই পদ্ধতিটি পছন্দ করুন
Cmag

: খুব খারাপ ট্যাগ জন্য এই বিরতি autoscaling গ্রুপ দ্বারা নির্মিতaws:autoscaling:groupName
Cmag

4
তারপরে এটি ব্যবহার করে দেখুন:aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/EC2_TAG_\1="\2"/' |sed -r 's/aws:autoscaling:/aws_autoscaling_/' > /etc/ec2-tags
রায়ান গুলার

11

আপনি যদি ডিফল্ট প্রাপ্যতা জোনে না থাকেন তবে ওভারথিংক থেকে ফলাফলগুলি খালি ফিরে আসবে।

ec2-describe-tags \
   --region \
     $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone  | sed -e "s/.$//") \
   --filter \
     resource-id=$(curl --silent http://169.254.169.254/latest/meta-data/instance-id)

যদি আপনি একটি নির্দিষ্ট ট্যাগ পেতে ইলেকট্রের যোগ করতে চান (স্থিতিস্থাপক: আমার ক্ষেত্রে পরিবেশের নাম) তবে আপনি এটি করতে পারেন।

ec2-describe-tags \
   --region \
     $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone  | sed -e "s/.$//") \
   --filter \
     resource-id=$(curl --silent http://169.254.169.254/latest/meta-data/instance-id) \
   --filter \
     key=elasticbeanstalk:environment-name | cut -f5

এবং আমি যে ফিল্টারটি ফিল্টার করেছিলাম তার কেবলমাত্র মান পেতে আমরা পঞ্চম ক্ষেত্রটি কেটে পাইপ পাই।

ec2-describe-tags \
  --region \
    $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone  | sed -e "s/.$//") \
  --filter \
    resource-id=$(curl --silent http://169.254.169.254/latest/meta-data/instance-id) \
  --filter \
    key=elasticbeanstalk:environment-name | cut -f5

মহান কাজ, আপনাকে ধন্যবাদ, আপনি যদি নাম ট্যাগ প্রতিস্থাপন প্রয়োজন একটি ভিন্ন DNS উদাহরণস্বরূপ-ডেটা আমার জন্য কাজ না করে, গত এক জন্য থাকার elasticbeanstalk:environment-nameসঙ্গেName
detzu

5

পাইথনের জন্য:

from boto import utils, ec2
from os import environ

# import keys from os.env or use default (not secure)
aws_access_key_id = environ.get('AWS_ACCESS_KEY_ID', failobj='XXXXXXXXXXX')
aws_secret_access_key = environ.get('AWS_SECRET_ACCESS_KEY', failobj='XXXXXXXXXXXXXXXXXXXXX')

#load metadata , if  = {} we are on localhost
# http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
instance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
region = instance_metadata['placement']['availability-zone'][:-1]
instance_id = instance_metadata['instance-id']

conn = ec2.connect_to_region(region, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
# get tag status for our  instance_id using filters
# http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeTags.html
tags = conn.get_all_tags(filters={'resource-id': instance_id, 'key': 'status'})
if tags:
    instance_status = tags[0].value
else:
    instance_status = None
    logging.error('no status tag for '+region+' '+instance_id)

আইনী পাঠকেরা শুধু মৌলিক স্থানীয় তথ্য আপনি এমনকি পরিচয়পত্র প্রয়োজন হবে না জন্য নোটinstance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
Bartvds

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

5

আপনি বিকল্পটির describe-instancesপরিবর্তে ক্লাইপ কলটি ব্যবহার করতে পারেনdescribe-tags :

এই উদাহরণটি দেখায় যে উদাহরণটির জন্য 'মাই-ট্যাগ-নাম' ট্যাগের মূল্য কীভাবে পাওয়া যায়:

aws ec2 describe-instances \
  --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) \
  --query "Reservations[*].Instances[*].Tags[?Key=='my-tag-name'].Value" \
  --region ap-southeast-2 --output text

আপনার স্থানীয় পরিস্থিতিতে অনুসারে অঞ্চলটি পরিবর্তন করুন। এটি কার্যকর হতে পারে যেখানে আপনার উদাহরণে বর্ণনা-দৃষ্টান্তের সুবিধাগুলি রয়েছে তবে উদাহরণ প্রোফাইল নীতিতে বর্ণনামূলক ট্যাগগুলি নেই


4

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

এই কোড উদাহরণটি দেখায় যে কীভাবে বর্তমান ইসি 2 উদাহরণের জন্য 'মাইটাগ' ট্যাগটির মূল্য পাবেন:

বর্ণনা-ট্যাগ ব্যবহার :

export AWS_DEFAULT_REGION=us-east-1
instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
aws ec2 describe-tags \
  --filters "Name=resource-id,Values=$instance_id" 'Name=key,Values=myTag' \
  --query 'Tags[].Value' --output text

অথবা, বিকল্পভাবে, বর্ণনা-দৃষ্টান্তগুলি ব্যবহার করে :

aws ec2 describe-instances --instance-id $instance_id \
  --query 'Reservations[].Instances[].Tags[?Key==`myTag`].Value' --output text

3

এডাব্লুএস 'ব্যবহারকারীর ডেটা' এবং 'মেটা ডেটা' এপিআইগুলি ব্যবহার করে কোনও স্ক্রিপ্ট লিখতে এটি সম্ভব যা কাস্টম সার্টের নাম দিয়ে পুতুল চালানোর জন্য পুতুলকে মুড়ে দেয়।

প্রথমে কাস্টম ব্যবহারকারীর ডেটা দিয়ে একটি দুরত্ব সূচনা শুরু করুন: 'ভূমিকা: ওয়েবসারভার'

#!/bin/bash

# Find the name from the user data passed in on instance creation
USER=$(curl -s "http://169.254.169.254/latest/user-data")
IFS=':' read -ra UDATA <<< "$USER"

# Find the instance ID from the meta data api
ID=$(curl -s "http://169.254.169.254/latest/meta-data/instance-id")
CERTNAME=${UDATA[1]}.$ID.aws

echo "Running Puppet for certname: " $CERTNAME
puppet agent -t --certname=$CERTNAME 

এরপরে পুতুলকে 'webserver.i-hfg453.aws' এর মতো একটি শংসাপত্রের নাম হিসাবে কল করা হয় তারপরে আপনি 'ওয়েবসারভার' নামে একটি নোড ম্যানিফেস্ট তৈরি করতে পারেন এবং পুতুলের 'ফাজি নোড ম্যাচিং' এর অর্থ এটি সমস্ত ওয়েবসভারের বিধানে ব্যবহৃত হয়।

এই উদাহরণটি ধরে নিয়েছে আপনি পুতুল ইনস্টল করা ইত্যাদি সহ একটি বেস চিত্র তৈরি করেছেন ass

উপকারিতা:

1) আপনাকে আপনার শংসাপত্রগুলি পাস করতে হবে না

2) আপনি রোল কনফিগারগুলির সাথে আপনার পছন্দ মতো দানাদার হতে পারেন।


2

জিকিউ + ইক 2মেটাডেটা এটিকে কিছুটা সুন্দর করে তোলে। আমি সিএফ ব্যবহার করছি এবং এই অঞ্চলে অ্যাক্সেস পেয়েছি। অন্যথায় আপনি এটি ব্যাশে ধরতে পারেন।

aws ec2 describe-tags --region $REGION \
--filters "Name=resource-id,Values=`ec2metadata --instance-id`" | jq --raw-output \
'.Tags[] | select(.Key=="TAG_NAME") | .Value'

2

উপরের উত্তরগুলির কয়েকটিতে ভিন্নতা তবে এটিই আমি উদাহরণস্বরূপ ব্যবহারকারীর ডেটা স্ক্রিপ্ট থেকে একটি নির্দিষ্ট ট্যাগের মান পেয়েছি

REGION=$(curl http://instance-data/latest/meta-data/placement/availability-zone | sed 's/.$//')

INSTANCE_ID=$(curl -s http://instance-data/latest/meta-data/instance-id)

TAG_VALUE=$(aws ec2 describe-tags --region $REGION --filters "Name=resource-id,Values=$INSTANCE_ID" "Name=key,Values='<TAG_NAME_HERE>'" | jq -r '.Tags[].Value')

1

AWS CLI ইনস্টল করুন:

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
sudo apt-get install unzip
unzip awscli-bundle.zip
sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

বর্তমান উদাহরণের জন্য ট্যাগগুলি পান:

aws ec2 describe-tags --filters "Name=resource-id,Values=`ec2metadata --instance-id`"

ফলাফল:

{
    "Tags": [
        {
            "ResourceType": "instance", 
            "ResourceId": "i-6a7e559d", 
            "Value": "Webserver", 
            "Key": "Name"
        }
    ]
}

ট্যাগগুলি বের করতে কিছুটা পার্ল ব্যবহার করুন:

aws ec2 describe-tags --filters \
"Name=resource-id,Values=`ec2metadata --instance-id`" | \
perl -ne 'print "$1\n" if /\"Value\": \"(.*?)\"/'

রিটার্নস:

Webserver

ec2metadataঅ্যাউস-ক্লাইমে নেই, তবে এটি প্রতিস্থাপন করা যেতে পারে curl --silent http://169.254.169.254/latest/meta-data/instance-id। এছাড়াও, jqজাসনকে পার্স করতে পারে সহজ, বা ভিন্ন আউটপুট ফর্ম্যাটটি আরও সহজ।
টেডার 42

এটি কাজ করে, তবে আমাকে নিম্নলিখিতগুলি যুক্ত করতে হবে: sudo apt-get -y install pythonএবংexport AWS_DEFAULT_REGION=us-west-1
ইউজিন

এটি কাজ করবে না ... ১.২ এক্সপ্রেটিডটা হ'ল ভুল কমান্ড। 2. ec2-metadata --instance-id ফিরে আসবেinstance-id: i-07f59f3564618f148
ড্যানিয়েল হর্নিক

1

এটি করার জন্য নির্বাহযোগ্য একটি স্ট্যান্ডেলোন ডাউনলোড করুন এবং চালান।

কখনও কখনও পাইথন উপর নির্ভর করে কেউ awscli ইনস্টল করতে পারে না। ডকার খুব সম্ভবত ছবির বাইরেও থাকতে পারে।

গোলাংয়ে আমার বাস্তবায়ন এখানে: https://github.com/hmalphettes/go-ec2-describe-tags


0

ইসি 2 তে ফিশ শেলটি ব্যবহার করার মতো যথেষ্ট পাগলদের জন্য, আপনার / home/ec2-user/.config/fish/config.fish এর জন্য একটি স্নিপেট এখানে। হোস্টডেটা কমান্ড এখন আপনার সমস্ত ট্যাগের পাশাপাশি পাবলিক আইপি এবং হোস্টনাম তালিকাভুক্ত করবে।

set -x INSTANCE_ID (wget -qO- http://instance-data/latest/meta-data/instance-id)
set -x REGION (wget -qO- http://instance-data/latest/meta-data/placement/availability-zone | sed 's/.$//')

function hostdata
    aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/\1="\2"/'
    ec2-metadata | grep public-hostname
    ec2-metadata | grep public-ipv4
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.