Python 如何从boto获取当前用户的区域?

Python 如何从boto获取当前用户的区域?,python,amazon-web-services,amazon-ec2,boto,aws-sdk,Python,Amazon Web Services,Amazon Ec2,Boto,Aws Sdk,问题: 我正在尝试从boto3获取经过身份验证的用户的区域 用例: 我正在努力将缓存添加到。我更喜欢按区域缓存结果 此包使用boto获取用户身份验证数据(密钥和区域)。问题是这个区域从来没有被用户显式地传递过,它是从boto阅读的许多模糊的地方之一获取的,所以我真的没有办法得到它 我尝试过通过api和谷歌搜索,但找不到类似于get\u region或get\u user\u data方法的东西。有可能吗?您应该能够从会话中读取。会话类似于 my_session = boto3.session.S

问题:

我正在尝试从boto3获取经过身份验证的用户的区域

用例:

我正在努力将缓存添加到。我更喜欢按区域缓存结果

此包使用boto获取用户身份验证数据(密钥和区域)。问题是这个区域从来没有被用户显式地传递过,它是从boto阅读的许多模糊的地方之一获取的,所以我真的没有办法得到它


我尝试过通过api和谷歌搜索,但找不到类似于
get\u region
get\u user\u data
方法的东西。有可能吗?

您应该能够从
会话中读取。会话类似于

my_session = boto3.session.Session()
my_region = my_session.region_name

region\u name
基本上定义为
会话。获取配置变量(“region”)
如果您使用的是boto3客户端,另一个选项是:

import boto3
client = boto3.client('s3') # example client, could be any
client.meta.region_name

从这里和其他帖子中获得一些想法,我相信这应该适用于几乎任何设置,无论是本地设置还是任何AWS服务,包括Lambda、EC2、ECS、Glue等:

def detect_running_region():
    """Dynamically determine the region from a running Glue job (or anything on EC2 for
    that matter)."""
    easy_checks = [
        # check if set through ENV vars
        os.environ.get('AWS_REGION'),
        os.environ.get('AWS_DEFAULT_REGION'),
        # else check if set in config or in boto already
        boto3.DEFAULT_SESSION.region_name if boto3.DEFAULT_SESSION else None,
        boto3.Session().region_name,
    ]
    for region in easy_checks:
        if region:
            return region

    # else query an external service
    # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html
    r = requests.get("http://169.254.169.254/latest/dynamic/instance-identity/document")
    response_json = r.json()
    return response_json.get('region')

这些都不适用于我,因为AWS_默认_区域未设置,client.meta.REGION_名称 提供“us-east-1”,我不想使用URL。 如果已经在该区域设置了一个bucket,并且您已经在使用boto3访问它(注意,您不需要区域来访问s3),那么下面的工作(截至8月20日)


万一将来有人需要,您需要实例化会话:
sess=boto3.session.session();sess.region\u name
如果未设置
AWS\u DEFAULT\u region
,或者未在
~/.AWS/config
中配置您的region\u name,则此选项将不起作用。AWS/config
不适用于当前实例,它只会从任何服务器返回“us-east-1”
import boto3
client = boto3.client('s3')
response = client.get_bucket_location(Bucket=bucket_name)
print(response['LocationConstraint'])