I try to launch a service on ec2 instance. the service is supposed to send out the id of the instance. I know this could be obtained using something like curl http://0.0.0.0/latest/meta-data
. is there any other ways that you could directly get the meta data maybe from the instance shell or some APIs in python?
Asked
Active
Viewed 6,538 times
10

Wang Nick
- 385
- 1
- 6
- 17
1 Answers
18
Amazon EC2 instance metadata can be accessed via:
http://169.254.169.254/latest/meta-data/
To retrieve the ID of the instance from which that request is made:
http://169.254.169.254/latest/meta-data/instance-id/
This can be retrieved by curl, wget, web browser or anything that makes a call to retrieve an HTTP page.
If you wish to do it programmatically, here's some code from 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()
There is also a boto.utils.get_instance_metadata()
call in boto (but not boto3) that returns the instance metadata as a nested Python dictionary.

Community
- 1
- 1

John Rotenstein
- 241,921
- 22
- 380
- 470
-
That's really useful!! thanks a lot – Wang Nick May 06 '17 at 05:54
-
1Hi @WangNick, if this or any answer has solved your question please consider [accepting it](http://meta.stackexchange.com/q/5234/179419) by clicking the check-mark. This indicates to the wider community that you've found a solution and gives some reputation to both the answerer and yourself. There is no obligation to do this. – John Rotenstein May 06 '17 at 14:13