Почему boto3 не всегда находит мою таблицу в локальном DynamoDB? - PullRequest
0 голосов
/ 04 сентября 2018

Я использую локальную док-станцию ​​DynamoDB:

~ docker run -d -p 8000:8000 amazon/dynamodb-local

... с таблицей, созданной через CLI AWS DynamodB *.

Из оболочки ipython boto3 может найти таблицу без проблем:

db = boto3.resource('dynamodb',
                    endpoint_url='http://localhost:8000',
                    region_name='eu-west-2')

print([t for t in db.tables.all()])

# ==> [dynamodb.Table(name=u'myTable')]

... но при доступе к этой таблице с точки останова в локально работающем приложении фляги, boto3 не может найти таблицу:

db = boto3.resource('dynamodb',
                    endpoint_url='http://localhost:8000',
                    region_name='eu-west-2')
[t for t in db.tables.all()]

# ==> []

Я не могу придумать ничего, что могло бы повлиять на работу приложения boto3 в контексте приложения колбы, поэтому я застрял. Почему вызов db.tables.all() не возвращает одинаковое в обоих случаях?

Оба контекста работают от одного и того же virtualenv, используя boto v1.7.1 и python 2.7.13


* Команда CLI, использованная для создания таблицы:

~ aws dynamodb create-table --table-name myTable --attribute-definitions AttributeName=api_key,AttributeType=S AttributeName=session_id,AttributeType=S AttributeName=time_stamp,AttributeType=N --key-schema AttributeName=session_id,KeyType=HASH --global-secondary-indexes IndexName=api_key-time_stamp-index,KeySchema=["{KeyType=HASH,AttributeName=api_key}","{KeyType=RANGE,AttributeName=time_stamp}"],Projection="{ProjectionType=ALL}",ProvisionedThroughput="{ReadCapacityUnits=5,WriteCapacityUnits=5}" --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 --endpoint-url http://localhost:8000 --region eu-west-2

1 Ответ

0 голосов
/ 04 сентября 2018

Разобрался. Проблема заключалась в том, что у меня были AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в моих переменных окружения во время запуска колбы. Я знал, что boto3 автоматически проверяет наличие этих , когда он используется, но я не знал, что это повлияет на локальный DynamoDB. Не вдаваясь в исходный код, похоже, что он эффективно разбивает локальную DynamoDB на разные экземпляры для каждого AWS_ACCESS_KEY_ID, включая случай, когда AWS_ACCESS_KEY_ID не установлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...