我正在运行本地的dockerized DynamoDB:
~ docker run -d -p 8000:8000 amazon/dynamodb-local
...其中有一个表,通过aws dynamodb CLI *创建。
从ipython shell 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')]
...但是在本地运行的flask应用程序中从断点访问该表时,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()
的调用都返回相同的内容?
两个上下文都使用boto v1.7.1和python 2.7.13从同一个virtualenv运行
*用于创建表的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
答案 0 :(得分:0)
弄清楚了。问题是在运行flask应用程序时,我的环境变量中有AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
。我知道使用boto3 automatically checks for the presence of these时,但是我没有意识到这会对 local DynamoDB产生任何影响。无需深入研究源代码,它似乎可以有效地将本地DynamoDB对每个AWS_ACCESS_KEY_ID
划分为不同的实例,包括未设置AWS_ACCESS_KEY_ID
的情况。