您如何从AWS Lambda函数内部读取Dynamodb记录?
我正尝试通过以下方式致电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 {}
但是当我通过Lambda测试工具运行测试时,它失败并显示以下错误:
{
"errorMessage": "'Item'",
"errorType": "KeyError",
"stackTrace": [
" File \"/var/task/main.py\", line 33, in handler\n item = response['Item']\n"
]
}
即使docs说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
?如何从Dynamo检索记录?
答案 0 :(得分:2)
我测试了您的代码,它工作得很好:
id
的主键DynamoDB表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']
的处理方式,因为它可能没有返回您期望的值。