Python 如何从AWS Lambda内部访问Dynamodb?
如何从AWS Lambda函数内部读取Dynamodb记录 我正试图通过以下方式呼叫Python 如何从AWS Lambda内部访问Dynamodb?,python,amazon-web-services,aws-lambda,amazon-dynamodb,boto3,Python,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Boto3,如何从AWS Lambda函数内部读取Dynamodb记录 我正试图通过以下方式呼叫get\u 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
get\u 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"
]
}
尽管sayget\u项
应该返回包含项
字典的对象,但它实际上返回:
{'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}}
为什么不提供
项目
?如何从Dynamo检索记录?我测试了您的代码,它运行得非常好:
- 首先,我创建了一个DynamoDB表,其中包含一个名为
id
- 然后我在表中添加了一些项目
- 然后,我运行了您的代码,并对我的表进行了更改:
导入boto3
def处理程序(事件、上下文):
id=‘食物’
dynamodb=boto3.resource('dynamodb')
表=发电机。表('堆栈')
响应=table.get\u项目(
钥匙={
“id”:id,
}
)
打印('响应:',响应)
项目=响应['item']
返回{}
这返回:
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}}
注意返回数据前面的项
它不适用于您的一些可能原因:
- 您收到一个
。检查主键是否被调用键错误
,以匹配id
调用中的代码get\u item()
- 该表可能没有将
设置为所请求值的任何条目。当我尝试此操作时,得到的错误消息与您收到的完全相同。因此,请使用id
检查您的代码正在做什么,因为它可能没有返回您期望的值id=event['id']
- 首先,我创建了一个DynamoDB表,其中包含一个名为
id
- 然后我在表中添加了一些项目
- 然后,我运行了您的代码,并对我的表进行了更改:
导入boto3
def处理程序(事件、上下文):
id=‘食物’
dynamodb=boto3.resource('dynamodb')
表=发电机。表('堆栈')
响应=table.get\u项目(
钥匙={
“id”:id,
}
)
打印('响应:',响应)
项目=响应['item']
返回{}
这返回:
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}}
注意返回数据前面的项
它不适用于您的一些可能原因:
- 您收到一个
。检查主键是否被调用键错误
,以匹配id
调用中的代码get\u item()
- 该表可能没有将
设置为所请求值的任何条目。当我尝试此操作时,得到的错误消息与您收到的完全相同。因此,请使用id
检查您的代码正在做什么,因为它可能没有返回您期望的值id=event['id']