【问题标题】:Accessing AWS through PynamoDB vs. low-level botocore通过 PynamoDB 访问 AWS 与低级 botocore
【发布时间】:2016-05-09 15:57:24
【问题描述】:

我已按照说明正确配置了 AWS CLI,并且我想从高级包 PynamoDB 而不是 boto3 访问 DynamoDB 表。

如果我尝试通过 boto3 和 PynamoDB 都使用的低级 botocore 包访问我的 AWS 集群,并以

身份连接到 DynamoDB 表
import botocore.session
session = botocore.session.get_session()
client = session.create_client('dynamodb')
client.describe_table(TableName='my_table_name')

一切正常,表可以正常访问。

但是,我正在尝试按照文档中的教程并为表创建模型来通过 PynamoDB 进行访问,如

from pynamodb.models import Model

class MyTableModel(Model):

    class Meta:
        table_name = 'my_table_name'

    pk_field = UnicodeAttribute(hash_key=True)
    field1 = UnicodeAttribute()
    field2 = UnicodeAttribute()

并通过模型上的适当方法再次描述表格

print MyTableModel.describe_table()

我得到错误

pynamodb.exceptions.TableDoesNotExist:表不存在: Requested resource not found: Table: my_table_name not found

我不明白为什么我已经深入研究了 PynamoDB 代码,但我似乎明白它应该从 botocore 调用相同的代码并且配置应该是隐式的。

【问题讨论】:

  • 您找到解决方案了吗?
  • @NoorJafri 不,最终恢复使用 boto。
  • 我通过明确提及 MetaClass 中的区域来修复它。我会回答。
  • 查看这个 pynomodb 问题,截至发帖时它仍然处于打开状态github.com/pynamodb/PynamoDB/issues/211

标签: python amazon-web-services amazon-dynamodb botocore


【解决方案1】:

嘿,我知道现在已经很晚了,因为我正在跟进你的帖子,遇到同样的问题,就在回到 boto 之前,我明确使用了 @Jordon Phillips 提到的区域,它就像一个魅力。

from pynamodb.models import Model

class MyTableModel(Model):

    class Meta:
        table_name = 'my_table_name'
        region = os.environ['Region'] #its region I get from serverless.yml

    pk_field = UnicodeAttribute(hash_key=True)
    field1 = UnicodeAttribute()
    field2 = UnicodeAttribute()

【讨论】:

    【解决方案2】:

    这可能是区域配置错误的问题。看起来 pynamo 不尊重配置的区域,您必须明确地将其传递给您想要的区域。否则,你会得到us-east-1

    【讨论】:

    • 我尝试在 Pynamo 中设置区域,结果相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2021-08-12
    • 2012-03-14
    • 2017-08-21
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多