boto3 client NoRegionError: You must specify a region error only sometimes

后端 未结 7 1630
误落风尘
误落风尘 2021-01-30 07:30

I have a boto3 client :

boto3.client(\'kms\')

But it happens on new machines, They open and close dynamically.

    if endpoint         


        
相关标签:
7条回答
  • 2021-01-30 08:15

    For Python 2 I have found that the boto3 library does not source the region from the ~/.aws/config if the region is defined in a different profile to default. So you have to define it in the session creation.

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

    Where my ~/.aws/config file looks like this:

    [default]
    region=ap-southeast-2
    
    [NotDefault]
    region=ap-southeast-2
    

    I do this because I use different profiles for different logins to AWS, Personal and Work.

    0 讨论(0)
  • 2021-01-30 08:21

    I believe, by default, boto picks the region which is set in aws cli. You can run command #aws configure and press enter (it shows what creds you have set in aws cli with region)twice to confirm your region.

    0 讨论(0)
  • 2021-01-30 08:26

    Alternatively you can run the following (aws cli)

    aws configure --profile $PROFILE_NAME
    

    it'll prompt you for the region.

    notice in ~/.aws/config it's:

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

    [profile profile name] in the square brackets

    0 讨论(0)
  • 2021-01-30 08:29

    One way or another you must tell boto3 in which region you wish the kms client to be created. This could be done explicitly using the region_name parameter as in:

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

    or you can have a default region associated with your profile in your ~/.aws/config file as in:

    [default]
    region=us-west-2
    

    or you can use an environment variable as in:

    export AWS_DEFAULT_REGION=us-west-2
    

    but you do need to tell boto3 which region to use.

    0 讨论(0)
  • 2021-01-30 08:30

    For those using CloudFormation template. You can set AWS_DEFAULT_REGION environment variable using UserData and AWS::Region. For example,

    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
    
    0 讨论(0)
  • 2021-01-30 08:31
    os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'
    

    In my case sensitivity mattered.

    0 讨论(0)
提交回复
热议问题