boto3 client NoRegionError:您有时必须仅指定区域错误

时间:2016-11-02 10:30:19

标签: python linux boto3 aws-kms

我有一个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()

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

7 个答案:

答案 0 :(得分:165)

您必须告诉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使用哪个区域。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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的不同登录。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

对于使用CloudFormation模板的用户。您可以使用UserData和AWS_DEFAULT_REGION设置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

答案 6 :(得分:0)

或者,您可以运行以下命令(aws cli)

aws configure --profile $PROFILE_NAME

它会提示您输入区域。

~/.aws/config中的通知是:

[default]
region = ap-southeast-1
output = json

[profile prod]
region = ap-southeast-1
output = json

[个人资料个人资料名称 ]放在方括号中