基于boto3的Lambda函数测试HTTP API报Internal server error排查
问题根因
返回的Internal server error是代码语法错误导致,和权限配置、json与boto3混用规范无关。
你的返回字典存在两个明确语法问题:
'statusCode': 200行末尾缺少逗号,Python无法正确解析字典结构body作为字典键没有加字符串引号,会被Python识别为未定义变量,直接抛出NameError
另外代码里用input作为变量名属于不良实践,input是Python内置函数,重名会覆盖内置能力,容易触发隐性bug。
修正后的可运行代码:
import boto3 import json def lambda_handler(event, context): client = boto3.resource('dynamodb') table = client.Table('Visit_Count') visit_data = {'Visits': 1} table.put_item(Item=visit_data) return { 'statusCode': 200, 'body': json.dumps("Hello, World!"), 'headers': { 'Content-Type': 'application/json' } }
json与boto3同文件编写规范
- 调用boto3所有API方法时,直接传入Python原生字典、列表类型参数即可,boto3内部会自动完成序列化处理,不需要手动用
json.dumps()把参数转成字符串,传字符串反而会触发参数格式错误。 - 只有在需要给API Gateway返回字符串格式响应、或者需要把结构化数据转成JSON字符串输出的场景,才需要调用
json.dumps()处理对应内容。 - Python字典的语法要求是通用规则:字符串类型的键必须用引号包裹,键值对之间必须用逗号分隔,和是否同时使用json、boto3没有关联。
后续排查提示
如果修正语法后仍然报错,再检查Lambda执行角色的权限配置,确保角色拥有目标DynamoDB表的dynamodb:PutItem操作权限即可。
内容的提问来源于stack exchange,提问作者kian
相关产品推荐
相关产品推荐

