Как получить доступ к Dynamodb изнутри AWS Lambda? - PullRequest
0 голосов
/ 24 октября 2019

Как вы читаете запись Dynamodb из функции AWS Lambda?

Я пытаюсь вызвать get_item через:

import os
import boto3

def handler(event, context):
    id = event['id']
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('mytable')
    response = table.get_item(
        Key={
            'id': id,
        }
    )
    print('response:', response)
    item = response['Item']
    return {}

, но когда я запускаю тест черезинструмент лямбда-тестирования завершается с ошибкой:

{
  "errorMessage": "'Item'",
  "errorType": "KeyError",
  "stackTrace": [
    "  File \"/var/task/main.py\", line 33, in handler\n    item = response['Item']\n"
  ]
}

Даже если docs say get_item должен вернуть объект, содержащий словарь Item, он на самом деле возвращает:

{'ResponseMetadata': {'RequestId': 'DIDH3KVSPP1LU7O0TBLGP701QRVV4KQNSO5AEMVJF66Q9ASUAAJG', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Thu, 24 Oct 2019 03:15:42 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '2', 'connection': 'keep-alive', 'x-amzn-requestid': 'DIDH3KVSPP1LU7O0TBLGP701QRVV4KQNSO5AEMVJF66Q9ASUAAJG', 'x-amz-crc32': '2745614147'}, 'RetryAttempts': 0}}

Почему Item не предоставляется? Как получить запись из «Динамо»?

1 Ответ

2 голосов
/ 24 октября 2019

Я протестировал ваш код, и он прекрасно работал:

  • Сначала я создал таблицу DynamoDB с первичным ключом с именем id
  • Затем я добавил несколько элементов втаблица
  • Затем я запустил ваш код с изменениями для моей таблицы:
import boto3

def handler(event, context):
    id = 'food'
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('stack')
    response = table.get_item(
        Key={
            'id': id,
        }
    )
    print('response:', response)
    item = response['Item']
    return {}

Это вернуло:

response: {'Item': {'id': 'food', 'name': 'apple'}, 'ResponseMetadata': {'RequestId': '...', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Thu, 24 Oct 2019 04:38:35 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '49', 'connection': 'keep-alive', 'x-amzn-requestid': '...', 'x-amz-crc32': '...'}, 'RetryAttempts': 0}}

Обратите внимание на Item вначало возвращаемых данных.

Некоторые возможные причины, по которым они не сработали:

  • Вы получили KeyError. Убедитесь, что ваш первичный ключ называется id, чтобы соответствовать коду в вызове get_item().
  • В таблице могут отсутствовать записи с id, для которого установлено запрашиваемое значение. Когда я попробовал это, я получил точно такое же сообщение об ошибке, которое вы получили . Поэтому проверьте, что ваш код делает с id = event['id'], поскольку он, вероятно, не возвращает ожидаемое вами значение.
...