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 클라이언트는 기본 자격 증명 방법 ( docs.aws.amazon.com/sdk-for-java/v1/developer-guide/…) 에서 AWS 프로파일을 찾을 수 없기 때문 입니다.
mootmoot

답변:


326

어떤 방법으로 kms클라이언트를 만들려는 지역에 boto3에 알려야합니다 . 다음 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 2012 년

1
기존 자원에 액세스하려는 경우 해당 자원이 존재하는 지역을 선택하십시오. 새로운 자원을 만들려는 경우 대부분의 사람들은 빠른 응답 시간을 위해 지리적으로 가장 가까운 지역을 선택합니다. 모든 지역이 동일한 서비스 세트를 지원하는 것은 아니므로 특정 서비스가 필요한 경우이를 지원하는 지역을 선택하십시오.
garnaat

1
어떤 지역에서 어떤 서비스를 제공하는지 알아 보려면 Amazon Web Services 지역 표 aws.amazon.com/about-aws/global-infrastructure/…
Nick

2
"export 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에서 설정 한 cred가 표시됨) 지역을 확인합니다.


3

region_name 매개 변수를 전달하지 않고 스크립트 자체에서 환경 변수를 설정할 수도 있습니다

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

대소 문자 구분이 중요 할 수 있습니다.


AWS_DEFAULT_REGION대소 문자를 구분합니다.
Jaime M.

다음과 같아야합니다 os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' (대문자)
Joe

2

파이썬 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_REGIONUserData 및을 사용하여 환경 변수를 설정할 수 있습니다 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.