2017-05-06 145 views
2

我嘗試在ec2實例上啓動服務。該服務應該發出實例的ID。我知道這可以通過使用諸如curl http://0.0.0.0/latest/meta-data之類的東西來獲得。有沒有其他方法可以直接從實例shell或python中的某些API獲取元數據?有沒有辦法在ec2實例中獲取實例ID

回答

4

亞馬遜EC2 instance metadata可以通過以下方式訪問:

http://169.254.169.254/latest/meta-data/ 

要檢索實例的ID從其中該請求是由:

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

這可以通過捲曲,wget的,網頁被檢索瀏覽器或任何可撥打電話以檢索HTTP頁面

如果你想以編程方式做到這一點,這裏是從boto3 equivalent to boto.utils.get_instance_metadata()?一些代碼:

# Python2 
import urllib2 
instanceid = urllib2.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read() 

# Python3 
import urllib.request 
instanceid = urllib.request.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read().decode() 

還有一個boto.utils.get_instance_metadata() call in boto(但不是boto3)返回實例元數據作爲嵌套的Python字典。

+0

這真的很有用!非常感謝 –

+0

您好@WangNick,如果這個或任何答案已經解決了您的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 –