KeyConditions и KeyConditionExpression терпят неудачу в Python - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь изменить пример лямбда-микросервиса, чтобы отправить запрос GET в Dynamodb из шлюза aws-api.Я получил пример для работы, но он выполняет сканирование таблицы, а не запрос.

Запрос не удается установить выражение KeyConditionExx со следующим сообщением: «Лямбда-выполнение не выполнено со статусом 200 из-за ошибки функции клиента:Название «Ключ» не определено ».

Соответствующий питон находится здесь:

     operations = {
         'GET': lambda dynamo, x: dynamo.query(**x),
     }

    dynamodb = boto3.resource('dynamodb')

    params = {
    'KeyConditionExpression': Key('flight').eq("2002")     
    }

table = dynamodb.Table('Test')
response = table.query(params)

Эта форма запроса та же, что и в этой публикации:

[Working query][1] 

, и я получил ту же ошибку выше.

В качестве альтернативы, я получаю другую ошибку, когда пытаюсь установить KeyConditions: «Сбой выполнения лямбды со статусом 200 из-за ошибки функции клиента: Произошла ошибка (ValidationException) при вызове операции запроса: Либо KeyConditionsили параметр KeyConditionExpression должен быть указан в запросе .. "

Здесь находится соответствующий питон:

    params = {
    'TableName': 'Test',
    'KeyConditions': {
        "flight": {
            'ComparisonOperator': "EQ",
            'AttributeValueList': [{'S': '2002'}]
        }
    }
}

Моя таблица (Test) имеет индекс GSI, индекс полета, с полетом какключ раздела и элементы (все типы строк) - это просто:

Test table items

В другом сообщении сказано: «KeyConditionExpression не поддерживается с nodejs SDK."Есть ли схожие проблемы с моим использованием Python 3.7?

Также я не использую локальный DynamoDB.(Я хватаюсь за соломинку за подсказками.)

Как бы ни был прост весь этот контрольный пример, я, должно быть, упускаю что-то ужасно простое, но я боролся в течение нескольких дней и прочитал десятки постов, чтобы найти это.

Может ли кто-нибудь помочь реализовать любой из этих способов определения цели запроса?

1 Ответ

1 голос
/ 19 марта 2019

Было несколько разных проблем, которые усложнили мою проблему.Я предполагаю, что никто не ответил, потому что не было очевидного исправления.

Что я должен был сделать:

  • Библиотека ключа импорта ключа: Большое спасибо @ user3303554 засовет этот ответ для импорта ключа from boto3.dynamodb.conditions import Key

  • Разрешение запроса DynamoDB: Это, наконец, дало мне AccessDeniedException, который показал, что моя лямбда-функция не имеет разрешения на запрос DynamoDb,Большое спасибо @Lisa M Shon в этом ответе за указание на http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html, потому что это показывало, что пример микросервиса, который я начал изменять, имел разрешения на чтение / запись, но у него не было запросахимическая завивкаДобавил это к роли, и это сработало как шарм.

Надеется, что это поможет кому-то другому, просто пытающемуся выполнить простой запрос DynamoDB.

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