Search code examples
pythonamazon-web-servicesamazon-s3boto3

How to get the region of a boto3 S3 resource instance


I instantiate a boto3 S3 resource like this (code simplified):

import os
from pathlib import Path
import boto3


s3_resource = boto3.resource(
    "s3",
    aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),
    aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
    # NOTE: My config is:
        # [default]
        # region = eu-west-1
    region_name=os.getenv("region_name"),
)

How can I get the region to which the S3 resource is associated? Is there an attribute of the class / instance I can query?

I checked the boto3 docs for the S3 Service Resource object but couldn't find such an attribute. I also checked this related question but it relates to the client not resource object from boto3.

Context: I want to check the region so that I can ensure that my ~/.aws/config is being read to supply the region, since checking what os.getenv("region_name") returns None since I have no such environmental variable. If you can answer this question too, it's a bonus. As cited in the code, my config points to the eu-west-1 region.

I'm new to using S3 programmatically inside Python (I've mostly used the AWS CLI) so please suggest edits to the question if necessary.


Solution

  • Well, every boto3 resource has a client in meta, so you can do this:

    s3_resource.meta.client._client_config.region_name