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

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


当前回答

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

操作系统。environ['AWS_DEFAULT_REGION'] = 'your_region_name'

大小写敏感性可能很重要。

其他回答

地区= [ “eu-north-1”、“ap-south-1’,‘eu-west-3’,‘eu-west-2’, 'eu-west-1', 'ap-northeast-3', 'ap-northeast-2' 'ap-northeast-1' 'sa-east-1' 'ca-central-1', “ap-southeast-2”、“eu-central-1’,‘us-east-1’,‘us-east-2’, “us-west-1”、“us-west-2 '] 对于地区: KMS = boto3。客户端('kms', region_name= r)

对于那些使用CloudFormation模板。可以使用UserData和AWS::Region设置环境变量AWS_DEFAULT_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

对于python2,我发现boto3库并没有从~/。如果区域定义在与default不同的配置文件中,则使用Aws /config。 所以你必须在会话创建中定义它。

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

print(session.available_profiles)

client = session.client(
    'ec2'
)

我的~/。Aws /配置文件是这样的:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

我这样做是因为我使用不同的配置文件登录AWS,个人和工作。

如果您使用AWS Lambda,您的代码将在部署时工作, 因为Lambda被部署在特定的区域。

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

对我来说,敏感很重要。