求助:IoT Dash Button触发的Lambda函数查询DynamoDB失败问题
问题排查与解决方案
咱们一步步梳理你代码里的问题,再说说日志的去向:
代码里的几个关键错误
- Python版本语法问题:你用了Python2的
print 'xxx'写法,但AWS Lambda现在默认运行Python3环境,必须改成带括号的print('xxx'),否则会直接报错。 - 缺少DynamoDB表初始化:代码里直接调用
table.query(),但根本没定义table对象!需要先通过boto3获取DynamoDB资源并指定你的表名。 - KeyConditionExpression变量引用错误:你把变量
Device_ID_var用单引号括起来了,这会让DynamoDB去查询Device_ID等于字符串"Device_ID_var"的条目,而不是你实际拿到的serialNumber值,得去掉引号。 - 缺少Key导入:使用
Key()条件表达式之前,得先从boto3的dynamodb conditions模块导入它,否则会报名称未定义错误。
修正后的完整代码
import boto3 from boto3.dynamodb.conditions import Key def lambda_handler(event, context): print('Init 1Push_Care_DATAprint') # 获取按钮的serialNumber Device_ID_var = event['serialNumber'] print(event) # 初始化DynamoDB表对象,记得替换成你的实际表名 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('你的DynamoDB表名') # 正确查询对应的条目 response = table.query( KeyConditionExpression=Key('Device_ID').eq(Device_ID_var) ) items = response['Items'] print(items)
关于打印信息的输出位置
你用print()输出的所有内容,都会被AWS Lambda记录到CloudWatch Logs里:
- 你可以直接在Lambda控制台打开你的函数,切换到「监控」标签页,点击「查看日志在CloudWatch」就能找到对应的日志组;
- 也可以直接登录CloudWatch控制台,找到对应Lambda函数的日志组(格式一般是
/aws/lambda/你的函数名),里面的日志流就包含所有print的内容和函数运行的报错信息,非常适合排查问题。
内容的提问来源于stack exchange,提问作者Osiris.N
相关产品推荐
相关产品推荐

