【问题标题】:Why does boto3 not consistently find my table in local DynamoDB?为什么 boto3 无法始终在本地 DynamoDB 中找到我的表?
【发布时间】:2019-02-09 10:13:28
【问题描述】:

我正在运行一个本地 dockerised 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')]

...但是当从本地运行的烧瓶应用程序中的断点访问此表时,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

【问题讨论】:

    标签: python flask amazon-dynamodb


    【解决方案1】:

    想通了。问题是在运行烧瓶应用程序时,我的环境变量中有我的AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。我知道boto3 automatically checks for the presence of these 在使用时,但我没有意识到这会对 local DynamoDB 产生任何影响。在不深入研究源代码的情况下,它似乎有效地将本地 DynamoDB 分区为每个 AWS_ACCESS_KEY_ID 的不同实例,包括未设置 AWS_ACCESS_KEY_ID 的情况。

    【讨论】:

    • 有一个参数-sharedDB可以在启动本地dynamodb时设置为只使用一个数据库而忽略凭据。
    • @cementblocks 不错!事实上,第二个要点here 解释了我遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多