boto3客户端NoRegionError:仅在某些情况下必须指定区域错误


147

我有一个boto3客户程序:

boto3.client('kms')

但是它发生在新机器上,它们动态地打开和关闭。

    if endpoint is None:
        if region_name is None:
            # Raise a more specific error message that will give
            # better guidance to the user what needs to happen.
            raise NoRegionError()

为什么会这样呢?为什么只有部分时间呢?


由于boto3客户端无法找到设置默认凭据方法的AWS简介:docs.aws.amazon.com/sdk-for-java/v1/developer-guide/...
mootmoot

Answers:


325

您必须以一种或另一种方式告诉boto3您希望在哪个区域kms创建客户端。可以使用region_name参数明确地完成此操作,如下所示:

kms = boto3.client('kms', region_name='us-west-2')

或者,您可以在~/.aws/config文件中拥有一个与个人资料相关联的默认区域,如下所示:

[default]
region=us-west-2

或者您可以使用如下环境变量:

export AWS_DEFAULT_REGION=us-west-2

但您确实需要告诉boto3使用哪个区域。


2
我怎么知道自己要使用哪个区域?
jononomo

1
如果尝试访问现有资源,请选择这些资源所在的区域。如果您要创建新资源,大多数人会选择一个地理上最接近他们的区域,以加快响应速度。并非所有区域都支持同一组服务,因此,如果需要特定服务,请确保选择支持该服务的区域。
garnaat

1
要找出哪些区域提供了哪些服务:Amazon Web Services区域表aws.amazon.com/about-aws/global-infrastructure/…–
尼克

2
您知道为什么“导出AWS_DEFAULT_REGION = us-west-2”或〜/ .aws / config文件不起作用
fatih tekin

3
我希望boto3可以只使用运行代码的ec2实例的区域。
塞尔丘克吉汗

12
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

就我而言,敏感性很重要。


4

我相信默认情况下,boto会选择aws cli中设置的区域。您可以运行#aws configure命令,然后按Enter键(它显示您在aws cli中使用区域设置的凭据)两次以确认您的区域。


3

您还可以在脚本本身中设置环境变量,而不是传递region_name参数

os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

区分大小写可能很重要。


AWS_DEFAULT_REGION区分大小写。
Jaime M.

应该是:(os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' 大写)

2

对于Python 2,我发现,~/.aws/config如果在默认的其他配置文件中定义了区域,则boto3库不会从中获取区域。因此,您必须在会话创建中对其进行定义。

session = boto3.Session(
    profile_name='NotDefault',
    region_name='ap-southeast-2'
)

print(session.available_profiles)

client = session.client(
    'ec2'
)

我的~/.aws/config文件如下所示:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

之所以这样做,是因为我将不同的配置文件用于对AWS,Personal和Work的不同登录。


0

对于那些使用CloudFormation模板的人。您可以AWS_DEFAULT_REGION使用UserData和设置环境变量AWS::Region。例如,

MyInstance1:
    Type: AWS::EC2::Instance                
    Properties:                           
        ImageId: ami-04b9e92b5572fa0d1 #ubuntu
        InstanceType: t2.micro
        UserData: 
            Fn::Base64: !Sub |
                    #!/bin/bash -x

                    echo "export AWS_DEFAULT_REGION=${AWS::Region}" >> /etc/profile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.