Есть ли способ найти регион экземпляра внутри экземпляра?
Ищу что-то похожее на метод поиска идентификатора экземпляра .
amazon-ec2
amazon-web-services
Гэри Ричардсон
источник
источник
http://169.254.169.254/latest/meta-data/placement/availability-zone
и удалить последний символ.http://169.254.169.254/latest/meta-data/placement/region
Ответы:
Этот URL-адрес ( http://169.254.169.254/latest/dynamic/instance-identity/document ), похоже, больше не работает. Я получаю 404, когда пытался его использовать. У меня есть следующий код, который, похоже, работает:
Надеюсь это поможет.
РЕДАКТИРОВАТЬ: улучшено
sed
на основе комментариевисточник
ec2-metadata
это просто оболочка для этого API, но, по сути, делает то же самое.sed 's/[a-z]$//
Есть еще один способ добиться этого:
источник
404 - Not Found
пытаюсь перейти поGET
этому URL-адресу с компьютера в доменеus-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}'
Если вы согласны с использованием
jq
, вы можете запустить следующее:Думаю, это самый чистый способ.
источник
Для систем на базе Debian команда не должна содержать тире.
источник
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
похоже, что это не то, что доступно по умолчанию - можете ли вы включить инструкции по установке?Если вы хотите избежать регулярных выражений, вот однострочник, который вы можете сделать с помощью Python:
источник
Вы можете использовать метаданные ec2:
источник
eu-central-1
вы облажались.central
не существовало, когда я изначально написал свой ответ. Это добавлено сейчас.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
сохранятся только первые два компонента имени AZ.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]*'
кажется более безопасным (это базовое регулярное выражение, его можно сделать короче с помощью расширенного RE). (Текущее регулярное выражение разбивается наca
регион,af
регионы иme
регион)Самый простой, который я нашел до сих пор
источник
очень простой однострочник
источник
curl: (6) Could not resolve host: instance-data; Name or service not known
ошибку.Если у вас установлен jq , вы также можете сделать это (вероятно, самый «изящный» метод) следующим образом:
Это просто возвращает исходное значение «региона» без какой-либо красивой печати или другого форматирования. Ссылка: AWS Forum
источник
Достать регион из зоны доступности, убрать последнюю букву из него.
источник
Используйте JQ:
источник
Если вы можете использовать AWS Java SDK, теперь существует метод, который возвращает текущее имя региона (например, «us-east-1», «eu-west-1»):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
источник
Это самое чистое решение, которое я нашел:
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')
источник
Благодаря https://unix.stackexchange.com/a/144330/135640 , с bash 4.2+ мы можем просто удалить последний символ из зоны доступности:
Это предполагает, что AWS продолжает использовать один символ для зон доступности, добавленных к региону.
источник
region=${region%?}
2, который работает, пока вы используете ec2.internal в качестве поискового домена:
источник
Для всех, кто хочет сделать это с помощью старого доброго PowerShell
источник
Или не делайте Ubuntu или этот инструмент обязательными, а просто выполните:
источник
Если вы работаете с json - используйте правильные инструменты. jq очень мощный в этом случае.
источник
Это работает для eu-central-1, а также для различных буквенных зон. (У меня недостаточно репутации, чтобы ответить на ответ sed выше)
источник
ec2metadata --availability-zone | sed 's/.$//'
(без тире)Если вы работаете в Windows, вы можете использовать эту однострочную оболочку PowerShell:
источник
Также искал решение для поиска региона из экземпляра, и вот мое чистое решение Bash:
если нет регионов, где AZ имеет более двух букв, о которых я не знаю.
источник
В какой - то момент , так как это большинство из этих ответов были размещены, AWS сделал разумную вещь и реализован новый путь:
latest/meta-data/placement/region
.Это означает, что получение региона должно быть таким же простым, как
источник
Чтобы узнать информацию о EC2, в которую вы вошли, вы можете использовать инструмент ec2-metadata.
Вы можете установить инструмент, перейдя по этой ссылке. После установки инструмента вы можете запустить
# ec2-metadata -z
чтобы узнать регион.
Эти инструменты установлены с последними (10.10) образцами Ubuntu AMI,
источник
ec2-metadata -z
показывает только зону доступности, а не регион.Если вы хотите получить регион с помощью JS, это должно сработать:
Это было сопоставление, найденное из AWS DOCS, в ответ на вызов API метаданных, просто обрезать последний символ должно работать.
источник
ec2metadata
(без тире) - это текущая команда, которая предоставляет вам всю информацию о хостинге aws для вашего блока ec2. это самый элегантный и безопасный подход. (ec2-metadata
это старая, уже недействительная команда.)источник
Метод, использующий только egrep, который должен работать на большинстве запущенных экземпляров Linux без необходимости установки каких-либо дополнительных инструментов. Я проверил это по списку всех текущих регионов AWS, и все они совпадают.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Пояснение к REGEX:
Если вы хотите, чтобы это было в переменной, выполните:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
источник
Для решения sed и curl похоже, что формат немного изменился. У меня работает
источник
Вы можете получить регион экземпляра, используя этот запрос curl
источник