Найти регион в экземпляре EC2 - PullRequest
112 голосов
/ 22 ноября 2010

Есть ли способ поиска области экземпляра изнутри экземпляра?

Я ищу что-то похожее на метод нахождения идентификатора экземпляра .

Ответы [ 23 ]

5 голосов
/ 17 июля 2017

Используйте JQ:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
4 голосов
/ 21 февраля 2015

Если вы можете использовать AWS Java SDK, теперь существует метод, который возвращает текущее имя региона (например, «us-east-1», «eu-west-1»):

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

4 голосов
/ 28 апреля 2015

Это самое чистое решение, которое я нашел:

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

  • Не вызывает API, использует метаданные экземпляра EC2
  • Используются только curl и basic sed, поэтому вряд ли будут установлены зависимости от SDK или инструментов.
  • Не пытается проанализировать имя зоны доступности, поэтому не стоит беспокоиться, если AWS изменит формат имени AZ / Region
3 голосов
/ 20 февраля 2018

Для тех, кто хочет сделать это с хорошей старой державой

$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 голосов
/ 06 сентября 2017

2 лайнер, который работает до тех пор, пока вы используете ec2.internal в качестве поискового домена:

az=$(curl -s http://instance-data/latest/meta-data/placement/availability-zone)
region=${az:0:${#az} - 1}
3 голосов
/ 06 июня 2017

Если вы работаете с JSON - используйте правильные инструменты. JQ намного мощнее в этом случае.

# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region'
eu-west-1
3 голосов
/ 09 марта 2011

Или не устанавливайте Ubuntu или этот инструмент в качестве требования и просто выполните:

: "${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:]])}"}
3 голосов
/ 24 сентября 2015

Благодаря https://unix.stackexchange.com/a/144330/135640, с bash 4.2+ мы можем просто удалить последний символ из зоны доступности:

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

Это предполагает, что AWS продолжает использовать один символ для зон доступности, добавляемых крегион.

2 голосов
/ 31 мая 2017

Это работает для eu-central-1, а также для различных буквенных зон. (У меня недостаточно представителей для ответа на ответ sed выше)

ec2-metadata --availability-zone | sed 's/[a-z]$//'
1 голос
/ 03 апреля 2019

Также искал решение для поиска региона из экземпляра, и вот мое чистое решение Bash:

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

, если только в регионах, где AZ содержит более двух букв, я не знаюиз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...