240

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

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

4

8 回答 8

514

您必须以一种或另一种方式告诉 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 使用哪个区域。

于 2016-11-02T10:39:40.753 回答
23
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

在我的情况下,敏感性很重要。

于 2019-05-29T19:19:49.680 回答
10

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

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

区分大小写可能很重要。

于 2019-05-14T12:55:51.113 回答
8

对于 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、个人和工作的不同登录使用不同的配置文件。

于 2019-11-25T22:12:10.067 回答
4

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

于 2018-07-24T18:34:38.870 回答
4

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

aws configure --profile $PROFILE_NAME

它会提示您选择该地区。

注意~/.aws/config它是:

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

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

方括号中的[配置文件配置文件名称]

于 2020-09-15T06:59:50.240 回答
1

对于那些使用 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
于 2019-12-24T05:27:08.233 回答
1

如果您使用的是 lambdas,那么您可能希望使用 lambda 部署所在的区域。您可以使用以下内容

import boto3
import json
import os

def lambda_handler(event, context):
    region = os.environ['AWS_REGION']
    print('Lambda region: ', region)
    kms = boto3.client('kms', region_name=region)
于 2022-02-12T14:03:15.353 回答