Есть ли способ поиска области экземпляра из экземпляра?
Я ищу что-то похожее на метод поиска идентификатора экземпляра.
Есть ли способ поиска области экземпляра из экземпляра?
Я ищу что-то похожее на метод поиска идентификатора экземпляра.
Этот 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
на основе комментариев
Есть еще один способ добиться этого:
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
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-metadata:
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
Если вы хотите избежать регулярного выражения, здесь вы можете сделать однострочный код с 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/.$//'
очень простой один вкладыш
export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}
Если у вас установлен jq, вы также можете пойти по этому пути (возможно, самый "изящный" метод) следующим образом:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .region
Это просто возвращает необработанное значение "region" без какой-либо симпатичной печати или другого форматирования. Ссылка: Форум AWS
Получите область из зоны доступности, удалите последнюю ее букву.
ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//'
Использовать JQ:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
Если вы можете использовать SDK Java SDK, теперь есть метод, который будет возвращать текущее имя региона (например, "us-east-1", "eu-west-1" ):
Это самое чистое решение, которое я нашел:
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+ мы можем просто удалить последний char из зоны доступности:
$ region=`curl -s 169.254.169.254/latest/meta-data/placement/availability-zone`
$ region=${region::-1}
$ echo $region
us-east-1
Это предполагает, что AWS продолжает использовать один символ для зон доступности, присоединенных к региону.
Или не делайте 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:]])}"}
Если вы работаете с json - используйте нужные инструменты. jq значительно мощнее в этом случае.
# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region'
eu-west-1
2, который работает до тех пор, пока вы используете ec2.internal в качестве поискового домена:
az=$(curl -s http://instance-data/latest/meta-data/placement/availability-zone)
region=${az:0:${#az} - 1}
Для тех, кто хочет сделать это с хорошим старом 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
Это работает для eu-central-1, а также для различных буквенных зон. (У меня недостаточно представителей, чтобы ответить на ответ sed выше)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
Если вы работаете в Windows, вы можете использовать эту однострочную оболочку PowerShell:
$region=(Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").region
Также искал решение, чтобы найти регион из экземпляра, и вот мое чистое решение Bash:
az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
region=${az:0:${#az}-1}
разве что есть регионы, где у АЗ больше двух букв, о которых я не знаю.
Чтобы узнать информацию о EC2, в которую вы вошли, вы можете использовать ec2-metadata.
Вы можете установить этот инструмент, выполнив эту ссылку. После установки инструмента вы можете запустить
# ec2-metadata -z
чтобы узнать область.
Эти инструменты устанавливаются с последними (10.10) AMI Ubuntu,
Если вы хотите получить регион с помощью 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
ec2metadata
(без черточки) - это текущая команда, чтобы предоставить вам всю информацию о хостинге aws о вашей коробке ec2. это самый элегантный и безопасный подход. (ec2-metadata
- старая недействительная команда.)