Amazon web services DynamoDB使用无服务器的Python模板为body提供KeyError
lambda函数的代码如下所示:Amazon web services DynamoDB使用无服务器的Python模板为body提供KeyError,amazon-web-services,amazon-dynamodb,aws-serverless,Amazon Web Services,Amazon Dynamodb,Aws Serverless,lambda函数的代码如下所示: import json import logging import os import time import uuid import boto3 dynamodb = boto3.resource('dynamodb') def create(event, context): data = json.loads(event['body']) if 'text' not in data: logging.error("
import json
import logging
import os
import time
import uuid
import boto3
dynamodb = boto3.resource('dynamodb')
def create(event, context):
data = json.loads(event['body'])
if 'text' not in data:
logging.error("Validation Failed")
raise Exception("Couldn't create the todo item.")
timestamp = str(time.time())
table = dynamodb.Table(os.environ['DYNAMODB_TABLE'])
item = {
'id': str(uuid.uuid1()),
'name': data['text'],
'description': data['text'],
'price': data['text'],
'createdAt': timestamp,
'updatedAt': timestamp,
}
# write the todo to the database
table.put_item(Item=item)
# create a response
response = {
"statusCode": 200,
"body": json.dumps(item)
}
return response
使用AWS Lambda测试功能的测试为:
{
"name": "Masks",
"description": "A box of 50 disposable masks",
"price": "$10"
}
日志输出为:
START RequestId: 5cf1c00a-dba5-4ef6-b5e7-b692d8235ffe Version: $LATEST
[ERROR] KeyError: 'body'
Traceback (most recent call last):
File "/var/task/todos/create.py", line 12, in create
data = json.loads(event['body'])END RequestId: 5cf1c00a-dba5-4ef6-b5e7-b692d8235ffe
为什么“身体”给了我一个关键错误?我该如何解决这个问题?该模板直接来自在线教程,基于在线教程,人们成功地使用了完全相同的代码,不同值的albie
我尝试过更改变量名和值,但没有效果
sls deploy
已成功创建表,但我无法向其中输入任何数据。
编辑1:对于不熟悉AWS Lambda测试功能的用户,使用邮递员输入相同的数据会导致502网关错误。假设这是正确的
事件
对象:
{
"name": "Masks",
"description": "A box of 50 disposable masks",
"price": "$10"
}
与此事件匹配的代码应为:
import json
import logging
import os
import time
import uuid
import boto3
dynamodb = boto3.resource('dynamodb')
def create(event, context):
timestamp = str(time.time())
table = dynamodb.Table(os.environ['DYNAMODB_TABLE'])
item = {
'id': str(uuid.uuid1()),
'name': event['name'],
'description': event['description'],
'price': event['price'],
'createdAt': timestamp,
'updatedAt': timestamp,
}
# write the todo to the database
table.put_item(Item=item)
# create a response
response = {
"statusCode": 200,
"body": json.dumps(item)
}
return response
“使用AWS CloudWatch进行测试”是什么意思?AWS CloudWatch允许您使用测试用例测试Lambda函数。请检查更新的问题。如果您提供的是您的测试
事件
,那么它显然没有任何正文
。但您正试图在事件['body']
中访问它。同样,它没有任何文本
,但您尝试访问它的数据['text']
。因此,不清楚你想要实现什么。基于什么?您确信这是您的正确活动吗:{“名称”:“面具”、“说明”:“一盒50个一次性面具”、“价格”:“$10”}
。因为它与您的代码完全不匹配。我添加了答案。你可以看一看,谢谢!这正是我要找的。如何触发此函数并使用表单传递颤振应用程序中的三个字符串?我在任何地方都找不到它的相关文档。