22 ответов:
этот URL (http://169.254.169.254/latest/dynamic/instance-identity/document) больше не работает. Я получаю 404, когда я пытался использовать его. У меня есть следующий код, который, кажется, сработало:
EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone` EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"надеюсь, что это помогает.
EDIT: улучшение
sedна основе комментариев
есть еще один способ добиться этого:
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print }'` echo $REGION us-east-1
Если вы в порядке с использованием
jq, вы можете выполнить следующее:curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq .region -rЯ думаю, это отличный способ.
вы можете использовать EC2-метаданные:
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
очень простой один лайнер
export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone` export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}
Если вы хотите избежать регулярного выражения, вот один лайнер, который вы можете сделать с Python:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']"
самый простой я нашел до сих пор
curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'
получить регион из зоны доступности, удалить последнюю букву из него.
ec2-metadata -z | awk '{print }' | sed 's/[a-z]$//'
Если вы в состоянии использовать AWS SDK для Java, сейчас существует метод, который будет возвращать текущее название региона (например, "нас-Восток-1", "ЕС-Запад-1"):
использовать JQ:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
или не делайте 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:]])}"}
Это самое чистое решение, которое я нашел:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"//p'например,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"//p')
- не вызывает API, использует метаданные экземпляра EC2
- использует только curl и basic sed, поэтому никакие зависимости от SDK или инструментов вряд ли будут установлены.
- не пытается анализировать имя зоны доступности, поэтому не беспокойтесь, если AWS изменит формат имени AZ/Region
2 лайнер, который работает до тех пор, как вы используете ec2.внутренний как ваш домен поиска:
az=$(curl -s http://instance-data/latest/meta-data/placement/availability-zone) region=${az:0:${#az} - 1}
Спасибо 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 продолжает использовать один символ для зон доступности, добавленных к региону.
для тех, кто хочет сделать это с хорошим ol powershell
$var = (curl http://169.254.169.254/latest/dynamic/instance-identity/document | Select-String-Pattern "Zone" | ConvertFrom-Json | Select-Object -ExpandProperty "region") echo $var
Если вы работаете с json-используйте правильные инструменты. jq очень мощный в этом случае.
# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region' eu-west-1
это работает для eu-central-1, а также различных буквенных зон. (У меня недостаточно репутации, чтобы ответить на ответ sed выше)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
очень простое решение в конце концов я нашел после прочтения этих ответов:
$ hostname -f | cut -d'.' -f2пример :
[centos@ip-172-31-10-75 ~]$ имя хоста-f
ip-172-31-10-75. us-west-1. compute. internal
[centos@ip-172-31-10-75 ~]$
[centos@ip-172-31-10-75 ~]$ имя хоста-f / cut-d'.'- f2
США-Запад-1
для получения информации о EC2 вы вошли в систему, вы можете использовать ec2-инструмент метаданных.
вы можете установить программу, следуя этой ссылке. После установки инструмента, вы можете запустить
# ec2-metadata -zчтобы узнать регион.
этот инструмент поставляется с последней версией (10.10) Ubuntu AMIs,
Если вы хотите получить регион с помощью JS, это должно работать :
meta.request("/latest/meta-data/placement/availability-zone",function(err,data){ if(err) console.log(err); else{ console.log(data); str = data.substring(0, data.length - 1); AWS.config.update({region:str}); ec2 = new AWS.EC2(); } });это было сопоставление, найденное из AWS DOCS, в ответ на вызов metadata API, просто обрезать последний символ должен работать.
eu-west-1a :eu-west-1 eu-west-1b :eu-west-1 eu-west-1c :eu-west-1 us-east-1a :us-east-1 us-east-1b :us-east-1 us-east-1c :us-east-1 us-east-1d :us-east-1 ap-northeast-1a :ap-northeast-1 ap-northeast-1b :ap-northeast-1 us-west-1a :us-west-1 us-west-1b :us-west-1 us-west-1c :us-west-1 ap-southeast-1a :ap-southeast-1 ap-southeast-1b :ap-southeast-1
Если у вас jq установлен, вы также можете пойти об этом (вероятно, самый "изящный" метод) таким образом:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .regionЭто просто возвращает необработанное значение "регион" без какой-либо красивой печати или другого форматирования. Ссылка: форум AWS
Comments