Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Этот 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]$//''"

Надеюсь это поможет.

РЕДАКТИРОВАТЬ: Улучшено sed на основе комментариев

Ответ 2

Есть еще один способ добиться этого:

REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`

echo $REGION

us-east-1

Ответ 3

Если вы используете jq, вы можете запустить следующее:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq .region -r

Я думаю, это самый чистый способ.

Ответ 4

ec2-metadata --availability-zone | sed 's/.$//'

Ответ 5

Вы можете использовать ec2-metadata:

ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"

Ответ 6

Если вы хотите избежать регулярного выражения, здесь вы можете сделать однострочный код с 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']"

Ответ 7

Проще всего я нашел до сих пор

 curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'

Ответ 8

очень простой один вкладыш

export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}

Ответ 9

Если у вас установлен jq, вы также можете пойти по этому пути (возможно, самый "изящный" метод) следующим образом:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .region

Это просто возвращает необработанное значение "region" без какой-либо симпатичной печати или другого форматирования. Ссылка: Форум AWS

Ответ 10

Получите область из зоны доступности, удалите последнюю ее букву.

ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//'

Ответ 11

Использовать JQ:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region

Ответ 13

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

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

Ответ 14

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

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

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

Ответ 15

Или не делайте 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:]])}"}

Ответ 16

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

# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region'
eu-west-1

Ответ 17

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

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

Ответ 18

Для тех, кто хочет сделать это с хорошим старом 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

Ответ 19

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

ec2-metadata --availability-zone | sed 's/[a-z]$//'

Ответ 20

Если вы работаете в Windows, вы можете использовать эту однострочную оболочку PowerShell:

$region=(Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").region

Ответ 21

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

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

разве что есть регионы, где у АЗ больше двух букв, о которых я не знаю.

Ответ 22

Чтобы узнать информацию о EC2, в которую вы вошли, вы можете использовать ec2-metadata.

Вы можете установить этот инструмент, выполнив эту ссылку. После установки инструмента вы можете запустить

# ec2-metadata -z

чтобы узнать область.

Эти инструменты устанавливаются с последними (10.10) AMI Ubuntu,

Ответ 23

Если вы хотите получить регион с помощью 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, в ответ на вызов 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

Ответ 24

ec2metadata (без черточки) - это текущая команда, чтобы предоставить вам всю информацию о хостинге aws о вашей коробке ec2. это самый элегантный и безопасный подход. (ec2-metadata - старая недействительная команда.)