For some use cases, it’s not feasible to rely on an EC2 instance having any boto or AWS configuration information available (e.g., you are using an instance profile/role instead of API keys). This is a problem when it comes to establishing client sessions with services and you need to set the default region as an attribute to the boto3.setup_default_session() module.
Here’s one way to solve this problem via pulling the availability-zone element out of EC2 instance metadata, and then filtering that to drop the AZ portion (e.g., us-east-1b -> us-east-1).
First, import the urllib2 module into your code (Python 2.x):
Then, create a function like so that returns the AWS region name to the calling program:
def get_aws_region(): # still no equivalent of boto.utils in boto3, so I have to do this janky thing... myAz = urllib2.urlopen('http://169.254.169.254/latest/meta-data/placement/availability-zone').read() myRegion = myAz[:-1] return myRegion