Amazon baru-baru ini menambahkan fitur luar biasa untuk menandai instans EC2 dengan pasangan nilai kunci untuk membuat pengelolaan sejumlah besar VM menjadi sedikit lebih mudah.
Adakah cara untuk menanyakan tag ini dengan cara yang sama seperti beberapa data kumpulan pengguna lainnya? Sebagai contoh:
$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-east-1d
Apakah ada cara yang mirip untuk menanyakan tag?
amazon-web-services
amazon-ec2
Josh Lindsey
sumber
sumber
ec2metadata --instance-id
--out = json | jq '.Tags [] | pilih (.Key == "role") | .Value 'ec2metadata
alat sudah ditinggalkan. Sekarang Anda meminta URL 'ajaib' di 169.254.169.254/latest/meta-data - tekan dengan cURL dan itu memberi Anda titik akhir ajaib yang dapat Anda gunakan untuk mendapatkan berbagai bit data. Dalam hal ini,curl http://169.254.169.254/latest/meta-data/instance-id
dapatkan ID instans AndaSkrip bash berikut mengembalikan Nama instance ec2 Anda saat ini (nilai tag "Nama"). Ubah TAG_NAME untuk kasus khusus Anda.
Untuk memasang aws cli
Jika Anda menggunakan IAM dan bukan kredensial eksplisit, gunakan izin IAM ini:
sumber
aws ec2 describe-tags
. Saya perlu menambahkan IAM ini ke kebijakan sebaris peran IAM saya. Terima kasih!| cut -f5
dengan--query="Tags[0].Value"
.Setelah Anda mendapatkan
ec2-metadata
danec2-describe-tags
menginstal (seperti yang disebutkan dalam jawaban Ranieri di atas ), berikut adalah contoh perintah shell untuk mendapatkan "nama" dari instance saat ini, dengan asumsi Anda memiliki tag "Name = Foo" di atasnya.Mengasumsikan variabel lingkungan EC2_PRIVATE_KEY dan EC2_CERT telah ditetapkan.
Ini kembali
Foo
.sumber
ec2-describe-tags
defaultnya adalahus-east-2
. Harap berikan--region
bendera untuk menggunakan wilayah lain.Anda dapat menambahkan skrip ini ke data pengguna cloud-init Anda untuk mengunduh tag EC2 ke file lokal:
Anda memerlukan alat AWS CLI yang diinstal pada sistem Anda: Anda dapat menginstalnya dengan
packages
bagian di file konfigurasi cloud sebelum skrip, menggunakan AMI yang sudah menyertakannya, atau menambahkan perintahapt
atauyum
di awal skrip.Untuk mengakses tag EC2, Anda memerlukan kebijakan seperti ini dalam peran IAM instans Anda:
Tag EC2 instans akan tersedia dalam
/etc/ec2-tags
format ini:Anda dapat memasukkan file apa adanya dalam skrip shell menggunakan
. /etc/ec2-tags
, misalnya:Tag didownload selama inisialisasi instance, jadi tag tidak akan mencerminkan perubahan selanjutnya.
Skrip dan kebijakan IAM didasarkan pada jawaban itaifrenkel.
sumber
aws:autoscaling:groupName
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
Jika Anda tidak berada di zona ketersediaan default, hasil dari overthink akan kembali kosong.
Jika Anda ingin menambahkan filter untuk mendapatkan tag tertentu (elasticbeanstalk: nama-lingkungan dalam kasus saya) maka Anda dapat melakukan ini.
Dan untuk mendapatkan hanya nilai untuk tag yang saya filter, kami menyalurkan untuk memotong dan mendapatkan bidang kelima.
sumber
elasticbeanstalk:environment-name
denganName
Untuk Python:
sumber
instance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
Sebagai alternatif, Anda dapat menggunakan
describe-instances
panggilan cli daripadadescribe-tags
:Contoh ini menunjukkan bagaimana mendapatkan nilai dari tag 'my-tag-name' sebagai contoh:
Ubah wilayah agar sesuai dengan keadaan lokal Anda. Ini mungkin berguna jika instance Anda memiliki hak istimewa deskripsikan-instance tetapi tidak tag-deskripsi dalam kebijakan profil instance
sumber
Menggunakan 'data pengguna' dan 'meta data' AWS API memungkinkan untuk menulis skrip yang membungkus boneka untuk memulai permainan boneka dengan nama sertifikat khusus.
Pertama mulai instance aws dengan data pengguna khusus: 'role: webserver'
Ini memanggil boneka dengan nama sertifikat seperti 'webserver.i-hfg453.aws' Anda kemudian dapat membuat manifes node yang disebut 'webserver' dan boneka 'fuzzy node matching' akan berarti digunakan untuk menyediakan semua server web.
Contoh ini mengasumsikan Anda membangun di atas gambar dasar dengan boneka terpasang, dll.
Manfaat:
1) Anda tidak harus menyerahkan kredensial Anda
2) Anda dapat dibuat sedetail mungkin dengan konfigurasi peran.
sumber
Saya telah mengumpulkan yang berikut ini yang semoga lebih sederhana dan lebih bersih daripada beberapa jawaban yang ada dan hanya menggunakan AWS CLI dan tidak ada alat tambahan.
Contoh kode ini menunjukkan bagaimana mendapatkan nilai tag 'myTag' untuk contoh EC2 saat ini:
Menggunakan description-tag :
Atau, sebagai alternatif, menggunakan deskripsikan-instance :
sumber
Jq + ec2metadata membuatnya sedikit lebih bagus. Saya menggunakan cf dan memiliki akses ke wilayah tersebut. Jika tidak, Anda bisa mengambilnya dengan pesta.
sumber
Variasi pada beberapa jawaban di atas tetapi inilah cara saya mendapatkan nilai tag tertentu dari skrip data pengguna pada sebuah contoh
sumber
Instal AWS CLI:
Dapatkan tag untuk instance saat ini:
Keluaran:
Gunakan sedikit perl untuk mengekstrak tag:
Pengembalian:
sumber
ec2metadata
tidak dalam aws-cli, tetapi dapat diganti dengancurl --silent http://169.254.169.254/latest/meta-data/instance-id
. juga,jq
dapat mengurai json lebih mudah, atau format keluaran yang berbeda bahkan lebih mudah.sudo apt-get -y install python
danexport AWS_DEFAULT_REGION=us-west-1
instance-id: i-07f59f3564618f148
Unduh dan jalankan eksekusi mandiri untuk melakukan itu.
Terkadang seseorang tidak dapat menginstal awscli yang bergantung pada python. buruh pelabuhan mungkin keluar dari gambar juga.
Berikut implementasi saya di golang: https://github.com/hmalphettes/go-ec2-describe-tags
sumber
Bagi mereka yang cukup gila untuk menggunakan Fish shell di EC2, berikut cuplikan praktis untuk /home/ec2-user/.config/fish/config.fish Anda. Perintah hostdata sekarang akan mencantumkan semua tag Anda serta IP publik dan nama host.
sumber