Доступ к AWS через PynamoDB по сравнению с низкоуровневым botocore

Я правильно настроил интерфейс командной строки AWS, следуя инструкциям, и хочу получить доступ к таблице DynamoDB из высокоуровневого пакета PynamoDB а не бото3.

Если я попытаюсь получить доступ к своему кластеру AWS через низкоуровневый пакет botocore, который используется как boto3, так и PynamoDB, и подключиться к таблице 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, и конфигурация должна быть неявной.


person mar tin    schedule 09.05.2016    source источник
comment
Вы нашли решение для этого?   -  person NoorJafri    schedule 05.11.2018
comment
@NoorJafri Нет, в итоге вернулся к использованию бото.   -  person mar tin    schedule 06.11.2018
comment
Я исправил это, просто явно упомянув регион в метаклассе. Я положу свой ответ.   -  person NoorJafri    schedule 07.11.2018
comment
См. эту проблему pynomodb, на момент публикации она все еще открыта github.com/pynamodb/PynamoDB/ вопросы/211   -  person Spcogg the second    schedule 07.05.2020


Ответы (2)


Эй, я знаю, что уже довольно поздно, потому что я следил за вашей веткой с той же проблемой, и незадолго до того, как вернуться к бото, я явно использовал регион, как упоминал @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()
person NoorJafri    schedule 06.11.2018

Возможно, дело в неправильно сконфигурированном регионе. Похоже, что pynamo не учитывает настроенный регион, вы должны явно передать ему нужный регион. В противном случае вы получите us-east-1.

person Jordon Phillips    schedule 09.05.2016
comment
Пробовал выставлять регион в Пинамо, результат тот же. - person mar tin; 10.05.2016