[python] boto3 client NoRegionError : 가끔씩 만 지역 오류를 지정해야합니다.

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

왜 이런 일이 발생합니까? 왜 시간의 일부인가?



답변

어떤 방법으로 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에게 알려줘야합니다.


답변

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

제 경우에는 감도가 중요했습니다.


답변

기본적으로 boto는 aws cli에 설정된 지역을 선택한다고 생각합니다. #aws configure 명령을 실행하고 Enter 키를 누르면 (지역에 따라 aws cli에서 설정 한 cred가 표시됨) 지역을 확인합니다.


답변

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

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

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


답변

파이썬 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에 대한 다른 로그인에 다른 프로파일을 사용하기 때문에이 작업을 수행합니다.


답변

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


답변