2016-11-02 41 views
22

Mam klienta boto3:boto3 NoRegionError klient: Musisz podać błąd regionu tylko czasami

boto3.client('kms') 

Ale zdarza się na nowych maszynach, oni otwierać i zamykać dynamicznie.

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

Dlaczego tak się dzieje? i dlaczego tylko część czasu?

+0

Ponieważ klient boto3 nie może znaleźć profilu AWS z zestawu domyślnych poświadczeń: http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html. – mootmoot

Odpowiedz

47

Tak czy inaczej musisz powiedzieć boto3, w którym regionie chcesz utworzyć klienta kms. Można to zrobić bezpośrednio za pomocą parametru region_name jak w:

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

czy można mieć domyślny obszar powiązany z Twoim profilem w pliku ~/.aws/config jak w:

[default] 
region=us-west-2 

lub użyć środowiska zmienna jak w:

export AWS_DEFAULT_REGION=us-west-2 

, ale musisz powiedzieć boto3, który region ma być użyty.

+0

Skąd mam wiedzieć, z jakiego regionu korzystać? – jononomo

+0

Jeśli próbujesz uzyskać dostęp do istniejących zasobów, wybierz region, w którym te zasoby istnieją. Jeśli zamierzasz tworzyć nowe zasoby, większość ludzi wybiera region, który jest im najbliższy geograficznie, aby uzyskać szybsze czasy reakcji. Nie wszystkie regiony obsługują ten sam zestaw usług, więc jeśli potrzebujesz konkretnej usługi, wybierz region, który ją obsługuje. – garnaat

+0

Chyba moje pytanie brzmi: skąd mam wiedzieć, który region już wybrałem? Przypuszczam, że musi to być gdzieś w interfejsie AWS ... – jononomo