如何使用json格式化Python.转储,使您的Lambda函数正确响应API网关?



这是我关于Stack Overflow的第一篇文章,所以希望我说得足够具体。我正试图将Lambda函数(在Python中编码)与DynamoDB和API网关集成。我希望API从DynamoDB返回一个项目,但是当我导航到API端点时,我得到了一个Internal server error消息。我看过CloudWatch日志,他们说这是由malformed Lambda proxy response引起的。

经过进一步调查,我相当确定这与使用json.dumps格式化LambdaresponseBody有关。但是在尝试了几十种不同的组合后,我不知道正确的语法(我没有任何Python经验)。

这是我的Lambda函数:

def lambda_handler(event, context):
ddbResponse = table.update_item(
Key={
"id": "user1"
},
UpdateExpression='ADD clicks :inc',
ExpressionAttributeValues={
':inc': 1
},
ReturnValues="UPDATED_NEW"
)
responseBody = json.dumps(XXXXXXXXXX)
apiResponse = {
"isBase64Encoded": False,
"statusCode": 200,
"body": responseBody
}
return apiResponse

如果我只是希望API响应是从DynamoDB表返回的clicks的数量,我必须在json.dumps括号之间的XXXX中放什么?提前感谢

ddbResponse['Attributes']['clicks'])会给你点击。我们可以返回

return {
'statusCode': 200,
'body': json.dumps({'clicks': int(ddbResponse['Attributes']['clicks'])})
}

只返回点击

{
'statusCode': 200,
'body': int(response['Attributes']['clicks'])
}

最新更新