如何从ec2实例中找到ec2实例的实例id ?


当前回答

如果你想在python中获取所有实例id列表,下面是代码:

import boto3

ec2=boto3.client('ec2')
instance_information = ec2.describe_instances()

for reservation in instance_information['Reservations']:
   for instance in reservation['Instances']:
      print(instance['InstanceId'])

其他回答

您可以通过传递元数据参数发出HTTP请求来获取任何元数据。

curl http://169.254.169.254/latest/meta-data/instance-id

or

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

您不会为获取元数据和用户数据的HTTP请求收费。

Else

您可以使用EC2实例元数据查询工具,这是一个简单的bash脚本,它使用curl从文档中提到的正在运行的EC2实例中查询EC2实例元数据。

下载工具:

$ wget http://s3.amazonaws.com/ec2metadata/ec2-metadata

现在运行命令获取所需的数据。

$ec2metadata -i

参考:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

https://aws.amazon.com/items/1825?externalID=1825

乐意帮忙。:)

一个更现代的解决方案。

在Amazon Linux中已经安装了ec2-metadata命令。

从终点站

ec2-metadata -help

会给你可用的选项吗

ec2-metadata -i

将返回

instance-id: yourid

如果您还需要查询实例ID以外的其他信息,请使用/dynamic/instance-identity/document URL。

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"
}

PHP的替代方法:

$instance = json_decode(file_get_contents('http://169.254.169.254/latest/dynamic/instance-identity/document'),true);
$id = $instance['instanceId'];
print_r($instance);

这将提供大量关于实例的数据,所有数据都很好地打包在一个数组中,没有外部依赖。 因为这是一个从未失败或延迟的请求,所以这样做应该是安全的,否则我将使用curl()

对于powershell用户:

(New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")