问题
I have a boto3 client :
boto3.client('kms')
But it happens on new machines, They open and close dynamically.
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()
Why is this happening? and why only part of the time?
回答1:
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.
回答2:
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'
In my case sensitivity mattered.
回答3:
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.
回答4:
you can also set environment variables in the script itself, rather than passing region_name parameter
os.environ['aws_default_region'] = 'your_region_name'
case sensitivity may matter.
回答5:
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.
来源:https://stackoverflow.com/questions/40377662/boto3-client-noregionerror-you-must-specify-a-region-error-only-sometimes