2016-12-12 68 views
1

DynamoDBデータベースの操作を処理するクラスを作成しています。 1つのテーブルだけを持つシンプルなデータベースになります。raise NoRegionError() - リージョンを指定する必要があります

python dynamo.dbとしてスクリプトを実行すると、NoRegionError()が表示されます。しかし、私はちょうどjupyter notebookまたはqtconsole環境でクラスを呼び出すか、Pythonシェルで別々にスクリプトの各コマンドを実行すると、私はそのようなエラーはありません。

ローカルの.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'フォルダに入れました。私は、なぜそのフォルダを参照していないのですか? – oxtay

関連する問題