Как получить идентификатор экземпляра из экземпляра ec2? - PullRequest
342 голосов
/ 09 марта 2009

Как я могу узнать instance id экземпляра ec2 из экземпляра ec2?

Ответы [ 31 ]

486 голосов
/ 10 марта 2009

См. документацию EC2 по теме .

Пробег:

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

Если вам нужен программный доступ к идентификатору экземпляра из скрипта,

die() { status=$1; shift; echo "FATAL: $*"; exit $status; }
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"

Пример более сложного использования (получение идентификатора экземпляра, а также зоны доступности и региона и т. Д.):

EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"

Вы также можете использовать curl вместо wget, в зависимости от того, что установлено на вашей платформе.

118 голосов
/ 13 мая 2013

В Amazon Linux AMI вы можете сделать:

$ ec2-metadata -i
instance-id: i-1234567890abcdef0

Или, в Ubuntu и некоторых других разновидностях Linux, ec2metadata --instance-id (Эта команда может быть не установлена ​​по умолчанию в Ubuntu, но вы можете добавить ее с помощью sudo apt-get install cloud-utils)

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

57 голосов
/ 15 мая 2012

В Ubuntu вы можете:

sudo apt-get install cloud-utils

И тогда вы можете:

EC2_INSTANCE_ID=$(ec2metadata --instance-id)

Большинство метаданных, связанных с экземпляром, можно получить следующим образом:

ec2metadata --help
Syntax: /usr/bin/ec2metadata [options]

Query and display EC2 metadata.

If no options are provided, all options will be displayed

Options:
    -h --help               show this help

    --kernel-id             display the kernel id
    --ramdisk-id            display the ramdisk id
    --reservation-id        display the reservation id

    --ami-id                display the ami id
    --ami-launch-index      display the ami launch index
    --ami-manifest-path     display the ami manifest path
    --ancestor-ami-ids      display the ami ancestor id
    --product-codes         display the ami associated product codes
    --availability-zone     display the ami placement zone

    --instance-id           display the instance id
    --instance-type         display the instance type

    --local-hostname        display the local hostname
    --public-hostname       display the public hostname

    --local-ipv4            display the local ipv4 ip address
    --public-ipv4           display the public ipv4 ip address

    --block-device-mapping  display the block device id
    --security-groups       display the security groups

    --mac                   display the instance mac address
    --profile               display the instance profile
    --instance-action       display the instance-action

    --public-keys           display the openssh public keys
    --user-data             display the user data (not actually metadata)
43 голосов
/ 22 февраля 2014

Используйте URL-адрес /dynamic/instance-identity/document, если вам также нужно запросить не только идентификатор вашего экземпляра.

wget -q -O - http://169.254.169.254/latest/dynamic/instance-identity/document

Это даст вам JSON данные, такие как эта, только с одним запросом .

{
    "devpayProductCodes" : null,
    "privateIp" : "10.1.2.3",
    "region" : "us-east-1",
    "kernelId" : "aki-12345678",
    "ramdiskId" : null,
    "availabilityZone" : "us-east-1a",
    "accountId" : "123456789abc",
    "version" : "2010-08-31",
    "instanceId" : "i-12345678",
    "billingProducts" : null,
    "architecture" : "x86_64",
    "imageId" : "ami-12345678",
    "pendingTime" : "2014-01-23T45:01:23Z",
    "instanceType" : "m1.small"
}
24 голосов
/ 10 марта 2012

Для .NET Людей:

string instanceId = new StreamReader(
      HttpWebRequest.Create("http://169.254.169.254/latest/meta-data/instance-id")
      .GetResponse().GetResponseStream())
    .ReadToEnd();
21 голосов
/ 11 ноября 2013

в AWS Linux:

ec2-metadata --instance-id | cut -d " " -f 2

Выход:

i-33400429

Использование в переменных:

ec2InstanceId=$(ec2-metadata --instance-id | cut -d " " -f 2);
ls "log/${ec2InstanceId}/";
18 голосов
/ 20 июня 2013

Для Python:

import boto.utils
region=boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]

, которая сводится к однострочному:

python -c "import boto.utils; print boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]"

Вместо local_hostname вы также можете использовать public_hostname или:

boto.utils.get_instance_metadata()['placement']['availability-zone'][:-1]
17 голосов
/ 13 июля 2012

Для людей PowerShell:

(New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")
12 голосов
/ 10 марта 2009

См. в этом сообщении - обратите внимание, что IP-адрес в указанном URL-адресе является постоянным (что меня сначала смутило), но возвращаемые данные относятся к вашему экземпляру.

8 голосов
/ 27 августа 2014

Более современное решение.

В Amazon Linux команда ec2-metadata уже установлена.

Из терминала

ec2-metadata -help

Даст вам доступные варианты

ec2-metadata -i

вернет

instance-id: yourid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...