2016-12-12 5 views
1

DynamoDB 데이터베이스에 대한 작업을 처리하는 클래스를 만들고 있습니다. 하나의 테이블 만 가진 단순한 데이터베이스가 될 것입니다.raise NoRegionError() - 영역을 지정해야합니다.

스크립트를 python dynamo.db으로 실행할 때 NoRegionError()이 표시됩니다. 그러나 방금 jupyter notebook 또는 qtconsole 환경에서 클래스를 호출하거나 스크립트의 각 명령을 파이썬 셸에서 별도로 실행하면 오류가 발생하지 않습니다.

내 자격 증명을 로컬 .aws 폴더에 추가 했으므로이 오류가 발생하는 이유와 디버깅 방법을 잘 모릅니다. 여기에 내가 일하고 있어요 클래스입니다 :

import boto3 

class Dynamo(object): 

    def __init__(self, **kwargs): 

     self._db_api = 'dynamodb' 
     self._session = None 
     self._client = None 
     self._database = None 
     self._region_name = kwargs.get('region_name', 'us-west-2') 
     self._endpoint_url = kwargs.get('endpoint_url', 'http://localhost:8000') 

     self.cached_table = {} 
     self.table = None 

    def connect(self): 
     self._session = boto3.Session() 
     print(self._region_name) 
     print(self._db_api) 

     if self._session: 
      self._database = self._session.resource(self._db_api) 


def main(): 

    dynamo = Dynamo() 
    dynamo.connect() 

    return dynamo 

if __name__ == '__main__': 
    dynodb = main() 

는 그리고 이것은 내가지고있어 오류입니다 :

Traceback (most recent call last): 
    File "test.py", line 39, in <module> 
    dynodb = main() 
    File "test.py", line 34, in main 
    dynamo.connect() 
    File "test.py", line 28, in connect 
    self._database = self._session.resource(self._db_api) 
    File "python2.7/site-packages/boto3/session.py", line 389, in resource 
    aws_session_token=aws_session_token, config=config) 
    File "python2.7/site-packages/boto3/session.py", line 263, in client 
aws_session_token=aws_session_token, config=config) 
    File "python2.7/site-packages/botocore/session.py", line 824, in create_client 
client_config=config, api_version=api_version) 
    File "python2.7/site-packages/botocore/client.py", line 69, in create_client 
verify, credentials, scoped_config, client_config, endpoint_bridge) 
    File "python2.7/site-packages/botocore/client.py", line 222, in _get_client_args 
verify, credentials, scoped_config, client_config, endpoint_bridge) 
    File "python2.7/site-packages/botocore/args.py", line 44, in get_client_args 
endpoint_url, is_secure, scoped_config) 
    File "python2.7/site-packages/botocore/args.py", line 101, in compute_client_args 
service_name, region_name, endpoint_url, is_secure) 
    File "python2.7/site-packages/botocore/client.py", line 295, in resolve 
service_name, region_name) 
    File "python2.7/site-packages/botocore/regions.py", line 122, in construct_endpoint 
partition, service_name, region_name) 
    File "python2.7/site-packages/botocore/regions.py", line 135, in _endpoint_for_partition 
raise NoRegionError() 
botocore.exceptions.NoRegionError: You must specify a region. 

답변

0

당신이해야 create a DynamoDB client 사용 boto3 템플릿 : 또한

boto3.client('dynamodb', region_name='us-west-2', endpoint_url='http://localhost:8000') 

참조 this question and answer.

+0

사실 그렇지만, ipython 노트북을 통해 호출 할 때처럼 코드에서 찾지 못한 경우 boto3 로컬 설정을 확인해서는 안됩니까? 나는 이것을 다른 곳에서 설정할 수 있기를 원했고 그 질문에서 설명한 것처럼 지역과 자격 증명을'.aws' 폴더에 넣었습니다. 나는 그 질문을 왜 boto3가 그 폴더를 보지 않는지 짐작한다. – oxtay

관련 문제