我运行此命令以从EC2实例获取实例ID,请求如何处理以及服务如何知道要发回的详细信息?
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
感谢
答案 0 :(得分:24)
在较高级别,wget
是一个启动HTTP Web请求(伪装成浏览器)的命令,这些选项告诉它将stdout的结果响应吐出(你看到的内容)。
由于EC2 dom0主机控制着虚拟机中运行的实例所看到的网络堆栈,因此EC2可以任意方式处理169.254.169.254的网络流量。
在这种情况下,EC2知道发出请求的实例(无论是基于EC2控制的内部IP地址,还是基于dom0主机在通过网络发送请求之前处理请求的事实)。
因此,EC2知道发出请求的实例是什么,EC2知道每个实例的所有信息,因此EC2可以返回请求的元数据,包括实例ID。
亚马逊尚未准确发布他们如何实施此功能,但他们确实会保证它会为请求实例返回正确的数据,而不会有任何其他人干扰。
您可以在此处了解有关可用EC2元数据的更多信息:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?AESDG-chapter-instancedata.html
魔术IP地址169.254.169.254和相应的元数据URL在EC2实例之外不起作用,除非您碰巧在试图模拟EC2的系统上运行。
答案 1 :(得分:5)
您可以使用ec2metadata
ec2metadata --instance-id