[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_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