Ich mache eine Klasse, um Operationen für eine DynamoDB-Datenbank zu behandeln. Es wird eine einfache Datenbank mit nur einer Tabelle sein.Raise NoRegionError() - Sie müssen eine Region angeben
Ich bekomme eine NoRegionError()
bei der Ausführung meines Skripts als python dynamo.db
. Wenn ich jedoch die Klasse in einer jupyter notebook
oder qtconsole
Umgebung aufrufen oder jeden der Befehle im Skript separat in einer Python-Shell ausführen, bekomme ich keinen solchen Fehler.
Ich habe meine Anmeldeinformationen zum lokalen Ordner .aws
hinzugefügt, so dass ich nicht sicher bin, warum dieser Fehler auftritt und wie man ihn debuggt. Hier ist die Klasse, ich arbeite:
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()
Und das ist der Fehler Ich erhalte:
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.
Das stimmt, aber sollte boto3 die lokalen Einstellungen nicht überprüfen, wenn es im Code nicht gefunden wird, wie es beim Aufruf über ipython notebook der Fall ist? Ich möchte in der Lage sein, dies anderswo zu setzen und wie in der Frage erläutert, habe ich die Region und die Anmeldeinformationen in '.aws'-Ordner. Ich denke, die Frage ist, warum boto3 diesen Ordner nicht sieht. – oxtay