我正在创建一个SAM web应用程序,其后端是Python Lambda函数前面的一个API,该函数具有一个DynamoDB表,该表维护对API的HTTP调用数。API还必须返回此数字。yaml代码本身正常加载。我的问题是编写Lambda函数来迭代并返回计数。这是我的密码:
def lambda_handler(event, context):
dynamodb = boto3.resource("dynamodb")
ddbTableName = os.environ["databaseName"]
table = dynamodb.Table(ddbTableName)
# Update item in table or add if doesn't exist
ddbResponse = table.update_item(
Key={"id": "VisitorCount"},
UpdateExpression="SET count = count + :value",
ExpressionAttributeValues={":value": Decimal(context)},
ReturnValues="UPDATED_NEW",
)
# Format dynamodb response into variable
responseBody = json.dumps({"VisitorCount": ddbResponse["Attributes"]["count"]})
# Create api response object
apiResponse = {"isBase64Encoded": False, "statusCode": 200, "body": responseBody}
# Return api response object
return apiResponse
我可以将VisitorCount设置为字符串,但不能设置为数字。我得到这个错误:[ERROR] TypeError: lambda_handler() missing 1 required positional argument: 'cou response = request_handler(event, lambda_context)le_event_request
发生了什么事
[更新]我发现了原始错误,即SAM应用程序未正确接收该函数。更改名称修复了此问题,现在正在读取。现在我必须对实际的Python进行故障排除。新代码:
import json
import boto3
import os
dynamodb = boto3.resource("dynamodb")
ddbTableName = os.environ["databaseName"]
table = dynamodb.Table(ddbTableName)
Key = {"VisitorCount": { "N" : "0" }}
def handler(event, context):
# Update item in table or add if doesn't exist
ddbResponse = table.update_item(
UpdateExpression= "set VisitorCount = VisitorCount + :val",
ExpressionAttributeValues={":val": {"N":"1"}},
ReturnValues="UPDATED_NEW",
)
# Format dynamodb response into variable
responseBody = json.dumps({"VisitorCount": ddbResponse["Attributes"]["count"]})
# Create api response object
apiResponse = {"isBase64Encoded": False, "statusCode": 200,"body": responseBody}
# Return api response object
return apiResponse
我在第13行得到一个语法错误,这是
UpdateExpression= "set VisitorCount = VisitorCount + :val", But I can't tell where I am going wrong on this. It should update the DynamoDB table to increase the count by 1. Looking at the AWS guide it appears to be the correct syntax.
不确定确切的错误是什么,但
ddbResponse
将是这样的:ExpressionAttributeValues
设置Decimal(1)
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.03.html#GettingStarted.Python.03.04
相关问题 更多 >
编程相关推荐