boto3 client NoRegionError: Ви повинні вказувати помилку в регіоні лише іноді


147

У мене є клієнт 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()

Чому це відбувається? і чому лише частина часу?


Оскільки boto3 клієнт не може знайти AWS профіль з набору методу мандатної по замовчуванням: docs.aws.amazon.com/sdk-for-java/v1/developer-guide / ... .
mootmoot

Відповіді:


326

Так чи інакше, ви повинні повідомити boto3, в якому регіоні ви хочете kmsстворити клієнта. Це можна зробити явно за допомогою region_nameпараметра, як у:

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

або у вашому ~/.aws/configфайлі може бути асоційована область за замовчуванням, як у:

[default]
region=us-west-2

або ви можете використовувати змінну середовища як у:

export AWS_DEFAULT_REGION=us-west-2

але вам потрібно сказати boto3, який регіон використовувати.


2
Як я знаю, який регіон використовувати?
jononomo

1
Якщо ви намагаєтеся отримати доступ до існуючих ресурсів, виберіть регіон, у якому ці ресурси існують. Якщо ви збираєтеся створювати нові ресурси, більшість людей вибирають регіон, який є найближчим до них географічно для швидшого часу реагування. Не всі регіони підтримують однаковий набір послуг, тому якщо вам потрібна певна послуга, переконайтесь, що ви вибрали регіон, який її підтримує.
garnaat

1
Щоб дізнатися, які регіони надають які послуги: Таблиця регіонів
Nick

2
чи знаєте ви, чому "експортувати AWS_DEFAULT_REGION = us-west-2" або ~ / .aws / config файл не працює
fatih tekin

3
Я б хотів, щоб boto3 міг просто використовувати область екземпляра ec2, на якій працює код.
Selçuk Cihan

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

У моєму випадку важливість мала значення.


4

Я вважаю, що за замовчуванням boto вибирає регіон, який встановлений у aws cli. Ви можете запустити команду #aws configure та натиснути клавішу enter (вона показує, які кредити ви встановили в aws cli з регіоном), щоб підтвердити свій регіон.


3

Ви також можете встановити змінні середовища в самому сценарії, а не передавати параметр region_name

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

чутливість регістру може мати значення.


AWS_DEFAULT_REGIONчутливий до регістру.
Хайме М.

Це повинно бути: os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' (верхній регістр)
Джо

2

Для Python 2 я виявив, що бібліотека boto3 не джерело області, ~/.aws/configякщо область визначена в іншому профілі за замовчуванням. Отже, ви повинні визначити це під час створення сеансу.

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

print(session.available_profiles)

client = session.client(
    'ec2'
)

Де мій ~/.aws/configфайл виглядає так:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

Я роблю це, бо використовую різні профілі для різних входів до AWS, Personal і Work.


0

Для тих, хто використовує шаблон CloudFormation. Ви можете встановити AWS_DEFAULT_REGIONзмінну середовища за допомогою UserData та AWS::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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.