Найти регион из экземпляра EC2



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



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

555   22  

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-metadata --availability-zone | sed 's/.$//'

вы можете использовать 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"):

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

использовать 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

    Ничего не найдено.