boto3 istemcisi NoRegionError: Yalnızca bazen bir bölge hatası belirtmelisiniz


147

Bir boto3 istemcim var:

boto3.client('kms')

Ama yeni makinelerde olur, Dinamik olarak açılır ve kapanırlar.

    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()

Bu neden oluyor? ve neden zamanın sadece bir parçası?


Boto3 istemcisi AWS profilini varsayılan kimlik bilgileri yönteminden bulamadığı için : docs.aws.amazon.com/sdk-for-java/v1/developer-guide/… .
mootmoot

Yanıtlar:


326

Bir şekilde boto3'e kmsistemcinin hangi bölgede oluşturulmasını istediğinizi söylemelisiniz . Bu, aşağıdaki gibi region_nameparametre kullanılarak açıkça yapılabilir :

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

veya dosyanızdaki profilinizle ilişkilendirilmiş varsayılan bir bölgeye sahip olabilirsiniz ~/.aws/config:

[default]
region=us-west-2

veya aşağıdaki gibi bir ortam değişkeni kullanabilirsiniz:

export AWS_DEFAULT_REGION=us-west-2

ancak hangi bölgeyi kullanacağınızı boto3'e söylemeniz gerekir.


2
Hangi bölgeyi kullanacağımı kendim nasıl bilebilirim?
jononomo

1
Mevcut kaynaklara erişmeye çalışıyorsanız, bu kaynakların bulunduğu bölgeyi seçin. Yeni kaynaklar oluşturacaksanız, çoğu insan daha hızlı yanıt süreleri için coğrafi olarak kendilerine en yakın olan bölgeyi seçer. Tüm bölgeler aynı hizmet kümesini desteklemez, bu nedenle belirli bir hizmete ihtiyacınız varsa, onu destekleyen bir bölge seçtiğinizden emin olun.
Garnaat

1
Hangi bölgelerin hangi hizmetleri sunduğunu
Nick

2
"dışarı aktar AWS_DEFAULT_REGION = us-west-2" veya ~ / .aws / config dosyasının neden çalışmadığını biliyor musunuz
fatih tekin

3
Keşke boto3 sadece kodu çalıştıran ec2 örneği bölgesini kullanabilirsiniz.
Selçuk Cihan

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

Benim durumumda hassasiyet önemliydi.


4

Ben boto varsayılan olarak aws cli ayarlanmış bölgeyi alır inanıyorum. Bölgenizi onaylamak için #aws configure komutunu çalıştırabilir ve enter tuşuna basabilirsiniz (bölgeyle aws cli'da hangi kredileri ayarladığınızı gösterir).


3

region_name parametresini iletmek yerine ortam değişkenlerini betiğin kendisinde de ayarlayabilirsiniz

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

büyük / küçük harf duyarlılığı önemli olabilir.


AWS_DEFAULT_REGIONbüyük / küçük harfe duyarlıdır.
Jaime

Olması gereken: os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' (büyük harf)
Joe

2

Python 2 için, boto3 kütüphanesinin bölgeyi ~/.aws/configvarsayılan olarak farklı bir profilde tanımlanmışsa bölgeden kaynaklamadığını fark ettim . Bu yüzden bunu oturum oluşturmada tanımlamanız gerekir.

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

print(session.available_profiles)

client = session.client(
    'ec2'
)

Nerede benim ~/.aws/configdosya gibi görünüyor:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

Bunu yapıyorum çünkü AWS, Kişisel ve İş için farklı girişler için farklı profiller kullanıyorum.


0

CloudFormation şablonunu kullananlar için. AWS_DEFAULT_REGIONOrtam değişkenini UserData ve öğesini kullanarak ayarlayabilirsiniz AWS::Region. Örneğin,

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.