In regular boto 2.38 I used to access instance metadata (e.g. get current stack-name), through boto's
boto.utils.get_instance_metadata()
Is there an equivalent in boto3, or do I need to go to the down level direct http address to fetch metadata about the running instance?
Nope, still no equivalent in boto3, just hit this gap myself.
They have an open feature request for this https://github.com/boto/boto3/issues/313 that references this question.
As for workarounds,
you can continue to use boto.utils
or use urllib
/urllib2
to do the HTTP requests manually ie.
# 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()
see What is the quickest way to HTTP GET in Python? for a quick intro on urllib and http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-data-categories for the URI structure of the metadata service.