Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从AWS Lambda内部访问Dynamodb?_Python_Amazon Web Services_Aws Lambda_Amazon Dynamodb_Boto3 - Fatal编程技术网

Python 如何从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

如何从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={
            '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"
  ]
}
尽管say
get\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']
    检查您的代码正在做什么,因为它可能没有返回您期望的值