Apakah ada cara untuk mencari wilayah instance dari dalam instance?
Saya mencari sesuatu yang mirip dengan metode menemukan instance id .
amazon-ec2
amazon-web-services
Gary Richardson
sumber
sumber
http://169.254.169.254/latest/meta-data/placement/availability-zone
dan hapus karakter terakhir.Jawaban:
URL itu ( http://169.254.169.254/latest/dynamic/instance-identity/document ) tampaknya tidak berfungsi lagi. Saya mendapatkan 404 ketika saya mencoba menggunakannya. Saya memiliki kode berikut yang tampaknya berfungsi:
Semoga ini membantu.
EDIT: Ditingkatkan
sed
berdasarkan komentarsumber
ec2-metadata
hanyalah pembungkus untuk API ini, tetapi pada dasarnya melakukan hal yang sama.sed 's/[a-z]$//
Ada satu cara lagi untuk mencapai itu:
sumber
404 - Not Found
mencobaGET
URL itu dari mesin dius-east-1a
.curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
Jika Anda setuju menggunakan
jq
, Anda dapat menjalankan yang berikut:Saya kira itu cara terbersih.
sumber
Untuk sistem berbasis debian, perintahnya adalah tanpa tanda hubung.
sumber
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
tampaknya tidak menjadi sesuatu yang tersedia secara default - dapatkah Anda memasukkan instruksi instalasi?Jika Anda ingin menghindari ekspresi reguler, berikut adalah satu-liner yang dapat Anda lakukan dengan Python:
sumber
Anda dapat menggunakan ec2-metadata:
sumber
eu-central-1
Anda sedang kacau.central
tidak ada ketika saya awalnya menulis jawaban saya. Sudah ditambahkan sekarang.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
hanya akan menyimpan dua komponen pertama dari nama AZ.eu-west-1
,eu-west-2
daneu-west-3
(Jugaus-west-1
danus-west-2
) @OP: hanya mencocokkan'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
tampaknya lebih aman (itu adalah regex dasar, itu dapat dibuat lebih pendek dengan RE diperpanjang). (Regex saat ini akan menembusca
wilayah, wilayah,af
danme
wilayah)Paling mudah saya temukan sejauh ini
sumber
sangat sederhana satu liner
sumber
curl: (6) Could not resolve host: instance-data; Name or service not known
kesalahan.Jika Anda telah menginstal jq , Anda juga dapat melakukannya (mungkin metode yang paling "anggun") dengan cara ini:
Ini hanya mengembalikan nilai mentah "wilayah" tanpa pencetakan cantik atau format lainnya. Referensi: Forum AWS
sumber
Dapatkan wilayah dari zona ketersediaan, lepaskan huruf terakhirnya.
sumber
Gunakan JQ:
sumber
Jika Anda dapat menggunakan AWS Java SDK, sekarang ada metode yang akan mengembalikan nama wilayah saat ini (seperti "us-east-1", "eu-west-1"):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
sumber
Ini adalah solusi terbersih yang saya temukan:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
Misalnya,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
sumber
Berkat https://unix.stackexchange.com/a/144330/135640 , dengan bash 4.2+ kami hanya dapat menghapus karakter terakhir dari zona ketersediaan:
Ini mengasumsikan AWS terus menggunakan satu karakter untuk zona ketersediaan ditambahkan ke wilayah tersebut.
sumber
region=${region%?}
2 liner yang berfungsi selama Anda menggunakan ec2.internal sebagai domain pencarian Anda:
sumber
Bagi siapa pun yang ingin melakukan ini dengan PowerShell yang baik
sumber
Atau jangan menjadikan Ubuntu atau alat ini persyaratan dan cukup lakukan:
sumber
Jika Anda bekerja dengan json - gunakan alat yang tepat. jq jauh lebih kuat dalam hal ini.
sumber
Ini berfungsi untuk eu-central-1 serta berbagai zona huruf. (Saya tidak punya cukup perwakilan untuk membalas jawaban sed di atas)
sumber
ec2metadata --availability-zone | sed 's/.$//'
(tanpa tanda hubung)Jika Anda menjalankan di windows, Anda dapat menggunakan powershell one-liner ini:
sumber
Sedang mencari solusi untuk menemukan wilayah dari instance dan di sini adalah solusi Bash murni saya:
kecuali ada daerah di mana AZ memiliki lebih dari dua huruf, yang saya tidak sadari.
sumber
Untuk mengetahui informasi tentang EC2 yang Anda masuki, Anda dapat menggunakan alat ec2-metadata.
Anda dapat menginstal alat dengan mengikuti tautan ini. Setelah menginstal alat, Anda dapat menjalankan
# ec2-metadata -z
untuk mengetahui wilayah tersebut.
Alat ini diinstal dengan AMI Ubuntu terbaru (10,10),
sumber
ec2-metadata -z
hanya menunjukkan zona ketersediaan, bukan wilayah.Jika Anda ingin mendapatkan wilayah menggunakan JS, ini harusnya berfungsi:
Ini adalah pemetaan yang ditemukan dari AWS DOCS, sebagai respons terhadap panggilan API metadata, cukup pangkas karakter terakhir yang seharusnya berfungsi.
sumber
ec2metadata
(no dash) adalah perintah saat ini untuk memberikan Anda semua info hosting aws tentang kotak EC2 Anda. ini adalah pendekatan yang paling elegan dan aman. (ec2-metadata
adalah perintah lama, tidak lagi valid.)sumber
Metode yang hanya menggunakan egrep, yang seharusnya bisa digunakan pada kebanyakan instance linux yang berputar tanpa harus menginstal tooling tambahan apa pun. Saya menguji ini terhadap daftar semua wilayah AWS saat ini dan semuanya cocok.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Penjelasan dari REGEX:
Jika Anda ingin ini menjadi variabel lakukan:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
sumber
Untuk solusi sed dan curl sepertinya format telah sedikit berubah. Bagi saya bekerja
sumber
Pada titik tertentu karena sebagian besar jawaban ini telah diposting, AWS melakukan hal yang masuk akal dan menerapkan jalur baru:
latest/meta-data/placement/region
.Ini berarti mendapatkan wilayah harus sesederhana
sumber
Anda mungkin mendapatkan wilayah contoh menggunakan permintaan ikal ini
sumber